Genesis of lecture sources for Droidcon Berlin 2015 in Postbahnhof. default tip

Thu, 04 Jun 2015 14:50:33 +0200

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Thu, 04 Jun 2015 14:50:33 +0200
changeset 0
e8ccd40d0ef6

Genesis of lecture sources for Droidcon Berlin 2015 in Postbahnhof.

Touchgui/.gitignore file | annotate | diff | comparison | revisions
Touchgui/README.md file | annotate | diff | comparison | revisions
Touchgui/Touchgui.xdk file | annotate | diff | comparison | revisions
Touchgui/Touchgui.xdke file | annotate | diff | comparison | revisions
Touchgui/icon.png file | annotate | diff | comparison | revisions
Touchgui/intelxdk.config.android.xml file | annotate | diff | comparison | revisions
Touchgui/intelxdk.config.crosswalk.xml file | annotate | diff | comparison | revisions
Touchgui/intelxdk.config.ios.xml file | annotate | diff | comparison | revisions
Touchgui/intelxdk.config.windows8.xml file | annotate | diff | comparison | revisions
Touchgui/plugins/org.apache.cordova.device/.fetch.json file | annotate | diff | comparison | revisions
Touchgui/plugins/org.apache.cordova.device/CONTRIBUTING.md file | annotate | diff | comparison | revisions
Touchgui/plugins/org.apache.cordova.device/LICENSE file | annotate | diff | comparison | revisions
Touchgui/plugins/org.apache.cordova.device/NOTICE file | annotate | diff | comparison | revisions
Touchgui/plugins/org.apache.cordova.device/README.md file | annotate | diff | comparison | revisions
Touchgui/plugins/org.apache.cordova.device/RELEASENOTES.md file | annotate | diff | comparison | revisions
Touchgui/plugins/org.apache.cordova.device/doc/de/index.md file | annotate | diff | comparison | revisions
Touchgui/plugins/org.apache.cordova.device/doc/es/index.md file | annotate | diff | comparison | revisions
Touchgui/plugins/org.apache.cordova.device/doc/fr/index.md file | annotate | diff | comparison | revisions
Touchgui/plugins/org.apache.cordova.device/doc/index.md file | annotate | diff | comparison | revisions
Touchgui/plugins/org.apache.cordova.device/doc/it/index.md file | annotate | diff | comparison | revisions
Touchgui/plugins/org.apache.cordova.device/doc/ja/index.md file | annotate | diff | comparison | revisions
Touchgui/plugins/org.apache.cordova.device/doc/ko/index.md file | annotate | diff | comparison | revisions
Touchgui/plugins/org.apache.cordova.device/doc/pl/index.md file | annotate | diff | comparison | revisions
Touchgui/plugins/org.apache.cordova.device/doc/ru/index.md file | annotate | diff | comparison | revisions
Touchgui/plugins/org.apache.cordova.device/doc/zh/index.md file | annotate | diff | comparison | revisions
Touchgui/plugins/org.apache.cordova.device/plugin.xml file | annotate | diff | comparison | revisions
Touchgui/plugins/org.apache.cordova.device/src/android/Device.java file | annotate | diff | comparison | revisions
Touchgui/plugins/org.apache.cordova.device/src/blackberry10/index.js file | annotate | diff | comparison | revisions
Touchgui/plugins/org.apache.cordova.device/src/browser/DeviceProxy.js file | annotate | diff | comparison | revisions
Touchgui/plugins/org.apache.cordova.device/src/firefoxos/DeviceProxy.js file | annotate | diff | comparison | revisions
Touchgui/plugins/org.apache.cordova.device/src/ios/CDVDevice.h file | annotate | diff | comparison | revisions
Touchgui/plugins/org.apache.cordova.device/src/ios/CDVDevice.m file | annotate | diff | comparison | revisions
Touchgui/plugins/org.apache.cordova.device/src/tizen/DeviceProxy.js file | annotate | diff | comparison | revisions
Touchgui/plugins/org.apache.cordova.device/src/ubuntu/device.cpp file | annotate | diff | comparison | revisions
Touchgui/plugins/org.apache.cordova.device/src/ubuntu/device.h file | annotate | diff | comparison | revisions
Touchgui/plugins/org.apache.cordova.device/src/ubuntu/device.js file | annotate | diff | comparison | revisions
Touchgui/plugins/org.apache.cordova.device/src/windows/DeviceProxy.js file | annotate | diff | comparison | revisions
Touchgui/plugins/org.apache.cordova.device/src/windows8/DeviceProxy.js file | annotate | diff | comparison | revisions
Touchgui/plugins/org.apache.cordova.device/src/wp/Device.cs file | annotate | diff | comparison | revisions
Touchgui/plugins/org.apache.cordova.device/tests/plugin.xml file | annotate | diff | comparison | revisions
Touchgui/plugins/org.apache.cordova.device/tests/tests.js file | annotate | diff | comparison | revisions
Touchgui/plugins/org.apache.cordova.device/www/device.js file | annotate | diff | comparison | revisions
Touchgui/plugins/org.apache.cordova.dialogs/.fetch.json file | annotate | diff | comparison | revisions
Touchgui/plugins/org.apache.cordova.dialogs/CONTRIBUTING.md file | annotate | diff | comparison | revisions
Touchgui/plugins/org.apache.cordova.dialogs/LICENSE file | annotate | diff | comparison | revisions
Touchgui/plugins/org.apache.cordova.dialogs/NOTICE file | annotate | diff | comparison | revisions
Touchgui/plugins/org.apache.cordova.dialogs/README.md file | annotate | diff | comparison | revisions
Touchgui/plugins/org.apache.cordova.dialogs/RELEASENOTES.md file | annotate | diff | comparison | revisions
Touchgui/plugins/org.apache.cordova.dialogs/doc/de/index.md file | annotate | diff | comparison | revisions
Touchgui/plugins/org.apache.cordova.dialogs/doc/es/index.md file | annotate | diff | comparison | revisions
Touchgui/plugins/org.apache.cordova.dialogs/doc/fr/index.md file | annotate | diff | comparison | revisions
Touchgui/plugins/org.apache.cordova.dialogs/doc/index.md file | annotate | diff | comparison | revisions
Touchgui/plugins/org.apache.cordova.dialogs/doc/it/index.md file | annotate | diff | comparison | revisions
Touchgui/plugins/org.apache.cordova.dialogs/doc/ja/index.md file | annotate | diff | comparison | revisions
Touchgui/plugins/org.apache.cordova.dialogs/doc/ko/index.md file | annotate | diff | comparison | revisions
Touchgui/plugins/org.apache.cordova.dialogs/doc/pl/index.md file | annotate | diff | comparison | revisions
Touchgui/plugins/org.apache.cordova.dialogs/doc/ru/index.md file | annotate | diff | comparison | revisions
Touchgui/plugins/org.apache.cordova.dialogs/doc/zh/index.md file | annotate | diff | comparison | revisions
Touchgui/plugins/org.apache.cordova.dialogs/plugin.xml file | annotate | diff | comparison | revisions
Touchgui/plugins/org.apache.cordova.dialogs/src/android/Notification.java file | annotate | diff | comparison | revisions
Touchgui/plugins/org.apache.cordova.dialogs/src/blackberry10/index.js file | annotate | diff | comparison | revisions
Touchgui/plugins/org.apache.cordova.dialogs/src/firefoxos/notification.js file | annotate | diff | comparison | revisions
Touchgui/plugins/org.apache.cordova.dialogs/src/ios/CDVNotification.bundle/beep.wav file | annotate | diff | comparison | revisions
Touchgui/plugins/org.apache.cordova.dialogs/src/ios/CDVNotification.h file | annotate | diff | comparison | revisions
Touchgui/plugins/org.apache.cordova.dialogs/src/ios/CDVNotification.m file | annotate | diff | comparison | revisions
Touchgui/plugins/org.apache.cordova.dialogs/src/ubuntu/notification.cpp file | annotate | diff | comparison | revisions
Touchgui/plugins/org.apache.cordova.dialogs/src/ubuntu/notification.h file | annotate | diff | comparison | revisions
Touchgui/plugins/org.apache.cordova.dialogs/src/ubuntu/notification.qml file | annotate | diff | comparison | revisions
Touchgui/plugins/org.apache.cordova.dialogs/src/windows8/NotificationProxy.js file | annotate | diff | comparison | revisions
Touchgui/plugins/org.apache.cordova.dialogs/src/wp/Notification.cs file | annotate | diff | comparison | revisions
Touchgui/plugins/org.apache.cordova.dialogs/src/wp/NotificationBox.xaml file | annotate | diff | comparison | revisions
Touchgui/plugins/org.apache.cordova.dialogs/src/wp/NotificationBox.xaml.cs file | annotate | diff | comparison | revisions
Touchgui/plugins/org.apache.cordova.dialogs/src/wp/notification-beep.wav file | annotate | diff | comparison | revisions
Touchgui/plugins/org.apache.cordova.dialogs/tests/plugin.xml file | annotate | diff | comparison | revisions
Touchgui/plugins/org.apache.cordova.dialogs/tests/tests.js file | annotate | diff | comparison | revisions
Touchgui/plugins/org.apache.cordova.dialogs/www/android/notification.js file | annotate | diff | comparison | revisions
Touchgui/plugins/org.apache.cordova.dialogs/www/blackberry10/beep.js file | annotate | diff | comparison | revisions
Touchgui/plugins/org.apache.cordova.dialogs/www/blackberry10/notification-beep.wav file | annotate | diff | comparison | revisions
Touchgui/plugins/org.apache.cordova.dialogs/www/firefoxos/danger-press.png file | annotate | diff | comparison | revisions
Touchgui/plugins/org.apache.cordova.dialogs/www/firefoxos/danger.png file | annotate | diff | comparison | revisions
Touchgui/plugins/org.apache.cordova.dialogs/www/firefoxos/default.png file | annotate | diff | comparison | revisions
Touchgui/plugins/org.apache.cordova.dialogs/www/firefoxos/gradient.png file | annotate | diff | comparison | revisions
Touchgui/plugins/org.apache.cordova.dialogs/www/firefoxos/notification.css file | annotate | diff | comparison | revisions
Touchgui/plugins/org.apache.cordova.dialogs/www/firefoxos/pattern.png file | annotate | diff | comparison | revisions
Touchgui/plugins/org.apache.cordova.dialogs/www/firefoxos/recommend.png file | annotate | diff | comparison | revisions
Touchgui/plugins/org.apache.cordova.dialogs/www/notification.js file | annotate | diff | comparison | revisions
Touchgui/plugins/org.apache.cordova.splashscreen/.fetch.json file | annotate | diff | comparison | revisions
Touchgui/plugins/org.apache.cordova.splashscreen/CONTRIBUTING.md file | annotate | diff | comparison | revisions
Touchgui/plugins/org.apache.cordova.splashscreen/LICENSE file | annotate | diff | comparison | revisions
Touchgui/plugins/org.apache.cordova.splashscreen/NOTICE file | annotate | diff | comparison | revisions
Touchgui/plugins/org.apache.cordova.splashscreen/README.md file | annotate | diff | comparison | revisions
Touchgui/plugins/org.apache.cordova.splashscreen/RELEASENOTES.md file | annotate | diff | comparison | revisions
Touchgui/plugins/org.apache.cordova.splashscreen/doc/de/index.md file | annotate | diff | comparison | revisions
Touchgui/plugins/org.apache.cordova.splashscreen/doc/es/index.md file | annotate | diff | comparison | revisions
Touchgui/plugins/org.apache.cordova.splashscreen/doc/fr/index.md file | annotate | diff | comparison | revisions
Touchgui/plugins/org.apache.cordova.splashscreen/doc/index.md file | annotate | diff | comparison | revisions
Touchgui/plugins/org.apache.cordova.splashscreen/doc/it/index.md file | annotate | diff | comparison | revisions
Touchgui/plugins/org.apache.cordova.splashscreen/doc/ja/index.md file | annotate | diff | comparison | revisions
Touchgui/plugins/org.apache.cordova.splashscreen/doc/ko/index.md file | annotate | diff | comparison | revisions
Touchgui/plugins/org.apache.cordova.splashscreen/doc/pl/index.md file | annotate | diff | comparison | revisions
Touchgui/plugins/org.apache.cordova.splashscreen/doc/ru/index.md file | annotate | diff | comparison | revisions
Touchgui/plugins/org.apache.cordova.splashscreen/doc/zh/index.md file | annotate | diff | comparison | revisions
Touchgui/plugins/org.apache.cordova.splashscreen/plugin.xml file | annotate | diff | comparison | revisions
Touchgui/plugins/org.apache.cordova.splashscreen/src/android/SplashScreen.java file | annotate | diff | comparison | revisions
Touchgui/plugins/org.apache.cordova.splashscreen/src/blackberry10/index.js file | annotate | diff | comparison | revisions
Touchgui/plugins/org.apache.cordova.splashscreen/src/ios/CDVSplashScreen.h file | annotate | diff | comparison | revisions
Touchgui/plugins/org.apache.cordova.splashscreen/src/ios/CDVSplashScreen.m file | annotate | diff | comparison | revisions
Touchgui/plugins/org.apache.cordova.splashscreen/src/tizen/SplashScreenProxy.js file | annotate | diff | comparison | revisions
Touchgui/plugins/org.apache.cordova.splashscreen/src/ubuntu/splashscreen.cpp file | annotate | diff | comparison | revisions
Touchgui/plugins/org.apache.cordova.splashscreen/src/ubuntu/splashscreen.h file | annotate | diff | comparison | revisions
Touchgui/plugins/org.apache.cordova.splashscreen/src/wp/SplashScreen.cs file | annotate | diff | comparison | revisions
Touchgui/plugins/org.apache.cordova.splashscreen/tests/ios/CDVSplashScreenTest.xcworkspace/contents.xcworkspacedata file | annotate | diff | comparison | revisions
Touchgui/plugins/org.apache.cordova.splashscreen/tests/ios/CDVSplashScreenTest.xcworkspace/xcshareddata/CDVSplashScreenTest.xccheckout file | annotate | diff | comparison | revisions
Touchgui/plugins/org.apache.cordova.splashscreen/tests/ios/CDVSplashScreenTest.xcworkspace/xcshareddata/xcschemes/CordovaLib.xcscheme file | annotate | diff | comparison | revisions
Touchgui/plugins/org.apache.cordova.splashscreen/tests/ios/CDVSplashScreenTest/CDVSplashScreenLibTests/ImageNameTest.m file | annotate | diff | comparison | revisions
Touchgui/plugins/org.apache.cordova.splashscreen/tests/ios/CDVSplashScreenTest/CDVSplashScreenLibTests/ImageNameTestDelegates.h file | annotate | diff | comparison | revisions
Touchgui/plugins/org.apache.cordova.splashscreen/tests/ios/CDVSplashScreenTest/CDVSplashScreenLibTests/ImageNameTestDelegates.m file | annotate | diff | comparison | revisions
Touchgui/plugins/org.apache.cordova.splashscreen/tests/ios/CDVSplashScreenTest/CDVSplashScreenLibTests/Info.plist file | annotate | diff | comparison | revisions
Touchgui/plugins/org.apache.cordova.splashscreen/tests/ios/CDVSplashScreenTest/CDVSplashScreenTest.xcodeproj/project.pbxproj file | annotate | diff | comparison | revisions
Touchgui/plugins/org.apache.cordova.splashscreen/tests/ios/CDVSplashScreenTest/CDVSplashScreenTest.xcodeproj/project.xcworkspace/contents.xcworkspacedata file | annotate | diff | comparison | revisions
Touchgui/plugins/org.apache.cordova.splashscreen/tests/ios/CDVSplashScreenTest/CDVSplashScreenTest.xcodeproj/project.xcworkspace/xcshareddata/CDVSplashScreenTest.xccheckout file | annotate | diff | comparison | revisions
Touchgui/plugins/org.apache.cordova.splashscreen/tests/ios/CDVSplashScreenTest/CDVSplashScreenTest.xcodeproj/xcshareddata/xcschemes/CDVSplashScreenLib.xcscheme file | annotate | diff | comparison | revisions
Touchgui/plugins/org.apache.cordova.splashscreen/tests/ios/CDVSplashScreenTest/CDVSplashScreenTest.xcodeproj/xcshareddata/xcschemes/CDVSplashScreenLibTests.xcscheme file | annotate | diff | comparison | revisions
Touchgui/plugins/org.apache.cordova.splashscreen/tests/ios/README.md file | annotate | diff | comparison | revisions
Touchgui/plugins/org.apache.cordova.splashscreen/tests/ios/package.json file | annotate | diff | comparison | revisions
Touchgui/plugins/org.apache.cordova.splashscreen/tests/plugin.xml file | annotate | diff | comparison | revisions
Touchgui/plugins/org.apache.cordova.splashscreen/tests/tests.js file | annotate | diff | comparison | revisions
Touchgui/plugins/org.apache.cordova.splashscreen/www/splashscreen.js file | annotate | diff | comparison | revisions
Touchgui/plugins/org.apache.cordova.splashscreen/www/windows8/SplashScreenProxy.js file | annotate | diff | comparison | revisions
Touchgui/plugins/org.apache.cordova.vibration/.fetch.json file | annotate | diff | comparison | revisions
Touchgui/plugins/org.apache.cordova.vibration/CONTRIBUTING.md file | annotate | diff | comparison | revisions
Touchgui/plugins/org.apache.cordova.vibration/LICENSE file | annotate | diff | comparison | revisions
Touchgui/plugins/org.apache.cordova.vibration/NOTICE file | annotate | diff | comparison | revisions
Touchgui/plugins/org.apache.cordova.vibration/README.md file | annotate | diff | comparison | revisions
Touchgui/plugins/org.apache.cordova.vibration/RELEASENOTES.md file | annotate | diff | comparison | revisions
Touchgui/plugins/org.apache.cordova.vibration/doc/de/index.md file | annotate | diff | comparison | revisions
Touchgui/plugins/org.apache.cordova.vibration/doc/es/index.md file | annotate | diff | comparison | revisions
Touchgui/plugins/org.apache.cordova.vibration/doc/fr/index.md file | annotate | diff | comparison | revisions
Touchgui/plugins/org.apache.cordova.vibration/doc/index.md file | annotate | diff | comparison | revisions
Touchgui/plugins/org.apache.cordova.vibration/doc/it/index.md file | annotate | diff | comparison | revisions
Touchgui/plugins/org.apache.cordova.vibration/doc/ja/index.md file | annotate | diff | comparison | revisions
Touchgui/plugins/org.apache.cordova.vibration/doc/ko/index.md file | annotate | diff | comparison | revisions
Touchgui/plugins/org.apache.cordova.vibration/doc/pl/index.md file | annotate | diff | comparison | revisions
Touchgui/plugins/org.apache.cordova.vibration/doc/ru/index.md file | annotate | diff | comparison | revisions
Touchgui/plugins/org.apache.cordova.vibration/doc/zh/index.md file | annotate | diff | comparison | revisions
Touchgui/plugins/org.apache.cordova.vibration/plugin.xml file | annotate | diff | comparison | revisions
Touchgui/plugins/org.apache.cordova.vibration/src/android/Vibration.java file | annotate | diff | comparison | revisions
Touchgui/plugins/org.apache.cordova.vibration/src/blackberry10/index.js file | annotate | diff | comparison | revisions
Touchgui/plugins/org.apache.cordova.vibration/src/blackberry10/native/device/libVibration.so file | annotate | diff | comparison | revisions
Touchgui/plugins/org.apache.cordova.vibration/src/blackberry10/native/public/plugin.cpp file | annotate | diff | comparison | revisions
Touchgui/plugins/org.apache.cordova.vibration/src/blackberry10/native/public/plugin.h file | annotate | diff | comparison | revisions
Touchgui/plugins/org.apache.cordova.vibration/src/blackberry10/native/public/tokenizer.cpp file | annotate | diff | comparison | revisions
Touchgui/plugins/org.apache.cordova.vibration/src/blackberry10/native/public/tokenizer.h file | annotate | diff | comparison | revisions
Touchgui/plugins/org.apache.cordova.vibration/src/blackberry10/native/simulator/libVibration.so file | annotate | diff | comparison | revisions
Touchgui/plugins/org.apache.cordova.vibration/src/blackberry10/native/src/vibration_js.cpp file | annotate | diff | comparison | revisions
Touchgui/plugins/org.apache.cordova.vibration/src/blackberry10/native/src/vibration_js.hpp file | annotate | diff | comparison | revisions
Touchgui/plugins/org.apache.cordova.vibration/src/firefoxos/VibrationProxy.js file | annotate | diff | comparison | revisions
Touchgui/plugins/org.apache.cordova.vibration/src/ios/CDVVibration.h file | annotate | diff | comparison | revisions
Touchgui/plugins/org.apache.cordova.vibration/src/ios/CDVVibration.m file | annotate | diff | comparison | revisions
Touchgui/plugins/org.apache.cordova.vibration/src/tizen/VibrationProxy.js file | annotate | diff | comparison | revisions
Touchgui/plugins/org.apache.cordova.vibration/src/ubuntu/vibration.cpp file | annotate | diff | comparison | revisions
Touchgui/plugins/org.apache.cordova.vibration/src/ubuntu/vibration.h file | annotate | diff | comparison | revisions
Touchgui/plugins/org.apache.cordova.vibration/src/wp/Vibration.cs file | annotate | diff | comparison | revisions
Touchgui/plugins/org.apache.cordova.vibration/tests/plugin.xml file | annotate | diff | comparison | revisions
Touchgui/plugins/org.apache.cordova.vibration/tests/tests.js file | annotate | diff | comparison | revisions
Touchgui/plugins/org.apache.cordova.vibration/www/blackberry10/vibrate.js file | annotate | diff | comparison | revisions
Touchgui/plugins/org.apache.cordova.vibration/www/vibration.js file | annotate | diff | comparison | revisions
Touchgui/plugins/wp8.json file | annotate | diff | comparison | revisions
Touchgui/screenshot.png file | annotate | diff | comparison | revisions
Touchgui/screenshot0a.png file | annotate | diff | comparison | revisions
Touchgui/screenshot1a.png file | annotate | diff | comparison | revisions
Touchgui/www/css/main.css file | annotate | diff | comparison | revisions
Touchgui/www/index.html file | annotate | diff | comparison | revisions
Touchgui/www/js/.DS_Store file | annotate | diff | comparison | revisions
Touchgui/www/js/main.js file | annotate | diff | comparison | revisions
Touchgui/www/lib/appframework/af.ui.css file | annotate | diff | comparison | revisions
Touchgui/www/lib/appframework/appframework.ui.min.js file | annotate | diff | comparison | revisions
Touchgui/www/lib/appframework/jq.appframework.min.js file | annotate | diff | comparison | revisions
Touchgui/www/lib/jquery/jquery-2.1.1.js file | annotate | diff | comparison | revisions
Touchiot/.gitignore file | annotate | diff | comparison | revisions
Touchiot/README.md file | annotate | diff | comparison | revisions
Touchiot/Touchiot.xdk file | annotate | diff | comparison | revisions
Touchiot/Touchiot.xdke file | annotate | diff | comparison | revisions
Touchiot/icon.png file | annotate | diff | comparison | revisions
Touchiot/main.js file | annotate | diff | comparison | revisions
Touchiot/package.json file | annotate | diff | comparison | revisions
doorbell/bellhear.js file | annotate | diff | comparison | revisions
doorbell/bellpush.js file | annotate | diff | comparison | revisions
mqttest/iotpubcli.js file | annotate | diff | comparison | revisions
mqttest/iotsubcli.js file | annotate | diff | comparison | revisions
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/Touchgui/.gitignore	Thu Jun 04 14:50:33 2015 +0200
     1.3 @@ -0,0 +1,1 @@
     1.4 +.DS_Store
     2.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     2.2 +++ b/Touchgui/README.md	Thu Jun 04 14:50:33 2015 +0200
     2.3 @@ -0,0 +1,64 @@
     2.4 +Touch Notifier Companion App
     2.5 +============================
     2.6 +The Touch Notifier Companion App is a simple app that receives data wirelessly and notifies a user if the Touch Sensor (https://software.intel.com/en-us/iot/sensor/grove-buzzer) is being touched. The Touch Notifier node.js/IoT project sends this data to a connected client when running on a IoT platform such as a development board with the sensor connected. This sensor is included in the Grove Starter Kit Plus - Intel® IoT Edition. For more information, go to https://software.intel.com/en-us/iot/devkit.
     2.7 +
     2.8 +Intel(R) XDK 
     2.9 +-------------------------------------------
    2.10 +This sample is part of the Intel(R) XDK IoT Edition. 
    2.11 +Download the Intel(R) XDK IoT Edition at https://software.intel.com/en-us/html5/xdk-iot. To see the technical details of the sample, 
    2.12 +please visit the sample article page at http://software.intel.com/en-us/html5/articles/iot-touch-notifier-nodejs-&-companion.
    2.13 +
    2.14 +
    2.15 +Important App Files
    2.16 +---------------------------
    2.17 +* index.html
    2.18 +* icon.png
    2.19 +* screenshot.png
    2.20 +* app.json
    2.21 +* README.md
    2.22 +* js/*
    2.23 +* app_framework/*
    2.24 +* css/*
    2.25 +* jquery/*
    2.26 +
    2.27 +License Information Follows
    2.28 +---------------------------
    2.29 +Copyright (c) 2014, Intel Corporation. All rights reserved.
    2.30 +
    2.31 +Redistribution and use in source and binary forms, with or without modification, 
    2.32 +are permitted provided that the following conditions are met:
    2.33 +
    2.34 +- Redistributions of source code must retain the above copyright notice, 
    2.35 +  this list of conditions and the following disclaimer.
    2.36 +
    2.37 +- Redistributions in binary form must reproduce the above copyright notice, 
    2.38 +  this list of conditions and the following disclaimer in the documentation 
    2.39 +  and/or other materials provided with the distribution.
    2.40 +
    2.41 +- Neither the name of Intel Corporation nor the names of its contributors 
    2.42 +  may be used to endorse or promote products derived from this software 
    2.43 +  without specific prior written permission.
    2.44 +
    2.45 +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 
    2.46 +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 
    2.47 +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 
    2.48 +ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 
    2.49 +LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 
    2.50 +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE 
    2.51 +GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 
    2.52 +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 
    2.53 +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT 
    2.54 +OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    2.55 +
    2.56 +
    2.57 +App Framework
    2.58 +-----------------------------------------------------------------------------
    2.59 +http://app-framework-software.intel.com/
    2.60 +source: https://github.com/01org/appframework
    2.61 +license: https://raw.githubusercontent.com/01org/appframework/master/license.txt
    2.62 +
    2.63 +jQuery
    2.64 +-----------------------------------------------------------------------------
    2.65 +http://jquery.com/
    2.66 +source: https://github.com/jquery/jquery
    2.67 +license: https://raw.githubusercontent.com/jquery/jquery/master/LICENSE.txt
     3.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     3.2 +++ b/Touchgui/Touchgui.xdk	Thu Jun 04 14:50:33 2015 +0200
     3.3 @@ -0,0 +1,247 @@
     3.4 +{
     3.5 +  "project": {
     3.6 +    "projectSettingsVersion": "1.2",
     3.7 +    "creationData": {
     3.8 +      "projectTypeName": "com.intel.xdk.projecttype.jsapp",
     3.9 +      "src": "https://edge-intel.s3.amazonaws.com/jsapp/production/release-2015-ww07/sample-iot-companion-touch-notifier/sample.zip",
    3.10 +      "projectGuid": "dfa70862-2c48-4649-b181-373add78f975",
    3.11 +      "lastModifiedDate": 1429384906298,
    3.12 +      "creationDate": 1425145486141
    3.13 +    },
    3.14 +    "sourceDirectory": "www",
    3.15 +    "cordovaPluginsDirectory": "plugins",
    3.16 +    "startFile": "index.html",
    3.17 +    "projectFiles": {},
    3.18 +    "projectDirectories": {},
    3.19 +    "libraries": [],
    3.20 +    "cordovaPlugins": [
    3.21 +      {
    3.22 +        "id": "org.apache.cordova.device",
    3.23 +        "version": "0.2.13",
    3.24 +        "selectedState": "Included",
    3.25 +        "data": {},
    3.26 +        "paramvals": {},
    3.27 +        "dependsOn": [],
    3.28 +        "dependedBy": []
    3.29 +      },
    3.30 +      {
    3.31 +        "id": "org.apache.cordova.splashscreen",
    3.32 +        "version": "0.3.5",
    3.33 +        "selectedState": "Included",
    3.34 +        "data": {},
    3.35 +        "paramvals": {},
    3.36 +        "dependsOn": [],
    3.37 +        "dependedBy": []
    3.38 +      },
    3.39 +      {
    3.40 +        "id": "org.apache.cordova.vibration",
    3.41 +        "version": "0.3.12",
    3.42 +        "selectedState": "Included",
    3.43 +        "data": {},
    3.44 +        "paramvals": {},
    3.45 +        "dependsOn": [],
    3.46 +        "dependedBy": []
    3.47 +      },
    3.48 +      {
    3.49 +        "id": "org.apache.cordova.dialogs",
    3.50 +        "version": "0.2.11",
    3.51 +        "selectedState": "Included",
    3.52 +        "data": {},
    3.53 +        "paramvals": {},
    3.54 +        "dependsOn": [],
    3.55 +        "dependedBy": []
    3.56 +      }
    3.57 +    ],
    3.58 +    "serviceMethods": [],
    3.59 +    "buildConfigurations": {
    3.60 +      "Android": {
    3.61 +        "platform_": "android",
    3.62 +        "runtime_": "Cordova 3.x",
    3.63 +        "name_": "Android",
    3.64 +        "preferences_": {
    3.65 +          "android-minSdkVersion": "10",
    3.66 +          "android-targetSdkVersion": "19",
    3.67 +          "android-installLocation": "auto"
    3.68 +        },
    3.69 +        "isActive_": true,
    3.70 +        "appName_": "Touchgui",
    3.71 +        "appID_": "demo.touchnotifier",
    3.72 +        "appAccess_": [
    3.73 +          {
    3.74 +            "origin": "*"
    3.75 +          }
    3.76 +        ],
    3.77 +        "icons_": [],
    3.78 +        "splashes_": [],
    3.79 +        "addlPermissions_": "",
    3.80 +        "excludedLibraries_": "",
    3.81 +        "iosProvs_": [],
    3.82 +        "cordovaCLIVersion_": "4.1.2",
    3.83 +        "crosswalkVersion_": "10",
    3.84 +        "appVersion_": "1.0.0",
    3.85 +        "appVersionCode_": "1",
    3.86 +        "appDescription_": "A simple app that receives data wirelessly and notifies a user if the Touch Sensor is being touched.",
    3.87 +        "appAuthor_": "Intel XDK"
    3.88 +      },
    3.89 +      "Android-Crosswalk": {
    3.90 +        "platform_": "android",
    3.91 +        "runtime_": "Crosswalk with Cordova 3.x",
    3.92 +        "name_": "Android-Crosswalk",
    3.93 +        "preferences_": {
    3.94 +          "android-minSdkVersion": "14",
    3.95 +          "android-targetSdkVersion": "19",
    3.96 +          "android-installLocation": "auto"
    3.97 +        },
    3.98 +        "isActive_": true,
    3.99 +        "appName_": "Touchgui",
   3.100 +        "appID_": "demo.touchnotifier",
   3.101 +        "appAccess_": [
   3.102 +          {
   3.103 +            "origin": "*"
   3.104 +          }
   3.105 +        ],
   3.106 +        "icons_": [],
   3.107 +        "splashes_": [],
   3.108 +        "addlPermissions_": "",
   3.109 +        "excludedLibraries_": "",
   3.110 +        "iosProvs_": [],
   3.111 +        "cordovaCLIVersion_": "4.1.2",
   3.112 +        "crosswalkVersion_": "10",
   3.113 +        "appVersion_": "1.0.0",
   3.114 +        "appVersionCode_": "1",
   3.115 +        "appDescription_": "A simple app that receives data wirelessly and notifies a user if the Touch Sensor is being touched.",
   3.116 +        "appAuthor_": "Intel XDK"
   3.117 +      },
   3.118 +      "iOS": {
   3.119 +        "platform_": "ios",
   3.120 +        "runtime_": "Cordova 3.x",
   3.121 +        "name_": "iOS",
   3.122 +        "preferences_": {
   3.123 +          "ios-target": "6",
   3.124 +          "ios-configuration": "adhoc"
   3.125 +        },
   3.126 +        "isActive_": true,
   3.127 +        "appName_": "Touchgui",
   3.128 +        "appID_": "demo.touchnotifier",
   3.129 +        "appAccess_": [
   3.130 +          {
   3.131 +            "origin": "*"
   3.132 +          }
   3.133 +        ],
   3.134 +        "icons_": [],
   3.135 +        "splashes_": [],
   3.136 +        "addlPermissions_": "",
   3.137 +        "excludedLibraries_": "",
   3.138 +        "iosProvs_": [],
   3.139 +        "cordovaCLIVersion_": "4.1.2",
   3.140 +        "crosswalkVersion_": "10",
   3.141 +        "appVersion_": "1.0.0",
   3.142 +        "appDescription_": "A simple app that receives data wirelessly and notifies a user if the Touch Sensor is being touched.",
   3.143 +        "appAuthor_": "Intel XDK"
   3.144 +      },
   3.145 +      "Windows8": {
   3.146 +        "platform_": "windows8",
   3.147 +        "runtime_": "Cordova 3.x",
   3.148 +        "name_": "Windows8",
   3.149 +        "preferences_": {},
   3.150 +        "isActive_": true,
   3.151 +        "appName_": "Touchgui",
   3.152 +        "appID_": "demo.touchnotifier",
   3.153 +        "appAccess_": [
   3.154 +          {
   3.155 +            "origin": "*"
   3.156 +          }
   3.157 +        ],
   3.158 +        "icons_": [],
   3.159 +        "splashes_": [],
   3.160 +        "addlPermissions_": "",
   3.161 +        "excludedLibraries_": "",
   3.162 +        "iosProvs_": [],
   3.163 +        "cordovaCLIVersion_": "4.1.2",
   3.164 +        "crosswalkVersion_": "10",
   3.165 +        "appVersion_": "1.0.0.0",
   3.166 +        "appDescription_": "A simple app that receives data wirelessly and notifies a user if the Touch Sensor is being touched.",
   3.167 +        "appAuthor_": "Intel XDK"
   3.168 +      },
   3.169 +      "WebApp": {
   3.170 +        "platform_": "webapp",
   3.171 +        "runtime_": "W3C",
   3.172 +        "name_": "WebApp",
   3.173 +        "preferences_": {},
   3.174 +        "isActive_": false,
   3.175 +        "appName_": "Touchgui",
   3.176 +        "appID_": "not.yet.specified",
   3.177 +        "appAccess_": [
   3.178 +          {
   3.179 +            "origin": "*"
   3.180 +          }
   3.181 +        ],
   3.182 +        "icons_": [],
   3.183 +        "splashes_": [],
   3.184 +        "addlPermissions_": "",
   3.185 +        "excludedLibraries_": "",
   3.186 +        "appVersion_": "0.0.1"
   3.187 +      },
   3.188 +      "Firefox": {
   3.189 +        "platform_": "firefoxos",
   3.190 +        "runtime_": "W3C on Firefox OS",
   3.191 +        "name_": "Firefox",
   3.192 +        "preferences_": {},
   3.193 +        "isActive_": false,
   3.194 +        "appName_": "Touchgui",
   3.195 +        "appID_": "not.yet.specified",
   3.196 +        "appAccess_": [
   3.197 +          {
   3.198 +            "origin": "*"
   3.199 +          }
   3.200 +        ],
   3.201 +        "icons_": [],
   3.202 +        "splashes_": [],
   3.203 +        "addlPermissions_": "",
   3.204 +        "excludedLibraries_": "",
   3.205 +        "appVersion_": "0.0.1"
   3.206 +      },
   3.207 +      "Chrome": {
   3.208 +        "platform_": "chromeos",
   3.209 +        "runtime_": "W3C on Chrome OS",
   3.210 +        "name_": "Chrome",
   3.211 +        "preferences_": {},
   3.212 +        "isActive_": false,
   3.213 +        "appName_": "Touchgui",
   3.214 +        "appID_": "not.yet.specified",
   3.215 +        "appAccess_": [
   3.216 +          {
   3.217 +            "origin": "*"
   3.218 +          }
   3.219 +        ],
   3.220 +        "icons_": [],
   3.221 +        "splashes_": [],
   3.222 +        "addlPermissions_": "",
   3.223 +        "excludedLibraries_": "",
   3.224 +        "appVersion_": "0.0.1"
   3.225 +      },
   3.226 +      "Facebook": {
   3.227 +        "platform_": "facebook",
   3.228 +        "runtime_": "W3C on Facebook",
   3.229 +        "name_": "Facebook",
   3.230 +        "preferences_": {},
   3.231 +        "isActive_": false,
   3.232 +        "appName_": "Touchgui",
   3.233 +        "appID_": "not.yet.specified",
   3.234 +        "appAccess_": [
   3.235 +          {
   3.236 +            "origin": "*"
   3.237 +          }
   3.238 +        ],
   3.239 +        "icons_": [],
   3.240 +        "splashes_": [],
   3.241 +        "addlPermissions_": "",
   3.242 +        "excludedLibraries_": "",
   3.243 +        "appVersion_": "0.0.1"
   3.244 +      }
   3.245 +    },
   3.246 +    "gameAssetDirectory": "asset",
   3.247 +    "gameMetadata": {},
   3.248 +    "projectTags": []
   3.249 +  }
   3.250 +}
   3.251 \ No newline at end of file
     4.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     4.2 +++ b/Touchgui/Touchgui.xdke	Thu Jun 04 14:50:33 2015 +0200
     4.3 @@ -0,0 +1,9 @@
     4.4 +{
     4.5 +  "project": {
     4.6 +    "projectSettingsVersion": "1.2",
     4.7 +    "currentBuildConfiguration": "Android",
     4.8 +    "projectFiles": {},
     4.9 +    "projectDirectories": {},
    4.10 +    "initialAutoPluginCount": 0
    4.11 +  }
    4.12 +}
    4.13 \ No newline at end of file
     5.1 Binary file Touchgui/icon.png has changed
     6.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     6.2 +++ b/Touchgui/intelxdk.config.android.xml	Thu Jun 04 14:50:33 2015 +0200
     6.3 @@ -0,0 +1,19 @@
     6.4 +<?xml version='1.0' encoding='UTF-8'?>
     6.5 +<widget xmlns="http://www.w3.org/ns/widgets" xmlns:intelxdk="http://xdk.intel.com/ns/v1" id="demo.touchnotifier" version="1.0.0" android-versionCode="1">
     6.6 +<!--This file is generated by the Intel XDK. Do not edit this file as your edits will be lost.           -->
     6.7 +<!--To change the contents of this file, see the documentation on the intelxdk.config.additions.xml file.-->
     6.8 +<intelxdk:version value="1.0"/>
     6.9 +<intelxdk:cordova-cli version="4.1.2"/>
    6.10 +<name>Touchgui</name>
    6.11 +<description>A simple app that receives data wirelessly and notifies a user if the Touch Sensor is being touched.</description>
    6.12 +<author>Intel XDK</author>
    6.13 +<content src="index.html"/>
    6.14 +<access origin="*"/>
    6.15 +<intelxdk:plugin intelxdk:name="Device" intelxdk:value="org.apache.cordova.device" intelxdk:version="0.2.13"/>
    6.16 +<intelxdk:plugin intelxdk:name="SplashScreen" intelxdk:value="org.apache.cordova.splashscreen" intelxdk:version="0.3.5"/>
    6.17 +<intelxdk:plugin intelxdk:name="Vibration (notification)" intelxdk:value="org.apache.cordova.vibration" intelxdk:version="0.3.12"/>
    6.18 +<intelxdk:plugin intelxdk:name="Dialogs (notification)" intelxdk:value="org.apache.cordova.dialogs" intelxdk:version="0.2.11"/>
    6.19 +<preference name="android-minSdkVersion" value="10"/>
    6.20 +<preference name="android-targetSdkVersion" value="19"/>
    6.21 +<preference name="android-installLocation" value="auto"/>
    6.22 +<!--creationInfo:{"src":"https://edge-intel.s3.amazonaws.com/jsapp/production/release-2015-ww07/sample-iot-companion-touch-notifier/sample.zip","projectTypeName":"com.intel.xdk.projecttype.jsapp"}--></widget>
    6.23 \ No newline at end of file
     7.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     7.2 +++ b/Touchgui/intelxdk.config.crosswalk.xml	Thu Jun 04 14:50:33 2015 +0200
     7.3 @@ -0,0 +1,20 @@
     7.4 +<?xml version='1.0' encoding='UTF-8'?>
     7.5 +<widget xmlns="http://www.w3.org/ns/widgets" xmlns:intelxdk="http://xdk.intel.com/ns/v1" id="demo.touchnotifier" version="1.0.0" android-versionCode="1">
     7.6 +<!--This file is generated by the Intel XDK. Do not edit this file as your edits will be lost.           -->
     7.7 +<!--To change the contents of this file, see the documentation on the intelxdk.config.additions.xml file.-->
     7.8 +<intelxdk:version value="1.0"/>
     7.9 +<intelxdk:cordova-cli version="4.1.2"/>
    7.10 +<name>Touchgui</name>
    7.11 +<description>A simple app that receives data wirelessly and notifies a user if the Touch Sensor is being touched.</description>
    7.12 +<author>Intel XDK</author>
    7.13 +<content src="index.html"/>
    7.14 +<access origin="*"/>
    7.15 +<intelxdk:plugin intelxdk:name="Device" intelxdk:value="org.apache.cordova.device" intelxdk:version="0.2.13"/>
    7.16 +<intelxdk:plugin intelxdk:name="SplashScreen" intelxdk:value="org.apache.cordova.splashscreen" intelxdk:version="0.3.5"/>
    7.17 +<intelxdk:plugin intelxdk:name="Vibration (notification)" intelxdk:value="org.apache.cordova.vibration" intelxdk:version="0.3.12"/>
    7.18 +<intelxdk:plugin intelxdk:name="Dialogs (notification)" intelxdk:value="org.apache.cordova.dialogs" intelxdk:version="0.2.11"/>
    7.19 +<preference name="android-minSdkVersion" value="14"/>
    7.20 +<preference name="android-targetSdkVersion" value="19"/>
    7.21 +<preference name="android-installLocation" value="auto"/>
    7.22 +<intelxdk:crosswalk version="10"/>
    7.23 +<!--creationInfo:{"src":"https://edge-intel.s3.amazonaws.com/jsapp/production/release-2015-ww07/sample-iot-companion-touch-notifier/sample.zip","projectTypeName":"com.intel.xdk.projecttype.jsapp"}--></widget>
    7.24 \ No newline at end of file
     8.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     8.2 +++ b/Touchgui/intelxdk.config.ios.xml	Thu Jun 04 14:50:33 2015 +0200
     8.3 @@ -0,0 +1,18 @@
     8.4 +<?xml version='1.0' encoding='UTF-8'?>
     8.5 +<widget xmlns="http://www.w3.org/ns/widgets" xmlns:intelxdk="http://xdk.intel.com/ns/v1" id="demo.touchnotifier" version="1.0.0">
     8.6 +<!--This file is generated by the Intel XDK. Do not edit this file as your edits will be lost.           -->
     8.7 +<!--To change the contents of this file, see the documentation on the intelxdk.config.additions.xml file.-->
     8.8 +<intelxdk:version value="1.0"/>
     8.9 +<intelxdk:cordova-cli version="4.1.2"/>
    8.10 +<name>Touchgui</name>
    8.11 +<description>A simple app that receives data wirelessly and notifies a user if the Touch Sensor is being touched.</description>
    8.12 +<author>Intel XDK</author>
    8.13 +<content src="index.html"/>
    8.14 +<access origin="*"/>
    8.15 +<intelxdk:plugin intelxdk:name="Device" intelxdk:value="org.apache.cordova.device" intelxdk:version="0.2.13"/>
    8.16 +<intelxdk:plugin intelxdk:name="SplashScreen" intelxdk:value="org.apache.cordova.splashscreen" intelxdk:version="0.3.5"/>
    8.17 +<intelxdk:plugin intelxdk:name="Vibration (notification)" intelxdk:value="org.apache.cordova.vibration" intelxdk:version="0.3.12"/>
    8.18 +<intelxdk:plugin intelxdk:name="Dialogs (notification)" intelxdk:value="org.apache.cordova.dialogs" intelxdk:version="0.2.11"/>
    8.19 +<preference name="ios-target" value="6"/>
    8.20 +<preference name="ios-configuration" value="adhoc"/>
    8.21 +<!--creationInfo:{"src":"https://edge-intel.s3.amazonaws.com/jsapp/production/release-2015-ww07/sample-iot-companion-touch-notifier/sample.zip","projectTypeName":"com.intel.xdk.projecttype.jsapp"}--></widget>
    8.22 \ No newline at end of file
     9.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     9.2 +++ b/Touchgui/intelxdk.config.windows8.xml	Thu Jun 04 14:50:33 2015 +0200
     9.3 @@ -0,0 +1,16 @@
     9.4 +<?xml version='1.0' encoding='UTF-8'?>
     9.5 +<widget xmlns="http://www.w3.org/ns/widgets" xmlns:intelxdk="http://xdk.intel.com/ns/v1" id="demo.touchnotifier" version="1.0.0.0">
     9.6 +<!--This file is generated by the Intel XDK. Do not edit this file as your edits will be lost.           -->
     9.7 +<!--To change the contents of this file, see the documentation on the intelxdk.config.additions.xml file.-->
     9.8 +<intelxdk:version value="1.0"/>
     9.9 +<intelxdk:cordova-cli version="4.1.2"/>
    9.10 +<name>Touchgui</name>
    9.11 +<description>A simple app that receives data wirelessly and notifies a user if the Touch Sensor is being touched.</description>
    9.12 +<author>Intel XDK</author>
    9.13 +<content src="index.html"/>
    9.14 +<access origin="*"/>
    9.15 +<intelxdk:plugin intelxdk:name="Device" intelxdk:value="org.apache.cordova.device" intelxdk:version="0.2.13"/>
    9.16 +<intelxdk:plugin intelxdk:name="SplashScreen" intelxdk:value="org.apache.cordova.splashscreen" intelxdk:version="0.3.5"/>
    9.17 +<intelxdk:plugin intelxdk:name="Vibration (notification)" intelxdk:value="org.apache.cordova.vibration" intelxdk:version="0.3.12"/>
    9.18 +<intelxdk:plugin intelxdk:name="Dialogs (notification)" intelxdk:value="org.apache.cordova.dialogs" intelxdk:version="0.2.11"/>
    9.19 +<!--creationInfo:{"src":"https://edge-intel.s3.amazonaws.com/jsapp/production/release-2015-ww07/sample-iot-companion-touch-notifier/sample.zip","projectTypeName":"com.intel.xdk.projecttype.jsapp"}--></widget>
    9.20 \ No newline at end of file
    10.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    10.2 +++ b/Touchgui/plugins/org.apache.cordova.device/.fetch.json	Thu Jun 04 14:50:33 2015 +0200
    10.3 @@ -0,0 +1,1 @@
    10.4 +{"source":{"type":"local","path":"/opt/intel/XDK_IoT_Edition/xdk/components/server/cordova-plugins/org.apache.cordova.device"}}
    10.5 \ No newline at end of file
    11.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    11.2 +++ b/Touchgui/plugins/org.apache.cordova.device/CONTRIBUTING.md	Thu Jun 04 14:50:33 2015 +0200
    11.3 @@ -0,0 +1,37 @@
    11.4 +<!--
    11.5 +#
    11.6 +# Licensed to the Apache Software Foundation (ASF) under one
    11.7 +# or more contributor license agreements.  See the NOTICE file
    11.8 +# distributed with this work for additional information
    11.9 +# regarding copyright ownership.  The ASF licenses this file
   11.10 +# to you under the Apache License, Version 2.0 (the
   11.11 +# "License"); you may not use this file except in compliance
   11.12 +# with the License.  You may obtain a copy of the License at
   11.13 +#
   11.14 +# http://www.apache.org/licenses/LICENSE-2.0
   11.15 +#
   11.16 +# Unless required by applicable law or agreed to in writing,
   11.17 +# software distributed under the License is distributed on an
   11.18 +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
   11.19 +#  KIND, either express or implied.  See the License for the
   11.20 +# specific language governing permissions and limitations
   11.21 +# under the License.
   11.22 +#
   11.23 +-->
   11.24 +
   11.25 +# Contributing to Apache Cordova
   11.26 +
   11.27 +Anyone can contribute to Cordova. And we need your contributions.
   11.28 +
   11.29 +There are multiple ways to contribute: report bugs, improve the docs, and
   11.30 +contribute code.
   11.31 +
   11.32 +For instructions on this, start with the 
   11.33 +[contribution overview](http://cordova.apache.org/#contribute).
   11.34 +
   11.35 +The details are explained there, but the important items are:
   11.36 + - Sign and submit an Apache ICLA (Contributor License Agreement).
   11.37 + - Have a Jira issue open that corresponds to your contribution.
   11.38 + - Run the tests so your patch doesn't break existing functionality.
   11.39 +
   11.40 +We look forward to your contributions!
    12.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    12.2 +++ b/Touchgui/plugins/org.apache.cordova.device/LICENSE	Thu Jun 04 14:50:33 2015 +0200
    12.3 @@ -0,0 +1,202 @@
    12.4 +
    12.5 +                                 Apache License
    12.6 +                           Version 2.0, January 2004
    12.7 +                        http://www.apache.org/licenses/
    12.8 +
    12.9 +   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
   12.10 +
   12.11 +   1. Definitions.
   12.12 +
   12.13 +      "License" shall mean the terms and conditions for use, reproduction,
   12.14 +      and distribution as defined by Sections 1 through 9 of this document.
   12.15 +
   12.16 +      "Licensor" shall mean the copyright owner or entity authorized by
   12.17 +      the copyright owner that is granting the License.
   12.18 +
   12.19 +      "Legal Entity" shall mean the union of the acting entity and all
   12.20 +      other entities that control, are controlled by, or are under common
   12.21 +      control with that entity. For the purposes of this definition,
   12.22 +      "control" means (i) the power, direct or indirect, to cause the
   12.23 +      direction or management of such entity, whether by contract or
   12.24 +      otherwise, or (ii) ownership of fifty percent (50%) or more of the
   12.25 +      outstanding shares, or (iii) beneficial ownership of such entity.
   12.26 +
   12.27 +      "You" (or "Your") shall mean an individual or Legal Entity
   12.28 +      exercising permissions granted by this License.
   12.29 +
   12.30 +      "Source" form shall mean the preferred form for making modifications,
   12.31 +      including but not limited to software source code, documentation
   12.32 +      source, and configuration files.
   12.33 +
   12.34 +      "Object" form shall mean any form resulting from mechanical
   12.35 +      transformation or translation of a Source form, including but
   12.36 +      not limited to compiled object code, generated documentation,
   12.37 +      and conversions to other media types.
   12.38 +
   12.39 +      "Work" shall mean the work of authorship, whether in Source or
   12.40 +      Object form, made available under the License, as indicated by a
   12.41 +      copyright notice that is included in or attached to the work
   12.42 +      (an example is provided in the Appendix below).
   12.43 +
   12.44 +      "Derivative Works" shall mean any work, whether in Source or Object
   12.45 +      form, that is based on (or derived from) the Work and for which the
   12.46 +      editorial revisions, annotations, elaborations, or other modifications
   12.47 +      represent, as a whole, an original work of authorship. For the purposes
   12.48 +      of this License, Derivative Works shall not include works that remain
   12.49 +      separable from, or merely link (or bind by name) to the interfaces of,
   12.50 +      the Work and Derivative Works thereof.
   12.51 +
   12.52 +      "Contribution" shall mean any work of authorship, including
   12.53 +      the original version of the Work and any modifications or additions
   12.54 +      to that Work or Derivative Works thereof, that is intentionally
   12.55 +      submitted to Licensor for inclusion in the Work by the copyright owner
   12.56 +      or by an individual or Legal Entity authorized to submit on behalf of
   12.57 +      the copyright owner. For the purposes of this definition, "submitted"
   12.58 +      means any form of electronic, verbal, or written communication sent
   12.59 +      to the Licensor or its representatives, including but not limited to
   12.60 +      communication on electronic mailing lists, source code control systems,
   12.61 +      and issue tracking systems that are managed by, or on behalf of, the
   12.62 +      Licensor for the purpose of discussing and improving the Work, but
   12.63 +      excluding communication that is conspicuously marked or otherwise
   12.64 +      designated in writing by the copyright owner as "Not a Contribution."
   12.65 +
   12.66 +      "Contributor" shall mean Licensor and any individual or Legal Entity
   12.67 +      on behalf of whom a Contribution has been received by Licensor and
   12.68 +      subsequently incorporated within the Work.
   12.69 +
   12.70 +   2. Grant of Copyright License. Subject to the terms and conditions of
   12.71 +      this License, each Contributor hereby grants to You a perpetual,
   12.72 +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
   12.73 +      copyright license to reproduce, prepare Derivative Works of,
   12.74 +      publicly display, publicly perform, sublicense, and distribute the
   12.75 +      Work and such Derivative Works in Source or Object form.
   12.76 +
   12.77 +   3. Grant of Patent License. Subject to the terms and conditions of
   12.78 +      this License, each Contributor hereby grants to You a perpetual,
   12.79 +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
   12.80 +      (except as stated in this section) patent license to make, have made,
   12.81 +      use, offer to sell, sell, import, and otherwise transfer the Work,
   12.82 +      where such license applies only to those patent claims licensable
   12.83 +      by such Contributor that are necessarily infringed by their
   12.84 +      Contribution(s) alone or by combination of their Contribution(s)
   12.85 +      with the Work to which such Contribution(s) was submitted. If You
   12.86 +      institute patent litigation against any entity (including a
   12.87 +      cross-claim or counterclaim in a lawsuit) alleging that the Work
   12.88 +      or a Contribution incorporated within the Work constitutes direct
   12.89 +      or contributory patent infringement, then any patent licenses
   12.90 +      granted to You under this License for that Work shall terminate
   12.91 +      as of the date such litigation is filed.
   12.92 +
   12.93 +   4. Redistribution. You may reproduce and distribute copies of the
   12.94 +      Work or Derivative Works thereof in any medium, with or without
   12.95 +      modifications, and in Source or Object form, provided that You
   12.96 +      meet the following conditions:
   12.97 +
   12.98 +      (a) You must give any other recipients of the Work or
   12.99 +          Derivative Works a copy of this License; and
  12.100 +
  12.101 +      (b) You must cause any modified files to carry prominent notices
  12.102 +          stating that You changed the files; and
  12.103 +
  12.104 +      (c) You must retain, in the Source form of any Derivative Works
  12.105 +          that You distribute, all copyright, patent, trademark, and
  12.106 +          attribution notices from the Source form of the Work,
  12.107 +          excluding those notices that do not pertain to any part of
  12.108 +          the Derivative Works; and
  12.109 +
  12.110 +      (d) If the Work includes a "NOTICE" text file as part of its
  12.111 +          distribution, then any Derivative Works that You distribute must
  12.112 +          include a readable copy of the attribution notices contained
  12.113 +          within such NOTICE file, excluding those notices that do not
  12.114 +          pertain to any part of the Derivative Works, in at least one
  12.115 +          of the following places: within a NOTICE text file distributed
  12.116 +          as part of the Derivative Works; within the Source form or
  12.117 +          documentation, if provided along with the Derivative Works; or,
  12.118 +          within a display generated by the Derivative Works, if and
  12.119 +          wherever such third-party notices normally appear. The contents
  12.120 +          of the NOTICE file are for informational purposes only and
  12.121 +          do not modify the License. You may add Your own attribution
  12.122 +          notices within Derivative Works that You distribute, alongside
  12.123 +          or as an addendum to the NOTICE text from the Work, provided
  12.124 +          that such additional attribution notices cannot be construed
  12.125 +          as modifying the License.
  12.126 +
  12.127 +      You may add Your own copyright statement to Your modifications and
  12.128 +      may provide additional or different license terms and conditions
  12.129 +      for use, reproduction, or distribution of Your modifications, or
  12.130 +      for any such Derivative Works as a whole, provided Your use,
  12.131 +      reproduction, and distribution of the Work otherwise complies with
  12.132 +      the conditions stated in this License.
  12.133 +
  12.134 +   5. Submission of Contributions. Unless You explicitly state otherwise,
  12.135 +      any Contribution intentionally submitted for inclusion in the Work
  12.136 +      by You to the Licensor shall be under the terms and conditions of
  12.137 +      this License, without any additional terms or conditions.
  12.138 +      Notwithstanding the above, nothing herein shall supersede or modify
  12.139 +      the terms of any separate license agreement you may have executed
  12.140 +      with Licensor regarding such Contributions.
  12.141 +
  12.142 +   6. Trademarks. This License does not grant permission to use the trade
  12.143 +      names, trademarks, service marks, or product names of the Licensor,
  12.144 +      except as required for reasonable and customary use in describing the
  12.145 +      origin of the Work and reproducing the content of the NOTICE file.
  12.146 +
  12.147 +   7. Disclaimer of Warranty. Unless required by applicable law or
  12.148 +      agreed to in writing, Licensor provides the Work (and each
  12.149 +      Contributor provides its Contributions) on an "AS IS" BASIS,
  12.150 +      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
  12.151 +      implied, including, without limitation, any warranties or conditions
  12.152 +      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
  12.153 +      PARTICULAR PURPOSE. You are solely responsible for determining the
  12.154 +      appropriateness of using or redistributing the Work and assume any
  12.155 +      risks associated with Your exercise of permissions under this License.
  12.156 +
  12.157 +   8. Limitation of Liability. In no event and under no legal theory,
  12.158 +      whether in tort (including negligence), contract, or otherwise,
  12.159 +      unless required by applicable law (such as deliberate and grossly
  12.160 +      negligent acts) or agreed to in writing, shall any Contributor be
  12.161 +      liable to You for damages, including any direct, indirect, special,
  12.162 +      incidental, or consequential damages of any character arising as a
  12.163 +      result of this License or out of the use or inability to use the
  12.164 +      Work (including but not limited to damages for loss of goodwill,
  12.165 +      work stoppage, computer failure or malfunction, or any and all
  12.166 +      other commercial damages or losses), even if such Contributor
  12.167 +      has been advised of the possibility of such damages.
  12.168 +
  12.169 +   9. Accepting Warranty or Additional Liability. While redistributing
  12.170 +      the Work or Derivative Works thereof, You may choose to offer,
  12.171 +      and charge a fee for, acceptance of support, warranty, indemnity,
  12.172 +      or other liability obligations and/or rights consistent with this
  12.173 +      License. However, in accepting such obligations, You may act only
  12.174 +      on Your own behalf and on Your sole responsibility, not on behalf
  12.175 +      of any other Contributor, and only if You agree to indemnify,
  12.176 +      defend, and hold each Contributor harmless for any liability
  12.177 +      incurred by, or claims asserted against, such Contributor by reason
  12.178 +      of your accepting any such warranty or additional liability.
  12.179 +
  12.180 +   END OF TERMS AND CONDITIONS
  12.181 +
  12.182 +   APPENDIX: How to apply the Apache License to your work.
  12.183 +
  12.184 +      To apply the Apache License to your work, attach the following
  12.185 +      boilerplate notice, with the fields enclosed by brackets "[]"
  12.186 +      replaced with your own identifying information. (Don't include
  12.187 +      the brackets!)  The text should be enclosed in the appropriate
  12.188 +      comment syntax for the file format. We also recommend that a
  12.189 +      file or class name and description of purpose be included on the
  12.190 +      same "printed page" as the copyright notice for easier
  12.191 +      identification within third-party archives.
  12.192 +
  12.193 +   Copyright [yyyy] [name of copyright owner]
  12.194 +
  12.195 +   Licensed under the Apache License, Version 2.0 (the "License");
  12.196 +   you may not use this file except in compliance with the License.
  12.197 +   You may obtain a copy of the License at
  12.198 +
  12.199 +       http://www.apache.org/licenses/LICENSE-2.0
  12.200 +
  12.201 +   Unless required by applicable law or agreed to in writing, software
  12.202 +   distributed under the License is distributed on an "AS IS" BASIS,
  12.203 +   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  12.204 +   See the License for the specific language governing permissions and
  12.205 +   limitations under the License.
  12.206 \ No newline at end of file
    13.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    13.2 +++ b/Touchgui/plugins/org.apache.cordova.device/NOTICE	Thu Jun 04 14:50:33 2015 +0200
    13.3 @@ -0,0 +1,5 @@
    13.4 +Apache Cordova
    13.5 +Copyright 2012 The Apache Software Foundation
    13.6 +
    13.7 +This product includes software developed at
    13.8 +The Apache Software Foundation (http://www.apache.org/).
    14.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    14.2 +++ b/Touchgui/plugins/org.apache.cordova.device/README.md	Thu Jun 04 14:50:33 2015 +0200
    14.3 @@ -0,0 +1,22 @@
    14.4 +<!---
    14.5 + license: Licensed to the Apache Software Foundation (ASF) under one
    14.6 +         or more contributor license agreements.  See the NOTICE file
    14.7 +         distributed with this work for additional information
    14.8 +         regarding copyright ownership.  The ASF licenses this file
    14.9 +         to you under the Apache License, Version 2.0 (the
   14.10 +         "License"); you may not use this file except in compliance
   14.11 +         with the License.  You may obtain a copy of the License at
   14.12 +
   14.13 +           http://www.apache.org/licenses/LICENSE-2.0
   14.14 +
   14.15 +         Unless required by applicable law or agreed to in writing,
   14.16 +         software distributed under the License is distributed on an
   14.17 +         "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
   14.18 +         KIND, either express or implied.  See the License for the
   14.19 +         specific language governing permissions and limitations
   14.20 +         under the License.
   14.21 +-->
   14.22 +
   14.23 +# org.apache.cordova.device
   14.24 +
   14.25 +Plugin documentation: [doc/index.md](doc/index.md)
    15.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    15.2 +++ b/Touchgui/plugins/org.apache.cordova.device/RELEASENOTES.md	Thu Jun 04 14:50:33 2015 +0200
    15.3 @@ -0,0 +1,92 @@
    15.4 +<!--
    15.5 +#
    15.6 +# Licensed to the Apache Software Foundation (ASF) under one
    15.7 +# or more contributor license agreements.  See the NOTICE file
    15.8 +# distributed with this work for additional information
    15.9 +# regarding copyright ownership.  The ASF licenses this file
   15.10 +# to you under the Apache License, Version 2.0 (the
   15.11 +# "License"); you may not use this file except in compliance
   15.12 +# with the License.  You may obtain a copy of the License at
   15.13 +# 
   15.14 +# http://www.apache.org/licenses/LICENSE-2.0
   15.15 +# 
   15.16 +# Unless required by applicable law or agreed to in writing,
   15.17 +# software distributed under the License is distributed on an
   15.18 +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
   15.19 +#  KIND, either express or implied.  See the License for the
   15.20 +# specific language governing permissions and limitations
   15.21 +# under the License.
   15.22 +#
   15.23 +-->
   15.24 +# Release Notes
   15.25 +
   15.26 +### 0.2.1 (Sept 5, 2013)
   15.27 +* removed extraneous print statement
   15.28 +* [CB-4432] copyright notice change
   15.29 +
   15.30 +### 0.2.3 (Sept 25, 2013)
   15.31 +* CB-4889 bumping&resetting version
   15.32 +* [windows8] commandProxy has moved
   15.33 +* [BlackBerry10] removed uneeded permission tags in plugin.xml
   15.34 +* CB-4889 renaming org.apache.cordova.core.device to org.apache.cordova.device
   15.35 +* Rename CHANGELOG.md -> RELEASENOTES.md
   15.36 +* updated to use commandProxy for ffos
   15.37 +* add firefoxos support
   15.38 +* [CB-4752] Incremented plugin version on dev branch. 
   15.39 +
   15.40 +### 0.2.4 (Oct 28, 2013)
   15.41 +* CB-5128: added repo + issue tag in plugin.xml for device plugin
   15.42 +* CB-5085 device.cordova returning wrong value
   15.43 +* [CB-4915] Incremented plugin version on dev branch.
   15.44 +
   15.45 +### 0.2.5 (Dec 4, 2013)
   15.46 +* CB-5316 Spell Cordova as a brand unless it's a command or script
   15.47 +* [ubuntu] use cordova/exec/proxy
   15.48 +* add ubuntu platform
   15.49 +* Modify Device.platform logic to use amazon-fireos as the platform for Amazon Devices
   15.50 +* 1. Added amazon-fireos platform. 2. Change to use cordova-amazon-fireos as the platform if user agent contains 'cordova-amazon-fireos'
   15.51 +
   15.52 +### 0.2.6 (Jan 02, 2014)
   15.53 +* CB-5658 Add doc/index.md for Device plugin
   15.54 +* CB-5504 Moving Telephony Logic out of Device
   15.55 +
   15.56 +### 0.2.7 (Jan 07, 2014)
   15.57 +* CB-5737 Fix exception on close caused by left over telephony code from CB-5504
   15.58 +
   15.59 +### 0.2.8 (Feb 05, 2014)
   15.60 +* Tizen support added
   15.61 +
   15.62 +### 0.2.9 (Apr 17, 2014)
   15.63 +* CB-5105: [Android, windows8, WP, BlackBerry10] Removed dead code for device.version
   15.64 +* CB-6422: [windows8] use cordova/exec/proxy
   15.65 +* CB-6460: Update license headers
   15.66 +* Add NOTICE file
   15.67 +
   15.68 +### 0.2.10 (Jun 05, 2014)
   15.69 +* CB-6127 Spanish and French Translations added. Github close #12
   15.70 +* Changing 1.5 to 2.0
   15.71 +* added firefoxos version - conversion
   15.72 +* added firefoxos version
   15.73 +* CB-6800 Add license
   15.74 +* CB-6491 add CONTRIBUTING.md
   15.75 +
   15.76 +### 0.2.11 (Aug 06, 2014)
   15.77 +* [FFOS] update DeviceProxy.js
   15.78 +* CB-6127 Updated translations for docs
   15.79 +* Use Windows system calls to get better info
   15.80 +
   15.81 +### 0.2.12 (Sep 17, 2014)
   15.82 +* CB-7471 cordova-plugin-device documentation translation
   15.83 +* CB-7552 device.name docs have not been removed
   15.84 +* [fxos] Fix cordova version
   15.85 +* added status box and documentation to manual tests
   15.86 +* [fxos] Fix cordova version
   15.87 +* added status box and documentation to manual tests
   15.88 +* Added plugin support for the browser
   15.89 +* CB-7262 Adds support for universal windows apps.
   15.90 +
   15.91 +### 0.2.13 (Dec 02, 2014)
   15.92 +* Changing `device.platform` to always report the platform as "browser".
   15.93 +* CB-5892 - Remove deprecated `window.Settings`
   15.94 +* CB-7700 cordova-plugin-device documentation translation: cordova-plugin-device
   15.95 +* CB-7571 Bump version of nested plugin to match parent plugin
    16.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    16.2 +++ b/Touchgui/plugins/org.apache.cordova.device/doc/de/index.md	Thu Jun 04 14:50:33 2015 +0200
    16.3 @@ -0,0 +1,206 @@
    16.4 +<!---
    16.5 +    Licensed to the Apache Software Foundation (ASF) under one
    16.6 +    or more contributor license agreements.  See the NOTICE file
    16.7 +    distributed with this work for additional information
    16.8 +    regarding copyright ownership.  The ASF licenses this file
    16.9 +    to you under the Apache License, Version 2.0 (the
   16.10 +    "License"); you may not use this file except in compliance
   16.11 +    with the License.  You may obtain a copy of the License at
   16.12 +
   16.13 +      http://www.apache.org/licenses/LICENSE-2.0
   16.14 +
   16.15 +    Unless required by applicable law or agreed to in writing,
   16.16 +    software distributed under the License is distributed on an
   16.17 +    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
   16.18 +    KIND, either express or implied.  See the License for the
   16.19 +    specific language governing permissions and limitations
   16.20 +    under the License.
   16.21 +-->
   16.22 +
   16.23 +# org.apache.cordova.device
   16.24 +
   16.25 +Dieses Plugin definiert eine globale `device` -Objekt, das des Geräts Hard- und Software beschreibt. Das Objekt im globalen Gültigkeitsbereich ist es zwar nicht verfügbar bis nach dem `deviceready` Ereignis.
   16.26 +
   16.27 +    document.addEventListener("deviceready", onDeviceReady, false);
   16.28 +    function onDeviceReady() {
   16.29 +        console.log(device.cordova);
   16.30 +    }
   16.31 +    
   16.32 +
   16.33 +## Installation
   16.34 +
   16.35 +    cordova plugin add org.apache.cordova.device
   16.36 +    
   16.37 +
   16.38 +## Eigenschaften
   16.39 +
   16.40 +*   device.cordova
   16.41 +*   device.model
   16.42 +*   device.platform
   16.43 +*   device.uuid
   16.44 +*   device.version
   16.45 +
   16.46 +## device.cordova
   16.47 +
   16.48 +Rufen Sie die Version von Cordova, die auf dem Gerät ausgeführt.
   16.49 +
   16.50 +### Unterstützte Plattformen
   16.51 +
   16.52 +*   Amazon Fire OS
   16.53 +*   Android
   16.54 +*   BlackBerry 10
   16.55 +*   Browser
   16.56 +*   Firefox OS
   16.57 +*   iOS
   16.58 +*   Tizen
   16.59 +*   Windows Phone 7 und 8
   16.60 +*   Windows 8
   16.61 +
   16.62 +## device.model
   16.63 +
   16.64 +Die `device.model` gibt den Namen der Modell- oder des Geräts zurück. Der Wert wird vom Gerätehersteller festgelegt und kann zwischen den Versionen des gleichen Produkts unterschiedlich sein.
   16.65 +
   16.66 +### Unterstützte Plattformen
   16.67 +
   16.68 +*   Android
   16.69 +*   BlackBerry 10
   16.70 +*   Browser
   16.71 +*   iOS
   16.72 +*   Tizen
   16.73 +*   Windows Phone 7 und 8
   16.74 +*   Windows 8
   16.75 +
   16.76 +### Kurzes Beispiel
   16.77 +
   16.78 +    // Android:    Nexus One       returns "Passion" (Nexus One code name)
   16.79 +    //             Motorola Droid  returns "voles"
   16.80 +    // BlackBerry: Torch 9800      returns "9800"
   16.81 +    // Browser:    Google Chrome   returns "Chrome"
   16.82 +    //             Safari          returns "Safari"
   16.83 +    // iOS:     for the iPad Mini, returns iPad2,5; iPhone 5 is iPhone 5,1. Finden Sie unter http://theiphonewiki.com/wiki/index.php?title=Models / / Var-Modell = device.model;
   16.84 +    
   16.85 +
   16.86 +### Android Eigenarten
   16.87 +
   16.88 +*   Ruft den [Produktname][1] anstelle des [Modellnamens][2], das ist oft der Codename für die Produktion. Beispielsweise das Nexus One gibt `Passion` , und Motorola Droid gibt`voles`.
   16.89 +
   16.90 + [1]: http://developer.android.com/reference/android/os/Build.html#PRODUCT
   16.91 + [2]: http://developer.android.com/reference/android/os/Build.html#MODEL
   16.92 +
   16.93 +### Tizen Macken
   16.94 +
   16.95 +*   Gibt z. B. das Gerätemodell von dem Kreditor zugeordnet,`TIZEN`
   16.96 +
   16.97 +### Windows Phone 7 und 8 Eigenarten
   16.98 +
   16.99 +*   Gibt das vom Hersteller angegebenen Gerätemodell zurück. Beispielsweise gibt der Samsung-Fokus`SGH-i917`.
  16.100 +
  16.101 +## device.platform
  16.102 +
  16.103 +Name des Betriebssystems des Geräts zu erhalten.
  16.104 +
  16.105 +    var string = device.platform;
  16.106 +    
  16.107 +
  16.108 +### Unterstützte Plattformen
  16.109 +
  16.110 +*   Android
  16.111 +*   BlackBerry 10
  16.112 +*   Browser4
  16.113 +*   Firefox OS
  16.114 +*   iOS
  16.115 +*   Tizen
  16.116 +*   Windows Phone 7 und 8
  16.117 +*   Windows 8
  16.118 +
  16.119 +### Kurzes Beispiel
  16.120 +
  16.121 +    // Depending on the device, a few examples are:
  16.122 +    //   - "Android"
  16.123 +    //   - "BlackBerry 10"
  16.124 +    //   - Browser:         returns "MacIntel" on Mac
  16.125 +    //                      returns "Win32" on Windows
  16.126 +    //   - "iOS"
  16.127 +    //   - "WinCE"
  16.128 +    //   - "Tizen"
  16.129 +    var devicePlatform = device.platform;
  16.130 +    
  16.131 +
  16.132 +### Windows Phone 7 Macken
  16.133 +
  16.134 +Windows Phone 7 Geräte melden die Plattform als`WinCE`.
  16.135 +
  16.136 +### Windows Phone 8 Macken
  16.137 +
  16.138 +Windows Phone 8 Geräte melden die Plattform als`Win32NT`.
  16.139 +
  16.140 +## device.uuid
  16.141 +
  16.142 +Des Geräts Universally Unique Identifier ([UUID][3] zu erhalten).
  16.143 +
  16.144 + [3]: http://en.wikipedia.org/wiki/Universally_Unique_Identifier
  16.145 +
  16.146 +    var string = device.uuid;
  16.147 +    
  16.148 +
  16.149 +### Beschreibung
  16.150 +
  16.151 +Die Details wie eine UUID generiert wird werden vom Gerätehersteller und beziehen sich auf die Plattform oder das Modell des Geräts.
  16.152 +
  16.153 +### Unterstützte Plattformen
  16.154 +
  16.155 +*   Android
  16.156 +*   BlackBerry 10
  16.157 +*   iOS
  16.158 +*   Tizen
  16.159 +*   Windows Phone 7 und 8
  16.160 +*   Windows 8
  16.161 +
  16.162 +### Kurzes Beispiel
  16.163 +
  16.164 +    / / Android: wird eine zufällige 64-Bit-Ganzzahl (als Zeichenfolge, wieder!) / / die ganze Zahl wird beim ersten Start des Geräts erzeugt / / / / BlackBerry: gibt die PIN-Nummer des Gerätes / / Dies ist eine neunstellige eindeutige Ganzzahl (als String, obwohl!) / / / / iPhone: (paraphrasiert aus der Dokumentation zur UIDevice-Klasse) / / liefert eine Reihe von Hash-Werte, die aus mehreren Hardware erstellt identifiziert.
  16.165 +    / / Es ist gewährleistet, dass für jedes Gerät eindeutig sein und kann nicht gebunden werden / / an den Benutzer weitergeleitet.
  16.166 +    / / Windows Phone 7: gibt einen Hash des Gerät + aktueller Benutzer, / / wenn der Benutzer nicht definiert ist, eine Guid generiert und wird weiter bestehen, bis die app deinstalliert wird / / Tizen: gibt das Gerät IMEI (International Mobile Equipment Identity oder IMEI ist eine Zahl / / einzigartig für jedes GSM- und UMTS-Handy.
  16.167 +    var deviceID = device.uuid;
  16.168 +    
  16.169 +
  16.170 +### iOS Quirk
  16.171 +
  16.172 +Die `uuid` auf iOS ist nicht eindeutig zu einem Gerät, aber für jede Anwendung, für jede Installation variiert. Es ändert sich, wenn Sie löschen und neu die app installieren, und möglicherweise auch beim iOS zu aktualisieren, oder auch ein Upgrade möglich die app pro Version (scheinbaren in iOS 5.1). Die `uuid` ist kein zuverlässiger Wert.
  16.173 +
  16.174 +### Windows Phone 7 und 8 Eigenarten
  16.175 +
  16.176 +Die `uuid` für Windows Phone 7 die Berechtigung erfordert `ID_CAP_IDENTITY_DEVICE` . Microsoft wird diese Eigenschaft wahrscheinlich bald abzuschaffen. Wenn die Funktion nicht verfügbar ist, generiert die Anwendung eine persistente Guid, die für die Dauer der Installation der Anwendung auf dem Gerät gewährleistet ist.
  16.177 +
  16.178 +## device.version
  16.179 +
  16.180 +Version des Betriebssystems zu erhalten.
  16.181 +
  16.182 +    var string = device.version;
  16.183 +    
  16.184 +
  16.185 +### Unterstützte Plattformen
  16.186 +
  16.187 +*   Android 2.1 +
  16.188 +*   BlackBerry 10
  16.189 +*   Browser
  16.190 +*   iOS
  16.191 +*   Tizen
  16.192 +*   Windows Phone 7 und 8
  16.193 +*   Windows 8
  16.194 +
  16.195 +### Kurzes Beispiel
  16.196 +
  16.197 +    // Android:    Froyo OS would return "2.2"
  16.198 +    //             Eclair OS would return "2.1", "2.0.1", or "2.0"
  16.199 +    //             Version can also return update level "2.1-update1"
  16.200 +    //
  16.201 +    // BlackBerry: Torch 9800 using OS 6.0 would return "6.0.0.600"
  16.202 +    //
  16.203 +    // Browser:    Returns version number for the browser
  16.204 +    //
  16.205 +    // iPhone:     iOS 3.2 returns "3.2"
  16.206 +    //
  16.207 +    // Windows Phone 7: returns current OS version number, ex. on Mango returns 7.10.7720
  16.208 +    // Tizen: returns "TIZEN_20120425_2"
  16.209 +    var deviceVersion = device.version;
  16.210 \ No newline at end of file
    17.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    17.2 +++ b/Touchgui/plugins/org.apache.cordova.device/doc/es/index.md	Thu Jun 04 14:50:33 2015 +0200
    17.3 @@ -0,0 +1,220 @@
    17.4 +<!---
    17.5 +    Licensed to the Apache Software Foundation (ASF) under one
    17.6 +    or more contributor license agreements.  See the NOTICE file
    17.7 +    distributed with this work for additional information
    17.8 +    regarding copyright ownership.  The ASF licenses this file
    17.9 +    to you under the Apache License, Version 2.0 (the
   17.10 +    "License"); you may not use this file except in compliance
   17.11 +    with the License.  You may obtain a copy of the License at
   17.12 +
   17.13 +      http://www.apache.org/licenses/LICENSE-2.0
   17.14 +
   17.15 +    Unless required by applicable law or agreed to in writing,
   17.16 +    software distributed under the License is distributed on an
   17.17 +    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
   17.18 +    KIND, either express or implied.  See the License for the
   17.19 +    specific language governing permissions and limitations
   17.20 +    under the License.
   17.21 +-->
   17.22 +
   17.23 +# org.apache.cordova.device
   17.24 +
   17.25 +Este plugin define un global `device` objeto que describe del dispositivo hardware y software. Aunque el objeto está en el ámbito global, no está disponible hasta después de la `deviceready` evento.
   17.26 +
   17.27 +    document.addEventListener("deviceready", onDeviceReady, false);
   17.28 +    function onDeviceReady() {
   17.29 +        console.log(device.cordova);
   17.30 +    }
   17.31 +    
   17.32 +
   17.33 +## Instalación
   17.34 +
   17.35 +    cordova plugin add org.apache.cordova.device
   17.36 +    
   17.37 +
   17.38 +## Propiedades
   17.39 +
   17.40 +*   device.cordova
   17.41 +*   device.model
   17.42 +*   device.platform
   17.43 +*   device.uuid
   17.44 +*   device.version
   17.45 +
   17.46 +## device.cordova
   17.47 +
   17.48 +Obtener la versión de Cordova que se ejecuta en el dispositivo.
   17.49 +
   17.50 +### Plataformas soportadas
   17.51 +
   17.52 +*   Amazon fire OS
   17.53 +*   Android
   17.54 +*   BlackBerry 10
   17.55 +*   Explorador
   17.56 +*   Firefox OS
   17.57 +*   iOS
   17.58 +*   Tizen
   17.59 +*   Windows Phone 7 y 8
   17.60 +*   Windows 8
   17.61 +
   17.62 +## device.model
   17.63 +
   17.64 +El `device.model` devuelve el nombre de modelo del dispositivo o producto. El valor es fijado por el fabricante del dispositivo y puede ser diferente a través de versiones del mismo producto.
   17.65 +
   17.66 +### Plataformas soportadas
   17.67 +
   17.68 +*   Android
   17.69 +*   BlackBerry 10
   17.70 +*   Explorador
   17.71 +*   iOS
   17.72 +*   Tizen
   17.73 +*   Windows Phone 7 y 8
   17.74 +*   Windows 8
   17.75 +
   17.76 +### Ejemplo rápido
   17.77 +
   17.78 +    // Android:    Nexus One       returns "Passion" (Nexus One code name)
   17.79 +    //             Motorola Droid  returns "voles"
   17.80 +    // BlackBerry: Torch 9800      returns "9800"
   17.81 +    // Browser:    Google Chrome   returns "Chrome"
   17.82 +    //             Safari          returns "Safari"
   17.83 +    // iOS:     for the iPad Mini, returns iPad2,5; iPhone 5 is iPhone 5,1. See http://theiphonewiki.com/wiki/index.php?title=Models
   17.84 +    //
   17.85 +    var model = device.model;
   17.86 +    
   17.87 +
   17.88 +### Rarezas Android
   17.89 +
   17.90 +*   Obtiene el [nombre del producto][1] en lugar del [nombre de la modelo][2], que es a menudo el nombre de código de producción. Por ejemplo, el Nexus One devuelve `Passion` y Motorola Droid devuelve `voles`.
   17.91 +
   17.92 + [1]: http://developer.android.com/reference/android/os/Build.html#PRODUCT
   17.93 + [2]: http://developer.android.com/reference/android/os/Build.html#MODEL
   17.94 +
   17.95 +### Rarezas Tizen
   17.96 +
   17.97 +*   Devuelve que el modelo de dispositivo asignado por el proveedor, por ejemplo, `TIZEN`
   17.98 +
   17.99 +### Windows Phone 7 y 8 rarezas
  17.100 +
  17.101 +*   Devuelve el modelo de dispositivo especificado por el fabricante. Por ejemplo, el Samsung Focus devuelve `SGH-i917`.
  17.102 +
  17.103 +## device.platform
  17.104 +
  17.105 +Obtener el nombre del sistema operativo del dispositivo.
  17.106 +
  17.107 +    var string = device.platform;
  17.108 +    
  17.109 +
  17.110 +### Plataformas soportadas
  17.111 +
  17.112 +*   Android
  17.113 +*   BlackBerry 10
  17.114 +*   Browser4
  17.115 +*   Firefox OS
  17.116 +*   iOS
  17.117 +*   Tizen
  17.118 +*   Windows Phone 7 y 8
  17.119 +*   Windows 8
  17.120 +
  17.121 +### Ejemplo rápido
  17.122 +
  17.123 +    // Depending on the device, a few examples are:
  17.124 +    //   - "Android"
  17.125 +    //   - "BlackBerry 10"
  17.126 +    //   - Browser:         returns "MacIntel" on Mac
  17.127 +    //                      returns "Win32" on Windows
  17.128 +    //   - "iOS"
  17.129 +    //   - "WinCE"
  17.130 +    //   - "Tizen"
  17.131 +    var devicePlatform = device.platform;
  17.132 +    
  17.133 +
  17.134 +### Windows Phone 7 rarezas
  17.135 +
  17.136 +Dispositivos Windows Phone 7 informe de la plataforma como `WinCE`.
  17.137 +
  17.138 +### Windows Phone 8 rarezas
  17.139 +
  17.140 +Dispositivos Windows Phone 8 Informe la plataforma como `Win32NT`.
  17.141 +
  17.142 +## device.uuid
  17.143 +
  17.144 +Obtener identificador universalmente única del dispositivo ([UUID][3]).
  17.145 +
  17.146 + [3]: http://en.wikipedia.org/wiki/Universally_Unique_Identifier
  17.147 +
  17.148 +    var string = device.uuid;
  17.149 +    
  17.150 +
  17.151 +### Descripción
  17.152 +
  17.153 +Los detalles de cómo se genera un UUID son determinados por el fabricante del dispositivo y son específicos a la plataforma del dispositivo o modelo.
  17.154 +
  17.155 +### Plataformas soportadas
  17.156 +
  17.157 +*   Android
  17.158 +*   BlackBerry 10
  17.159 +*   iOS
  17.160 +*   Tizen
  17.161 +*   Windows Phone 7 y 8
  17.162 +*   Windows 8
  17.163 +
  17.164 +### Ejemplo rápido
  17.165 +
  17.166 +    // Android: devuelve un entero de 64 bits al azar (como una cadena, otra vez!) 
  17.167 +    // el entero es generado en el primer arranque del dispositivo 
  17.168 +    // 
  17.169 +    // BlackBerry: devuelve el número PIN del dispositivo 
  17.170 +    // este es un entero único de nueve dígitos (como una cadena, aunque!) 
  17.171 +    // 
  17.172 +    // iPhone: (parafraseado de la documentación de la clase UIDevice) 
  17.173 +    // devuelve una cadena de valores hash creado a partir 
  17.174 +    //  de múltiples hardware identifica.
  17.175 +    / / Está garantizado para ser único para cada dispositivo y no puede ser atado / / a la cuenta de usuario.
  17.176 +    // Windows Phone 7: devuelve un hash de dispositivo + usuario actual, 
  17.177 +    // si el usuario no está definido, un guid generado y persistirá hasta que se desinstala la aplicación 
  17.178 +    // 
  17.179 +    // Tizen: devuelve el dispositivo IMEI (identidad de equipo móvil internacional o IMEI es un número 
  17.180 +    // único para cada teléfono móvil GSM y UMTS.
  17.181 +    var deviceID = device.uuid;
  17.182 +    
  17.183 +
  17.184 +### iOS chanfle
  17.185 +
  17.186 +El `uuid` en iOS no es exclusiva de un dispositivo, pero varía para cada aplicación, para cada instalación. Cambia si puedes borrar y volver a instalar la aplicación, y posiblemente también cuándo actualizar iOS, o incluso mejorar la aplicación por la versión (evidente en iOS 5.1). El `uuid` no es un valor confiable.
  17.187 +
  17.188 +### Windows Phone 7 y 8 rarezas
  17.189 +
  17.190 +El `uuid` para Windows Phone 7 requiere el permiso `ID_CAP_IDENTITY_DEVICE`. Microsoft pronto probablemente desaprueban esta propiedad. Si la capacidad no está disponible, la aplicación genera un guid persistente que se mantiene durante la duración de la instalación de la aplicación en el dispositivo.
  17.191 +
  17.192 +## device.version
  17.193 +
  17.194 +Obtener la versión del sistema operativo.
  17.195 +
  17.196 +    var string = device.version;
  17.197 +    
  17.198 +
  17.199 +### Plataformas soportadas
  17.200 +
  17.201 +*   Android 2.1 +
  17.202 +*   BlackBerry 10
  17.203 +*   Explorador
  17.204 +*   iOS
  17.205 +*   Tizen
  17.206 +*   Windows Phone 7 y 8
  17.207 +*   Windows 8
  17.208 +
  17.209 +### Ejemplo rápido
  17.210 +
  17.211 +    // Android:    Froyo OS would return "2.2"
  17.212 +    //             Eclair OS would return "2.1", "2.0.1", or "2.0"
  17.213 +    //             Version can also return update level "2.1-update1"
  17.214 +    //
  17.215 +    // BlackBerry: Torch 9800 using OS 6.0 would return "6.0.0.600"
  17.216 +    //
  17.217 +    // Browser:    Returns version number for the browser
  17.218 +    //
  17.219 +    // iPhone:     iOS 3.2 returns "3.2"
  17.220 +    //
  17.221 +    // Windows Phone 7: returns current OS version number, ex. el Mango se vuelve 7.10.7720 
  17.222 +    // Tizen: devuelve "TIZEN_20120425_2" 
  17.223 +    var deviceVersion = device.version;
  17.224 \ No newline at end of file
    18.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    18.2 +++ b/Touchgui/plugins/org.apache.cordova.device/doc/fr/index.md	Thu Jun 04 14:50:33 2015 +0200
    18.3 @@ -0,0 +1,218 @@
    18.4 +<!---
    18.5 +    Licensed to the Apache Software Foundation (ASF) under one
    18.6 +    or more contributor license agreements.  See the NOTICE file
    18.7 +    distributed with this work for additional information
    18.8 +    regarding copyright ownership.  The ASF licenses this file
    18.9 +    to you under the Apache License, Version 2.0 (the
   18.10 +    "License"); you may not use this file except in compliance
   18.11 +    with the License.  You may obtain a copy of the License at
   18.12 +
   18.13 +      http://www.apache.org/licenses/LICENSE-2.0
   18.14 +
   18.15 +    Unless required by applicable law or agreed to in writing,
   18.16 +    software distributed under the License is distributed on an
   18.17 +    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
   18.18 +    KIND, either express or implied.  See the License for the
   18.19 +    specific language governing permissions and limitations
   18.20 +    under the License.
   18.21 +-->
   18.22 +
   18.23 +# org.apache.cordova.device
   18.24 +
   18.25 +Ce plugin définit un global `device` objet qui décrit le matériel et les logiciels de l'appareil. Bien que l'objet est dans la portée globale, il n'est pas disponible jusqu'après la `deviceready` événement.
   18.26 +
   18.27 +    document.addEventListener("deviceready", onDeviceReady, false);
   18.28 +    function onDeviceReady() {
   18.29 +        console.log(device.cordova);
   18.30 +    }
   18.31 +    
   18.32 +
   18.33 +## Installation
   18.34 +
   18.35 +    cordova plugin add org.apache.cordova.device
   18.36 +    
   18.37 +
   18.38 +## Propriétés
   18.39 +
   18.40 +*   device.cordova
   18.41 +*   device.model
   18.42 +*   device.platform
   18.43 +*   device.uuid
   18.44 +*   device.version
   18.45 +
   18.46 +## device.cordova
   18.47 +
   18.48 +Retourne la version de Cordova en cours d'exécution sur l'appareil.
   18.49 +
   18.50 +### Plates-formes prises en charge
   18.51 +
   18.52 +*   Amazon Fire OS
   18.53 +*   Android
   18.54 +*   BlackBerry 10
   18.55 +*   Navigateur
   18.56 +*   Firefox OS
   18.57 +*   iOS
   18.58 +*   Paciarelli
   18.59 +*   Windows Phone 7 et 8
   18.60 +*   Windows 8
   18.61 +
   18.62 +## device.model
   18.63 +
   18.64 +L'objet `device.model` retourne le nom du modèle de l'appareil/produit. Cette valeur est définie par le fabricant du périphérique et peut varier entre les différentes versions d'un même produit.
   18.65 +
   18.66 +### Plates-formes prises en charge
   18.67 +
   18.68 +*   Android
   18.69 +*   BlackBerry 10
   18.70 +*   Navigateur
   18.71 +*   iOS
   18.72 +*   Paciarelli
   18.73 +*   Windows Phone 7 et 8
   18.74 +*   Windows 8
   18.75 +
   18.76 +### Petit exemple
   18.77 +
   18.78 +    // Android:    Nexus One       returns "Passion" (Nexus One code name)
   18.79 +    //             Motorola Droid  returns "voles"
   18.80 +    // BlackBerry: Torch 9800      returns "9800"
   18.81 +    // Browser:    Google Chrome   returns "Chrome"
   18.82 +    //             Safari          returns "Safari"
   18.83 +    // iOS:     for the iPad Mini, returns iPad2,5; iPhone 5 is iPhone 5,1. Voir http://theiphonewiki.com/wiki/index.php?title=Models
   18.84 +    //
   18.85 +    var model = device.model;
   18.86 +    
   18.87 +
   18.88 +### Quirks Android
   18.89 +
   18.90 +*   Retourne le [nom du produit][1] au lieu du [nom du modèle][2], ce qui équivaut souvent au nom de code de production. Par exemple, `Passion` pour le Nexus One et `voles` pour le Motorola Droid.
   18.91 +
   18.92 + [1]: http://developer.android.com/reference/android/os/Build.html#PRODUCT
   18.93 + [2]: http://developer.android.com/reference/android/os/Build.html#MODEL
   18.94 +
   18.95 +### Bizarreries de paciarelli
   18.96 +
   18.97 +*   Retourne le modèle du dispositif, assigné par le vendeur, par exemple `TIZEN`
   18.98 +
   18.99 +### Windows Phone 7 et 8 Quirks
  18.100 +
  18.101 +*   Retourne le modèle de l'appareil spécifié par le fabricant. Par exemple `SGH-i917` pour le Samsung Focus.
  18.102 +
  18.103 +## device.platform
  18.104 +
  18.105 +Obtenir le nom de système d'exploitation de l'appareil.
  18.106 +
  18.107 +    var string = device.platform;
  18.108 +    
  18.109 +
  18.110 +### Plates-formes prises en charge
  18.111 +
  18.112 +*   Android
  18.113 +*   BlackBerry 10
  18.114 +*   Browser4
  18.115 +*   Firefox OS
  18.116 +*   iOS
  18.117 +*   Paciarelli
  18.118 +*   Windows Phone 7 et 8
  18.119 +*   Windows 8
  18.120 +
  18.121 +### Petit exemple
  18.122 +
  18.123 +    // Depending on the device, a few examples are:
  18.124 +    //   - "Android"
  18.125 +    //   - "BlackBerry 10"
  18.126 +    //   - Browser:         returns "MacIntel" on Mac
  18.127 +    //                      returns "Win32" on Windows
  18.128 +    //   - "iOS"
  18.129 +    //   - "WinCE"
  18.130 +    //   - "Tizen"
  18.131 +    var devicePlatform = device.platform;
  18.132 +    
  18.133 +
  18.134 +### Windows Phone 7 Quirks
  18.135 +
  18.136 +Appareils Windows Phone 7 rapport de la plate-forme comme`WinCE`.
  18.137 +
  18.138 +### Notes au sujet de Windows Phone 8
  18.139 +
  18.140 +Appareils Windows Phone 8 rapport de la plate-forme comme`Win32NT`.
  18.141 +
  18.142 +## device.uuid
  18.143 +
  18.144 +Obtenir Universally Unique Identifier de l'appareil ([UUID][3]).
  18.145 +
  18.146 + [3]: http://en.wikipedia.org/wiki/Universally_Unique_Identifier
  18.147 +
  18.148 +    var string = device.uuid;
  18.149 +    
  18.150 +
  18.151 +### Description
  18.152 +
  18.153 +Les détails de comment un UUID généré sont déterminées par le fabricant du périphérique et sont spécifiques à la plate-forme ou le modèle de l'appareil.
  18.154 +
  18.155 +### Plates-formes prises en charge
  18.156 +
  18.157 +*   Android
  18.158 +*   BlackBerry 10
  18.159 +*   iOS
  18.160 +*   Paciarelli
  18.161 +*   Windows Phone 7 et 8
  18.162 +*   Windows 8
  18.163 +
  18.164 +### Petit exemple
  18.165 +
  18.166 +    // Android : retourne un nombre entier 64-bit aléatoire (sous la forme d'une chaîne de caractères, encore !)
  18.167 +    // Ce nombre entier est généré lors du premier démarrage de l'appareil
  18.168 +    //
  18.169 +    // BlackBerry : retourne le numéro PIN de l'appareil
  18.170 +    // Il s'agit d'un nombre entier unique à neuf chiffres (sous la forme d'une chaîne de caractères cependant !)
  18.171 +    //
  18.172 +    // iPhone : (copié depuis la documentation de la classe UIDevice)
  18.173 +    // Retourne une chaîne de caractères générée à partir de plusieurs caractéristiques matérielles.
  18.174 +    / / Il est garanti pour être unique pour chaque appareil et ne peut pas être lié / / pour le compte d'utilisateur.
  18.175 +    // Windows Phone 7 : retourne un hashage généré à partir de appareil+utilisateur actuel,
  18.176 +    // si aucun utilisateur n'est défini, un guid est généré persistera jusqu'à ce que l'application soit désinstallée
  18.177 +    // Tizen : retourne le numéro IMEI (International Mobile Equipment Identity) de l'appareil, ce numéro est
  18.178 +    // unique pour chaque téléphone GSM et UMTS.
  18.179 +    var deviceID = device.uuid;
  18.180 +    
  18.181 +
  18.182 +### Spécificités iOS
  18.183 +
  18.184 +Le `uuid` sur iOS n'est pas propre à un périphérique, mais varie pour chaque application, pour chaque installation. Elle change si vous supprimez, puis réinstallez l'application, et éventuellement aussi quand vous mettre à jour d'iOS, ou même mettre à jour le soft par version (apparent dans iOS 5.1). Le `uuid` n'est pas une valeur fiable.
  18.185 +
  18.186 +### Windows Phone 7 et 8 Quirks
  18.187 +
  18.188 +Le `uuid` pour Windows Phone 7 requiert l'autorisation `ID_CAP_IDENTITY_DEVICE` . Microsoft va probablement bientôt obsolète de cette propriété. Si la capacité n'est pas disponible, l'application génère un guid persistant qui est maintenu pendant toute la durée de l'installation de l'application sur le périphérique.
  18.189 +
  18.190 +## device.version
  18.191 +
  18.192 +Téléchargez la version de système d'exploitation.
  18.193 +
  18.194 +    var string = device.version;
  18.195 +    
  18.196 +
  18.197 +### Plates-formes prises en charge
  18.198 +
  18.199 +*   Android 2.1+
  18.200 +*   BlackBerry 10
  18.201 +*   Navigateur
  18.202 +*   iOS
  18.203 +*   Paciarelli
  18.204 +*   Windows Phone 7 et 8
  18.205 +*   Windows 8
  18.206 +
  18.207 +### Petit exemple
  18.208 +
  18.209 +    // Android:    Froyo OS would return "2.2"
  18.210 +    //             Eclair OS would return "2.1", "2.0.1", or "2.0"
  18.211 +    //             Version can also return update level "2.1-update1"
  18.212 +    //
  18.213 +    // BlackBerry: Torch 9800 using OS 6.0 would return "6.0.0.600"
  18.214 +    //
  18.215 +    // Browser:    Returns version number for the browser
  18.216 +    //
  18.217 +    // iPhone:     iOS 3.2 returns "3.2"
  18.218 +    //
  18.219 +    // Windows Phone 7: returns current OS version number, ex. on Mango returns 7.10.7720
  18.220 +    // Tizen: returns "TIZEN_20120425_2"
  18.221 +    var deviceVersion = device.version;
  18.222 \ No newline at end of file
    19.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    19.2 +++ b/Touchgui/plugins/org.apache.cordova.device/doc/index.md	Thu Jun 04 14:50:33 2015 +0200
    19.3 @@ -0,0 +1,218 @@
    19.4 +<!---
    19.5 +    Licensed to the Apache Software Foundation (ASF) under one
    19.6 +    or more contributor license agreements.  See the NOTICE file
    19.7 +    distributed with this work for additional information
    19.8 +    regarding copyright ownership.  The ASF licenses this file
    19.9 +    to you under the Apache License, Version 2.0 (the
   19.10 +    "License"); you may not use this file except in compliance
   19.11 +    with the License.  You may obtain a copy of the License at
   19.12 +
   19.13 +      http://www.apache.org/licenses/LICENSE-2.0
   19.14 +
   19.15 +    Unless required by applicable law or agreed to in writing,
   19.16 +    software distributed under the License is distributed on an
   19.17 +    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
   19.18 +    KIND, either express or implied.  See the License for the
   19.19 +    specific language governing permissions and limitations
   19.20 +    under the License.
   19.21 +-->
   19.22 +
   19.23 +# org.apache.cordova.device
   19.24 +
   19.25 +This plugin defines a global `device` object, which describes the device's hardware and software.
   19.26 +Although the object is in the global scope, it is not available until after the `deviceready` event.
   19.27 +
   19.28 +    document.addEventListener("deviceready", onDeviceReady, false);
   19.29 +    function onDeviceReady() {
   19.30 +        console.log(device.cordova);
   19.31 +    }
   19.32 +
   19.33 +## Installation
   19.34 +
   19.35 +    cordova plugin add org.apache.cordova.device
   19.36 +
   19.37 +## Properties
   19.38 +
   19.39 +- device.cordova
   19.40 +- device.model
   19.41 +- device.platform
   19.42 +- device.uuid
   19.43 +- device.version
   19.44 +
   19.45 +## device.cordova
   19.46 +
   19.47 +Get the version of Cordova running on the device.
   19.48 +
   19.49 +### Supported Platforms
   19.50 +
   19.51 +- Amazon Fire OS
   19.52 +- Android
   19.53 +- BlackBerry 10
   19.54 +- Browser
   19.55 +- Firefox OS
   19.56 +- iOS
   19.57 +- Tizen
   19.58 +- Windows Phone 7 and 8
   19.59 +- Windows 8
   19.60 +
   19.61 +## device.model
   19.62 +
   19.63 +The `device.model` returns the name of the device's model or
   19.64 +product. The value is set by the device manufacturer and may be
   19.65 +different across versions of the same product.
   19.66 +
   19.67 +### Supported Platforms
   19.68 +
   19.69 +- Android
   19.70 +- BlackBerry 10
   19.71 +- Browser
   19.72 +- iOS
   19.73 +- Tizen
   19.74 +- Windows Phone 7 and 8
   19.75 +- Windows 8
   19.76 +
   19.77 +### Quick Example
   19.78 +
   19.79 +    // Android:    Nexus One       returns "Passion" (Nexus One code name)
   19.80 +    //             Motorola Droid  returns "voles"
   19.81 +    // BlackBerry: Torch 9800      returns "9800"
   19.82 +    // Browser:    Google Chrome   returns "Chrome"
   19.83 +    //             Safari          returns "Safari"
   19.84 +    // iOS:     for the iPad Mini, returns iPad2,5; iPhone 5 is iPhone 5,1. See http://theiphonewiki.com/wiki/index.php?title=Models
   19.85 +    //
   19.86 +    var model = device.model;
   19.87 +
   19.88 +### Android Quirks
   19.89 +
   19.90 +- Gets the [product name](http://developer.android.com/reference/android/os/Build.html#PRODUCT) instead of the [model name](http://developer.android.com/reference/android/os/Build.html#MODEL), which is often the production code name. For example, the Nexus One returns `Passion`, and Motorola Droid returns `voles`.
   19.91 +
   19.92 +### Tizen Quirks
   19.93 +
   19.94 +- Returns the device model assigned by the vendor, for example, `TIZEN`
   19.95 +
   19.96 +### Windows Phone 7 and 8 Quirks
   19.97 +
   19.98 +- Returns the device model specified by the manufacturer. For example, the Samsung Focus returns `SGH-i917`.
   19.99 +
  19.100 +## device.platform
  19.101 +
  19.102 +Get the device's operating system name.
  19.103 +
  19.104 +    var string = device.platform;
  19.105 +
  19.106 +### Supported Platforms
  19.107 +
  19.108 +- Android
  19.109 +- BlackBerry 10
  19.110 +- Browser4
  19.111 +- Firefox OS
  19.112 +- iOS
  19.113 +- Tizen
  19.114 +- Windows Phone 7 and 8
  19.115 +- Windows 8
  19.116 +
  19.117 +### Quick Example
  19.118 +
  19.119 +    // Depending on the device, a few examples are:
  19.120 +    //   - "Android"
  19.121 +    //   - "BlackBerry 10"
  19.122 +    //   - Browser:         returns "MacIntel" on Mac
  19.123 +    //                      returns "Win32" on Windows
  19.124 +    //   - "iOS"
  19.125 +    //   - "WinCE"
  19.126 +    //   - "Tizen"
  19.127 +    var devicePlatform = device.platform;
  19.128 +
  19.129 +### Windows Phone 7 Quirks
  19.130 +
  19.131 +Windows Phone 7 devices report the platform as `WinCE`.
  19.132 +
  19.133 +### Windows Phone 8 Quirks
  19.134 +
  19.135 +Windows Phone 8 devices report the platform as `Win32NT`.
  19.136 +
  19.137 +## device.uuid
  19.138 +
  19.139 +Get the device's Universally Unique Identifier ([UUID](http://en.wikipedia.org/wiki/Universally_Unique_Identifier)).
  19.140 +
  19.141 +    var string = device.uuid;
  19.142 +
  19.143 +### Description
  19.144 +
  19.145 +The details of how a UUID is generated are determined by the device manufacturer and are specific to the device's platform or model.
  19.146 +
  19.147 +### Supported Platforms
  19.148 +
  19.149 +- Android
  19.150 +- BlackBerry 10
  19.151 +- iOS
  19.152 +- Tizen
  19.153 +- Windows Phone 7 and 8
  19.154 +- Windows 8
  19.155 +
  19.156 +### Quick Example
  19.157 +
  19.158 +    // Android: Returns a random 64-bit integer (as a string, again!)
  19.159 +    //          The integer is generated on the device's first boot
  19.160 +    //
  19.161 +    // BlackBerry: Returns the PIN number of the device
  19.162 +    //             This is a nine-digit unique integer (as a string, though!)
  19.163 +    //
  19.164 +    // iPhone: (Paraphrased from the UIDevice Class documentation)
  19.165 +    //         Returns a string of hash values created from multiple hardware identifies.
  19.166 +    //         It is guaranteed to be unique for every device and can't be tied
  19.167 +    //         to the user account.
  19.168 +    // Windows Phone 7 : Returns a hash of device+current user,
  19.169 +    // if the user is not defined, a guid is generated and will persist until the app is uninstalled
  19.170 +    // Tizen: returns the device IMEI (International Mobile Equipment Identity or IMEI is a number
  19.171 +    // unique to every GSM and UMTS mobile phone.
  19.172 +    var deviceID = device.uuid;
  19.173 +
  19.174 +### iOS Quirk
  19.175 +
  19.176 +The `uuid` on iOS is not unique to a device, but varies for each
  19.177 +application, for each installation.  It changes if you delete and
  19.178 +re-install the app, and possibly also when you upgrade iOS, or even
  19.179 +upgrade the app per version (apparent in iOS 5.1). The `uuid` is not
  19.180 +a reliable value.
  19.181 +
  19.182 +### Windows Phone 7 and 8 Quirks
  19.183 +
  19.184 +The `uuid` for Windows Phone 7 requires the permission
  19.185 +`ID_CAP_IDENTITY_DEVICE`.  Microsoft will likely deprecate this
  19.186 +property soon.  If the capability is not available, the application
  19.187 +generates a persistent guid that is maintained for the duration of the
  19.188 +application's installation on the device.
  19.189 +
  19.190 +## device.version
  19.191 +
  19.192 +Get the operating system version.
  19.193 +
  19.194 +    var string = device.version;
  19.195 +
  19.196 +### Supported Platforms
  19.197 +
  19.198 +- Android 2.1+
  19.199 +- BlackBerry 10
  19.200 +- Browser
  19.201 +- iOS
  19.202 +- Tizen
  19.203 +- Windows Phone 7 and 8
  19.204 +- Windows 8
  19.205 +
  19.206 +### Quick Example
  19.207 +
  19.208 +    // Android:    Froyo OS would return "2.2"
  19.209 +    //             Eclair OS would return "2.1", "2.0.1", or "2.0"
  19.210 +    //             Version can also return update level "2.1-update1"
  19.211 +    //
  19.212 +    // BlackBerry: Torch 9800 using OS 6.0 would return "6.0.0.600"
  19.213 +    //
  19.214 +    // Browser:    Returns version number for the browser
  19.215 +    //
  19.216 +    // iPhone:     iOS 3.2 returns "3.2"
  19.217 +    //
  19.218 +    // Windows Phone 7: returns current OS version number, ex. on Mango returns 7.10.7720
  19.219 +    // Tizen: returns "TIZEN_20120425_2"
  19.220 +    var deviceVersion = device.version;
  19.221 +
    20.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    20.2 +++ b/Touchgui/plugins/org.apache.cordova.device/doc/it/index.md	Thu Jun 04 14:50:33 2015 +0200
    20.3 @@ -0,0 +1,206 @@
    20.4 +<!---
    20.5 +    Licensed to the Apache Software Foundation (ASF) under one
    20.6 +    or more contributor license agreements.  See the NOTICE file
    20.7 +    distributed with this work for additional information
    20.8 +    regarding copyright ownership.  The ASF licenses this file
    20.9 +    to you under the Apache License, Version 2.0 (the
   20.10 +    "License"); you may not use this file except in compliance
   20.11 +    with the License.  You may obtain a copy of the License at
   20.12 +
   20.13 +      http://www.apache.org/licenses/LICENSE-2.0
   20.14 +
   20.15 +    Unless required by applicable law or agreed to in writing,
   20.16 +    software distributed under the License is distributed on an
   20.17 +    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
   20.18 +    KIND, either express or implied.  See the License for the
   20.19 +    specific language governing permissions and limitations
   20.20 +    under the License.
   20.21 +-->
   20.22 +
   20.23 +# org.apache.cordova.device
   20.24 +
   20.25 +Questo plugin definisce un global `device` oggetto che descrive il dispositivo hardware e software. Sebbene l'oggetto sia in ambito globale, non è disponibile fino a dopo il `deviceready` evento.
   20.26 +
   20.27 +    document.addEventListener("deviceready", onDeviceReady, false);
   20.28 +    function onDeviceReady() {
   20.29 +        console.log(device.cordova);
   20.30 +    }
   20.31 +    
   20.32 +
   20.33 +## Installazione
   20.34 +
   20.35 +    cordova plugin add org.apache.cordova.device
   20.36 +    
   20.37 +
   20.38 +## Proprietà
   20.39 +
   20.40 +*   device.cordova
   20.41 +*   device.model
   20.42 +*   device.platform
   20.43 +*   device.uuid
   20.44 +*   device.version
   20.45 +
   20.46 +## device.cordova
   20.47 +
   20.48 +Ottenere la versione di Cordova in esecuzione nel dispositivo.
   20.49 +
   20.50 +### Piattaforme supportate
   20.51 +
   20.52 +*   Amazon fuoco OS
   20.53 +*   Android
   20.54 +*   BlackBerry 10
   20.55 +*   Browser
   20.56 +*   Firefox OS
   20.57 +*   iOS
   20.58 +*   Tizen
   20.59 +*   Windows Phone 7 e 8
   20.60 +*   Windows 8
   20.61 +
   20.62 +## device.model
   20.63 +
   20.64 +Il `device.model` restituisce il nome del modello del dispositivo o del prodotto. Il valore viene impostato dal produttore del dispositivo e può essere differente tra le versioni dello stesso prodotto.
   20.65 +
   20.66 +### Piattaforme supportate
   20.67 +
   20.68 +*   Android
   20.69 +*   BlackBerry 10
   20.70 +*   Browser
   20.71 +*   iOS
   20.72 +*   Tizen
   20.73 +*   Windows Phone 7 e 8
   20.74 +*   Windows 8
   20.75 +
   20.76 +### Esempio rapido
   20.77 +
   20.78 +    // Android:    Nexus One       returns "Passion" (Nexus One code name)
   20.79 +    //             Motorola Droid  returns "voles"
   20.80 +    // BlackBerry: Torch 9800      returns "9800"
   20.81 +    // Browser:    Google Chrome   returns "Chrome"
   20.82 +    //             Safari          returns "Safari"
   20.83 +    // iOS:     for the iPad Mini, returns iPad2,5; iPhone 5 is iPhone 5,1. Vedi http://theiphonewiki.com/wiki/index.php?title=Models / / modello var = device.model;
   20.84 +    
   20.85 +
   20.86 +### Stranezze Android
   20.87 +
   20.88 +*   Ottiene il [nome del prodotto][1] anziché il [nome del modello][2], che è spesso il nome di codice di produzione. Ad esempio, restituisce il Nexus One `Passion` , e Motorola Droid restituisce`voles`.
   20.89 +
   20.90 + [1]: http://developer.android.com/reference/android/os/Build.html#PRODUCT
   20.91 + [2]: http://developer.android.com/reference/android/os/Build.html#MODEL
   20.92 +
   20.93 +### Tizen stranezze
   20.94 +
   20.95 +*   Restituisce il modello di dispositivo assegnato dal fornitore, ad esempio,`TIZEN`
   20.96 +
   20.97 +### Windows Phone 7 e 8 stranezze
   20.98 +
   20.99 +*   Restituisce il modello di dispositivo specificato dal produttore. Ad esempio, restituisce il Samsung Focus`SGH-i917`.
  20.100 +
  20.101 +## device.platform
  20.102 +
  20.103 +Ottenere il nome del sistema operativo del dispositivo.
  20.104 +
  20.105 +    var string = device.platform;
  20.106 +    
  20.107 +
  20.108 +### Piattaforme supportate
  20.109 +
  20.110 +*   Android
  20.111 +*   BlackBerry 10
  20.112 +*   Browser4
  20.113 +*   Firefox OS
  20.114 +*   iOS
  20.115 +*   Tizen
  20.116 +*   Windows Phone 7 e 8
  20.117 +*   Windows 8
  20.118 +
  20.119 +### Esempio rapido
  20.120 +
  20.121 +    // Depending on the device, a few examples are:
  20.122 +    //   - "Android"
  20.123 +    //   - "BlackBerry 10"
  20.124 +    //   - Browser:         returns "MacIntel" on Mac
  20.125 +    //                      returns "Win32" on Windows
  20.126 +    //   - "iOS"
  20.127 +    //   - "WinCE"
  20.128 +    //   - "Tizen"
  20.129 +    var devicePlatform = device.platform;
  20.130 +    
  20.131 +
  20.132 +### Windows Phone 7 capricci
  20.133 +
  20.134 +Windows Phone 7 dispositivi segnalano la piattaforma come`WinCE`.
  20.135 +
  20.136 +### Windows Phone 8 stranezze
  20.137 +
  20.138 +Dispositivi Windows Phone 8 segnalano la piattaforma come`Win32NT`.
  20.139 +
  20.140 +## device.uuid
  20.141 +
  20.142 +Ottenere identificatore del dispositivo univoco universale ([UUID][3]).
  20.143 +
  20.144 + [3]: http://en.wikipedia.org/wiki/Universally_Unique_Identifier
  20.145 +
  20.146 +    var string = device.uuid;
  20.147 +    
  20.148 +
  20.149 +### Descrizione
  20.150 +
  20.151 +I dettagli di come viene generato un UUID sono determinati dal produttore del dispositivo e sono specifici per la piattaforma o il modello del dispositivo.
  20.152 +
  20.153 +### Piattaforme supportate
  20.154 +
  20.155 +*   Android
  20.156 +*   BlackBerry 10
  20.157 +*   iOS
  20.158 +*   Tizen
  20.159 +*   Windows Phone 7 e 8
  20.160 +*   Windows 8
  20.161 +
  20.162 +### Esempio rapido
  20.163 +
  20.164 +    / / Android: restituisce un intero casuale di 64 bit (come stringa, ancora una volta!) / / il numero intero è generato al primo avvio del dispositivo / / / / BlackBerry: restituisce il numero PIN del dispositivo / / questo è un valore integer univoco a nove cifre (come stringa, benchè!) / / / / iPhone: (parafrasato dalla documentazione della classe UIDevice) / / restituisce una stringa di valori hash creata dall'hardware più identifica.
  20.165 +    / / È garantito per essere unica per ogni dispositivo e non può essere legato / / per l'account utente.
  20.166 +    / / Windows Phone 7: restituisce un hash dell'utente corrente, + dispositivo / / se l'utente non è definito, un guid generato e persisterà fino a quando l'applicazione viene disinstallata / / Tizen: restituisce il dispositivo IMEI (International Mobile Equipment Identity o IMEI è un numero / / unico per ogni cellulare GSM e UMTS.
  20.167 +    var deviceID = device.uuid;
  20.168 +    
  20.169 +
  20.170 +### iOS Quirk
  20.171 +
  20.172 +Il `uuid` su iOS non è univoco per un dispositivo, ma varia per ogni applicazione, per ogni installazione. Cambia se si elimina e re-installare l'app, e possibilmente anche quando aggiornare iOS o anche aggiornare l'app per ogni versione (apparente in iOS 5.1). Il `uuid` non è un valore affidabile.
  20.173 +
  20.174 +### Windows Phone 7 e 8 stranezze
  20.175 +
  20.176 +Il `uuid` per Windows Phone 7 richiede l'autorizzazione `ID_CAP_IDENTITY_DEVICE` . Microsoft probabilmente sarà presto deprecare questa proprietà. Se la funzionalità non è disponibile, l'applicazione genera un guid persistente che viene mantenuto per la durata dell'installazione dell'applicazione sul dispositivo.
  20.177 +
  20.178 +## device.version
  20.179 +
  20.180 +Ottenere la versione del sistema operativo.
  20.181 +
  20.182 +    var string = device.version;
  20.183 +    
  20.184 +
  20.185 +### Piattaforme supportate
  20.186 +
  20.187 +*   Android 2.1 +
  20.188 +*   BlackBerry 10
  20.189 +*   Browser
  20.190 +*   iOS
  20.191 +*   Tizen
  20.192 +*   Windows Phone 7 e 8
  20.193 +*   Windows 8
  20.194 +
  20.195 +### Esempio rapido
  20.196 +
  20.197 +    // Android:    Froyo OS would return "2.2"
  20.198 +    //             Eclair OS would return "2.1", "2.0.1", or "2.0"
  20.199 +    //             Version can also return update level "2.1-update1"
  20.200 +    //
  20.201 +    // BlackBerry: Torch 9800 using OS 6.0 would return "6.0.0.600"
  20.202 +    //
  20.203 +    // Browser:    Returns version number for the browser
  20.204 +    //
  20.205 +    // iPhone:     iOS 3.2 returns "3.2"
  20.206 +    //
  20.207 +    // Windows Phone 7: returns current OS version number, ex. on Mango returns 7.10.7720
  20.208 +    // Tizen: returns "TIZEN_20120425_2"
  20.209 +    var deviceVersion = device.version;
  20.210 \ No newline at end of file
    21.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    21.2 +++ b/Touchgui/plugins/org.apache.cordova.device/doc/ja/index.md	Thu Jun 04 14:50:33 2015 +0200
    21.3 @@ -0,0 +1,206 @@
    21.4 +<!---
    21.5 +    Licensed to the Apache Software Foundation (ASF) under one
    21.6 +    or more contributor license agreements.  See the NOTICE file
    21.7 +    distributed with this work for additional information
    21.8 +    regarding copyright ownership.  The ASF licenses this file
    21.9 +    to you under the Apache License, Version 2.0 (the
   21.10 +    "License"); you may not use this file except in compliance
   21.11 +    with the License.  You may obtain a copy of the License at
   21.12 +
   21.13 +      http://www.apache.org/licenses/LICENSE-2.0
   21.14 +
   21.15 +    Unless required by applicable law or agreed to in writing,
   21.16 +    software distributed under the License is distributed on an
   21.17 +    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
   21.18 +    KIND, either express or implied.  See the License for the
   21.19 +    specific language governing permissions and limitations
   21.20 +    under the License.
   21.21 +-->
   21.22 +
   21.23 +# org.apache.cordova.device
   21.24 +
   21.25 +このプラグインをグローバル定義します `device` オブジェクトは、デバイスのハードウェアとソフトウェアについて説明します。 それは後まで利用可能なオブジェクトがグローバル スコープでは、 `deviceready` イベント。
   21.26 +
   21.27 +    document.addEventListener("deviceready", onDeviceReady, false);
   21.28 +    function onDeviceReady() {
   21.29 +        console.log(device.cordova);
   21.30 +    }
   21.31 +    
   21.32 +
   21.33 +## インストール
   21.34 +
   21.35 +    cordova plugin add org.apache.cordova.device
   21.36 +    
   21.37 +
   21.38 +## プロパティ
   21.39 +
   21.40 +*   device.cordova
   21.41 +*   device.model
   21.42 +*   device.platform
   21.43 +*   device.uuid
   21.44 +*   device.version
   21.45 +
   21.46 +## device.cordova
   21.47 +
   21.48 +デバイスで実行されているコルドバのバージョンを取得します。
   21.49 +
   21.50 +### サポートされているプラットフォーム
   21.51 +
   21.52 +*   アマゾン火 OS
   21.53 +*   アンドロイド
   21.54 +*   ブラックベリー 10
   21.55 +*   ブラウザー
   21.56 +*   Firefox の OS
   21.57 +*   iOS
   21.58 +*   Tizen
   21.59 +*   Windows Phone 7 と 8
   21.60 +*   Windows 8
   21.61 +
   21.62 +## device.model
   21.63 +
   21.64 +`device.model`、デバイスのモデルまたは製品の名前を返します。値は、デバイスの製造元によって設定され、同じ製品のバージョン間で異なる可能性があります。
   21.65 +
   21.66 +### サポートされているプラットフォーム
   21.67 +
   21.68 +*   アンドロイド
   21.69 +*   ブラックベリー 10
   21.70 +*   ブラウザー
   21.71 +*   iOS
   21.72 +*   Tizen
   21.73 +*   Windows Phone 7 と 8
   21.74 +*   Windows 8
   21.75 +
   21.76 +### 簡単な例
   21.77 +
   21.78 +    // Android:    Nexus One       returns "Passion" (Nexus One code name)
   21.79 +    //             Motorola Droid  returns "voles"
   21.80 +    // BlackBerry: Torch 9800      returns "9800"
   21.81 +    // Browser:    Google Chrome   returns "Chrome"
   21.82 +    //             Safari          returns "Safari"
   21.83 +    // iOS:     for the iPad Mini, returns iPad2,5; iPhone 5 is iPhone 5,1. Http://theiphonewiki.com/wiki/index.php?title=Models を参照してください//var モデル = device.model;
   21.84 +    
   21.85 +
   21.86 +### Android の癖
   21.87 +
   21.88 +*   生産コード名は[モデル名][1]の代わりに[製品名][2]を取得します。 たとえば、ネクサス 1 つを返します `Passion` 、Motorola のドロイドを返します`voles`.
   21.89 +
   21.90 + [1]: http://developer.android.com/reference/android/os/Build.html#MODEL
   21.91 + [2]: http://developer.android.com/reference/android/os/Build.html#PRODUCT
   21.92 +
   21.93 +### Tizen の癖
   21.94 +
   21.95 +*   たとえば、ベンダーによって割り当てられているデバイスのモデルを返します`TIZEN`
   21.96 +
   21.97 +### Windows Phone 7 と 8 癖
   21.98 +
   21.99 +*   製造元によって指定されたデバイスのモデルを返します。たとえば、三星フォーカスを返します`SGH-i917`.
  21.100 +
  21.101 +## device.platform
  21.102 +
  21.103 +デバイスのオペレーティング システム名を取得します。
  21.104 +
  21.105 +    var string = device.platform;
  21.106 +    
  21.107 +
  21.108 +### サポートされているプラットフォーム
  21.109 +
  21.110 +*   アンドロイド
  21.111 +*   ブラックベリー 10
  21.112 +*   Browser4
  21.113 +*   Firefox の OS
  21.114 +*   iOS
  21.115 +*   Tizen
  21.116 +*   Windows Phone 7 と 8
  21.117 +*   Windows 8
  21.118 +
  21.119 +### 簡単な例
  21.120 +
  21.121 +    // Depending on the device, a few examples are:
  21.122 +    //   - "Android"
  21.123 +    //   - "BlackBerry 10"
  21.124 +    //   - Browser:         returns "MacIntel" on Mac
  21.125 +    //                      returns "Win32" on Windows
  21.126 +    //   - "iOS"
  21.127 +    //   - "WinCE"
  21.128 +    //   - "Tizen"
  21.129 +    var devicePlatform = device.platform;
  21.130 +    
  21.131 +
  21.132 +### Windows Phone 7 の癖
  21.133 +
  21.134 +Windows Phone 7 デバイスとプラットフォームを報告します。`WinCE`.
  21.135 +
  21.136 +### Windows Phone 8 癖
  21.137 +
  21.138 +Windows Phone 8 デバイスとプラットフォームを報告します。`Win32NT`.
  21.139 +
  21.140 +## device.uuid
  21.141 +
  21.142 +デバイスのユニバーサル ・ ユニーク識別子 ([UUID][3]を取得します。).
  21.143 +
  21.144 + [3]: http://en.wikipedia.org/wiki/Universally_Unique_Identifier
  21.145 +
  21.146 +    var string = device.uuid;
  21.147 +    
  21.148 +
  21.149 +### 説明
  21.150 +
  21.151 +UUID を生成する方法の詳細は、デバイスの製造元によって決定され、デバイスのプラットフォームやモデルに固有です。
  21.152 +
  21.153 +### サポートされているプラットフォーム
  21.154 +
  21.155 +*   アンドロイド
  21.156 +*   ブラックベリー 10
  21.157 +*   iOS
  21.158 +*   Tizen
  21.159 +*   Windows Phone 7 と 8
  21.160 +*   Windows 8
  21.161 +
  21.162 +### 簡単な例
  21.163 +
  21.164 +    //アンドロイド: ランダムな 64 ビットの整数 (を文字列として返します、再び !)/デバイスの最初の起動時に生成される整数/////ブラックベリー: デバイスのピン番号を返します//これは 9 桁の一意な整数 (を文字列としても !)////iPhone: (UIDevice クラスのドキュメントから言い換え)//識別複数のハードウェアから作成されたハッシュ値の文字列を返します。。
  21.165 +    //それはすべてのデバイスに対して一意であることが保証され、接続することはできません//ユーザー アカウント。
  21.166 +    //Windows Phone 7: デバイス + 現在のユーザーのハッシュを返します//ユーザーが定義されていない場合 guid が生成され、アプリがアンインストールされるまで保持されます//Tizen: デバイスの IMEI を返します (国際モバイル機器アイデンティティまたは IMEI は番号です//すべての GSM および UMTS の携帯電話に固有です。
  21.167 +    var deviceID = device.uuid;
  21.168 +    
  21.169 +
  21.170 +### iOS の気まぐれ
  21.171 +
  21.172 +`uuid`IOS で、デバイスに固有ではないインストールごと、アプリケーションごとに異なります。 削除、アプリを再インストールした場合に変更と多分またときアップグレード iOS の, またはもアップグレードするアプリ (iOS の 5.1 で明らかに) バージョンごと。 `uuid`は信頼性の高い値ではありません。
  21.173 +
  21.174 +### Windows Phone 7 と 8 癖
  21.175 +
  21.176 +`uuid`のために Windows Phone 7 には、権限が必要です `ID_CAP_IDENTITY_DEVICE` 。 Microsoft はすぐにこのプロパティを廃止して可能性があります。 機能が利用できない場合、アプリケーションはデバイスへのアプリケーションのインストールの持続期間のために保持されている永続的な guid を生成します。
  21.177 +
  21.178 +## device.version
  21.179 +
  21.180 +オペレーティング システムのバージョンを取得します。
  21.181 +
  21.182 +    var string = device.version;
  21.183 +    
  21.184 +
  21.185 +### サポートされているプラットフォーム
  21.186 +
  21.187 +*   アンドロイド 2.1 +
  21.188 +*   ブラックベリー 10
  21.189 +*   ブラウザー
  21.190 +*   iOS
  21.191 +*   Tizen
  21.192 +*   Windows Phone 7 と 8
  21.193 +*   Windows 8
  21.194 +
  21.195 +### 簡単な例
  21.196 +
  21.197 +    // Android:    Froyo OS would return "2.2"
  21.198 +    //             Eclair OS would return "2.1", "2.0.1", or "2.0"
  21.199 +    //             Version can also return update level "2.1-update1"
  21.200 +    //
  21.201 +    // BlackBerry: Torch 9800 using OS 6.0 would return "6.0.0.600"
  21.202 +    //
  21.203 +    // Browser:    Returns version number for the browser
  21.204 +    //
  21.205 +    // iPhone:     iOS 3.2 returns "3.2"
  21.206 +    //
  21.207 +    // Windows Phone 7: returns current OS version number, ex. on Mango returns 7.10.7720
  21.208 +    // Tizen: returns "TIZEN_20120425_2"
  21.209 +    var deviceVersion = device.version;
  21.210 \ No newline at end of file
    22.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    22.2 +++ b/Touchgui/plugins/org.apache.cordova.device/doc/ko/index.md	Thu Jun 04 14:50:33 2015 +0200
    22.3 @@ -0,0 +1,206 @@
    22.4 +<!---
    22.5 +    Licensed to the Apache Software Foundation (ASF) under one
    22.6 +    or more contributor license agreements.  See the NOTICE file
    22.7 +    distributed with this work for additional information
    22.8 +    regarding copyright ownership.  The ASF licenses this file
    22.9 +    to you under the Apache License, Version 2.0 (the
   22.10 +    "License"); you may not use this file except in compliance
   22.11 +    with the License.  You may obtain a copy of the License at
   22.12 +
   22.13 +      http://www.apache.org/licenses/LICENSE-2.0
   22.14 +
   22.15 +    Unless required by applicable law or agreed to in writing,
   22.16 +    software distributed under the License is distributed on an
   22.17 +    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
   22.18 +    KIND, either express or implied.  See the License for the
   22.19 +    specific language governing permissions and limitations
   22.20 +    under the License.
   22.21 +-->
   22.22 +
   22.23 +# org.apache.cordova.device
   22.24 +
   22.25 +이 플러그인 정의 전역 `device` 개체, 디바이스의 하드웨어 및 소프트웨어에 설명 합니다. 개체는 전역 범위에서 비록 그것은 후까지 사용할 수 있는 `deviceready` 이벤트.
   22.26 +
   22.27 +    document.addEventListener("deviceready", onDeviceReady, false);
   22.28 +    function onDeviceReady() {
   22.29 +        console.log(device.cordova);
   22.30 +    }
   22.31 +    
   22.32 +
   22.33 +## 설치
   22.34 +
   22.35 +    cordova plugin add org.apache.cordova.device
   22.36 +    
   22.37 +
   22.38 +## 속성
   22.39 +
   22.40 +*   device.cordova
   22.41 +*   device.model
   22.42 +*   device.platform
   22.43 +*   device.uuid
   22.44 +*   device.version
   22.45 +
   22.46 +## device.cordova
   22.47 +
   22.48 +코르도바는 장치에서 실행 중인 버전을 얻을.
   22.49 +
   22.50 +### 지원 되는 플랫폼
   22.51 +
   22.52 +*   아마존 화재 운영 체제
   22.53 +*   안 드 로이드
   22.54 +*   블랙베리 10
   22.55 +*   브라우저
   22.56 +*   Firefox 운영 체제
   22.57 +*   iOS
   22.58 +*   Tizen
   22.59 +*   Windows Phone 7과 8
   22.60 +*   윈도우 8
   22.61 +
   22.62 +## device.model
   22.63 +
   22.64 +`device.model`소자의 모델 또는 제품의 이름을 반환 합니다. 값 장치 제조업체에서 설정 되 고 동일 제품의 버전 간에 다를 수 있습니다.
   22.65 +
   22.66 +### 지원 되는 플랫폼
   22.67 +
   22.68 +*   안 드 로이드
   22.69 +*   블랙베리 10
   22.70 +*   브라우저
   22.71 +*   iOS
   22.72 +*   Tizen
   22.73 +*   Windows Phone 7과 8
   22.74 +*   윈도우 8
   22.75 +
   22.76 +### 빠른 예제
   22.77 +
   22.78 +    // Android:    Nexus One       returns "Passion" (Nexus One code name)
   22.79 +    //             Motorola Droid  returns "voles"
   22.80 +    // BlackBerry: Torch 9800      returns "9800"
   22.81 +    // Browser:    Google Chrome   returns "Chrome"
   22.82 +    //             Safari          returns "Safari"
   22.83 +    // iOS:     for the iPad Mini, returns iPad2,5; iPhone 5 is iPhone 5,1. Http://theiphonewiki.com/wiki/index.php?title=Models 참조 / / var 모델 = device.model;
   22.84 +    
   22.85 +
   22.86 +### 안 드 로이드 단점
   22.87 +
   22.88 +*   어떤은 종종 프로덕션 코드 이름 대신 [제품 모델 이름][1], [제품 이름][2] 을 가져옵니다. 예를 들어 넥서스 하나 반환 합니다 `Passion` , 모토로라 Droid를 반환 합니다`voles`.
   22.89 +
   22.90 + [1]: http://developer.android.com/reference/android/os/Build.html#MODEL
   22.91 + [2]: http://developer.android.com/reference/android/os/Build.html#PRODUCT
   22.92 +
   22.93 +### Tizen 특수
   22.94 +
   22.95 +*   예를 들어, 공급 업체에 의해 할당 된 디바이스 모델을 반환 합니다.`TIZEN`
   22.96 +
   22.97 +### Windows Phone 7, 8 특수
   22.98 +
   22.99 +*   제조업체에서 지정 하는 장치 모델을 반환 합니다. 예를 들어 삼성 포커스를 반환 합니다.`SGH-i917`.
  22.100 +
  22.101 +## device.platform
  22.102 +
  22.103 +장치의 운영 체제 이름을 얻을.
  22.104 +
  22.105 +    var string = device.platform;
  22.106 +    
  22.107 +
  22.108 +### 지원 되는 플랫폼
  22.109 +
  22.110 +*   안 드 로이드
  22.111 +*   블랙베리 10
  22.112 +*   Browser4
  22.113 +*   Firefox 운영 체제
  22.114 +*   iOS
  22.115 +*   Tizen
  22.116 +*   Windows Phone 7과 8
  22.117 +*   윈도우 8
  22.118 +
  22.119 +### 빠른 예제
  22.120 +
  22.121 +    // Depending on the device, a few examples are:
  22.122 +    //   - "Android"
  22.123 +    //   - "BlackBerry 10"
  22.124 +    //   - Browser:         returns "MacIntel" on Mac
  22.125 +    //                      returns "Win32" on Windows
  22.126 +    //   - "iOS"
  22.127 +    //   - "WinCE"
  22.128 +    //   - "Tizen"
  22.129 +    var devicePlatform = device.platform;
  22.130 +    
  22.131 +
  22.132 +### Windows Phone 7 단점
  22.133 +
  22.134 +Windows Phone 7 장치 보고 플랫폼으로`WinCE`.
  22.135 +
  22.136 +### Windows Phone 8 단점
  22.137 +
  22.138 +Windows Phone 8 장치 보고 플랫폼으로`Win32NT`.
  22.139 +
  22.140 +## device.uuid
  22.141 +
  22.142 +소자의 보편적으로 고유 식별자 ([UUID][3] 를 얻을합니다).
  22.143 +
  22.144 + [3]: http://en.wikipedia.org/wiki/Universally_Unique_Identifier
  22.145 +
  22.146 +    var string = device.uuid;
  22.147 +    
  22.148 +
  22.149 +### 설명
  22.150 +
  22.151 +UUID 생성 방법의 자세한 내용은 장치 제조업체에 의해 결정 됩니다 및 소자의 플랫폼 이나 모델.
  22.152 +
  22.153 +### 지원 되는 플랫폼
  22.154 +
  22.155 +*   안 드 로이드
  22.156 +*   블랙베리 10
  22.157 +*   iOS
  22.158 +*   Tizen
  22.159 +*   Windows Phone 7과 8
  22.160 +*   윈도우 8
  22.161 +
  22.162 +### 빠른 예제
  22.163 +
  22.164 +    / / 안 드 로이드: (문자열로 다시!) 임의의 64 비트 정수를 반환 합니다 / / 정수 장치의 첫 번째 부팅에서 생성 / / / / 블랙베리: 디바이스의 핀 번호를 반환 합니다 / / 이것은 9 자리 고유 정수 (문자열로 비록!) / / / / 아이폰: (UIDevice 클래스 설명서에서 읊 었) / / 문자열 여러 하드웨어에서 생성 하는 해시 값을 식별 하는 반환 합니다.
  22.165 +    / 그것은 모든 장치에 대 한 고유 해야 보장 되 고 묶일 수 없습니다 / / / 사용자 계정에.
  22.166 +    / / Windows Phone 7: 장치 + 현재 사용자의 해시를 반환 합니다 / / 사용자 정의 되지 않은 경우 guid 생성 되 고 응용 프로그램을 제거할 때까지 유지 됩니다 / / Tizen: 반환 장치 IMEI (국제 모바일 기기 식별 또는 IMEI 숫자입니다 / / 모든 GSM와 UMTS 휴대 전화 고유.
  22.167 +    var deviceID = device.uuid;
  22.168 +    
  22.169 +
  22.170 +### iOS 특질
  22.171 +
  22.172 +`uuid`ios 장치에 고유 하지 않습니다 하지만 각 설치에 대 한 응용 프로그램 마다 다릅니다. 삭제 하 고 다시 애플 리 케이 션을 설치 하는 경우 변경 가능 하 게 또한 iOS를 업그레이드 하거나 때 버전 (iOS 5.1에에서 명백한) 당 응용 프로그램 업그레이드도 하 고. `uuid`은 신뢰할 수 있는 값이 아닙니다.
  22.173 +
  22.174 +### Windows Phone 7, 8 특수
  22.175 +
  22.176 +`uuid`Windows Phone 7 필요 허가 `ID_CAP_IDENTITY_DEVICE` . Microsoft는 곧이 속성을 세웁니다 가능성이 것입니다. 기능을 사용할 수 없는 경우 응용 프로그램 장치에 응용 프로그램의 설치 하는 동안 유지 하는 영구 guid를 생성 합니다.
  22.177 +
  22.178 +## device.version
  22.179 +
  22.180 +운영 체제 버전을 얻을.
  22.181 +
  22.182 +    var string = device.version;
  22.183 +    
  22.184 +
  22.185 +### 지원 되는 플랫폼
  22.186 +
  22.187 +*   안 드 로이드 2.1 +
  22.188 +*   블랙베리 10
  22.189 +*   브라우저
  22.190 +*   iOS
  22.191 +*   Tizen
  22.192 +*   Windows Phone 7과 8
  22.193 +*   윈도우 8
  22.194 +
  22.195 +### 빠른 예제
  22.196 +
  22.197 +    // Android:    Froyo OS would return "2.2"
  22.198 +    //             Eclair OS would return "2.1", "2.0.1", or "2.0"
  22.199 +    //             Version can also return update level "2.1-update1"
  22.200 +    //
  22.201 +    // BlackBerry: Torch 9800 using OS 6.0 would return "6.0.0.600"
  22.202 +    //
  22.203 +    // Browser:    Returns version number for the browser
  22.204 +    //
  22.205 +    // iPhone:     iOS 3.2 returns "3.2"
  22.206 +    //
  22.207 +    // Windows Phone 7: returns current OS version number, ex. on Mango returns 7.10.7720
  22.208 +    // Tizen: returns "TIZEN_20120425_2"
  22.209 +    var deviceVersion = device.version;
  22.210 \ No newline at end of file
    23.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    23.2 +++ b/Touchgui/plugins/org.apache.cordova.device/doc/pl/index.md	Thu Jun 04 14:50:33 2015 +0200
    23.3 @@ -0,0 +1,206 @@
    23.4 +<!---
    23.5 +    Licensed to the Apache Software Foundation (ASF) under one
    23.6 +    or more contributor license agreements.  See the NOTICE file
    23.7 +    distributed with this work for additional information
    23.8 +    regarding copyright ownership.  The ASF licenses this file
    23.9 +    to you under the Apache License, Version 2.0 (the
   23.10 +    "License"); you may not use this file except in compliance
   23.11 +    with the License.  You may obtain a copy of the License at
   23.12 +
   23.13 +      http://www.apache.org/licenses/LICENSE-2.0
   23.14 +
   23.15 +    Unless required by applicable law or agreed to in writing,
   23.16 +    software distributed under the License is distributed on an
   23.17 +    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
   23.18 +    KIND, either express or implied.  See the License for the
   23.19 +    specific language governing permissions and limitations
   23.20 +    under the License.
   23.21 +-->
   23.22 +
   23.23 +# org.apache.cordova.device
   23.24 +
   23.25 +Ten plugin określa globalne `device` obiekt, który opisuje urządzenia sprzętowe i programowe. Mimo, że obiekt jest w globalnym zasięgu, nie jest dostępne dopiero po `deviceready` zdarzenie.
   23.26 +
   23.27 +    document.addEventListener("deviceready", onDeviceReady, false);
   23.28 +    function onDeviceReady() {
   23.29 +        console.log(device.cordova);
   23.30 +    }
   23.31 +    
   23.32 +
   23.33 +## Instalacja
   23.34 +
   23.35 +    cordova plugin add org.apache.cordova.device
   23.36 +    
   23.37 +
   23.38 +## Właściwości
   23.39 +
   23.40 +*   device.cordova
   23.41 +*   device.model
   23.42 +*   device.platform
   23.43 +*   device.uuid
   23.44 +*   device.version
   23.45 +
   23.46 +## device.cordova
   23.47 +
   23.48 +Pobierz wersję Cordova działa na urządzeniu.
   23.49 +
   23.50 +### Obsługiwane platformy
   23.51 +
   23.52 +*   Amazon Fire OS
   23.53 +*   Android
   23.54 +*   BlackBerry 10
   23.55 +*   Przeglądarka
   23.56 +*   Firefox OS
   23.57 +*   iOS
   23.58 +*   Tizen
   23.59 +*   Windows Phone 7 i 8
   23.60 +*   Windows 8
   23.61 +
   23.62 +## device.model
   23.63 +
   23.64 +`device.model`Zwraca nazwę modelu lub produktu. Wartość jest zestaw przez producenta urządzenia i mogą się różnić między wersjami tego samego produktu.
   23.65 +
   23.66 +### Obsługiwane platformy
   23.67 +
   23.68 +*   Android
   23.69 +*   BlackBerry 10
   23.70 +*   Przeglądarka
   23.71 +*   iOS
   23.72 +*   Tizen
   23.73 +*   Windows Phone 7 i 8
   23.74 +*   Windows 8
   23.75 +
   23.76 +### Szybki przykład
   23.77 +
   23.78 +    // Android:    Nexus One       returns "Passion" (Nexus One code name)
   23.79 +    //             Motorola Droid  returns "voles"
   23.80 +    // BlackBerry: Torch 9800      returns "9800"
   23.81 +    // Browser:    Google Chrome   returns "Chrome"
   23.82 +    //             Safari          returns "Safari"
   23.83 +    // iOS:     for the iPad Mini, returns iPad2,5; iPhone 5 is iPhone 5,1. Zobacz http://theiphonewiki.com/wiki/index.php?title=Models / / modelu var = device.model;
   23.84 +    
   23.85 +
   23.86 +### Dziwactwa Androida
   23.87 +
   23.88 +*   Pobiera [nazwę produktu][1] zamiast [nazwy modelu][2], który często jest nazwą kod produkcji. Na przykład, Nexus One zwraca `Passion` , i zwraca Motorola Droid`voles`.
   23.89 +
   23.90 + [1]: http://developer.android.com/reference/android/os/Build.html#PRODUCT
   23.91 + [2]: http://developer.android.com/reference/android/os/Build.html#MODEL
   23.92 +
   23.93 +### Dziwactwa Tizen
   23.94 +
   23.95 +*   Zwraca modelu urządzenia przypisane przez dostawcę, na przykład,`TIZEN`
   23.96 +
   23.97 +### Windows Phone 7 i 8 dziwactwa
   23.98 +
   23.99 +*   Zwraca modelu urządzenia, określonej przez producenta. Na przykład Samsung ostrości zwraca`SGH-i917`.
  23.100 +
  23.101 +## device.platform
  23.102 +
  23.103 +Uzyskać nazwę systemu operacyjnego urządzenia.
  23.104 +
  23.105 +    var string = device.platform;
  23.106 +    
  23.107 +
  23.108 +### Obsługiwane platformy
  23.109 +
  23.110 +*   Android
  23.111 +*   BlackBerry 10
  23.112 +*   Browser4
  23.113 +*   Firefox OS
  23.114 +*   iOS
  23.115 +*   Tizen
  23.116 +*   Windows Phone 7 i 8
  23.117 +*   Windows 8
  23.118 +
  23.119 +### Szybki przykład
  23.120 +
  23.121 +    // Depending on the device, a few examples are:
  23.122 +    //   - "Android"
  23.123 +    //   - "BlackBerry 10"
  23.124 +    //   - Browser:         returns "MacIntel" on Mac
  23.125 +    //                      returns "Win32" on Windows
  23.126 +    //   - "iOS"
  23.127 +    //   - "WinCE"
  23.128 +    //   - "Tizen"
  23.129 +    var devicePlatform = device.platform;
  23.130 +    
  23.131 +
  23.132 +### Dziwactwa Windows Phone 7
  23.133 +
  23.134 +Urządzenia Windows Phone 7 raport platformy jako`WinCE`.
  23.135 +
  23.136 +### Windows Phone 8 dziwactwa
  23.137 +
  23.138 +Urządzenia Windows Phone 8 raport platformy jako`Win32NT`.
  23.139 +
  23.140 +## device.uuid
  23.141 +
  23.142 +Się urządzenia uniwersalnie unikatowy identyfikator ([UUID][3]).
  23.143 +
  23.144 + [3]: http://en.wikipedia.org/wiki/Universally_Unique_Identifier
  23.145 +
  23.146 +    var string = device.uuid;
  23.147 +    
  23.148 +
  23.149 +### Opis
  23.150 +
  23.151 +Szczegóły jak UUID jest generowane są określane przez producenta urządzenia i są specyficzne dla platformy lub modelu urządzenia.
  23.152 +
  23.153 +### Obsługiwane platformy
  23.154 +
  23.155 +*   Android
  23.156 +*   BlackBerry 10
  23.157 +*   iOS
  23.158 +*   Tizen
  23.159 +*   Windows Phone 7 i 8
  23.160 +*   Windows 8
  23.161 +
  23.162 +### Szybki przykład
  23.163 +
  23.164 +    / / Android: zwraca losowe 64-bitowa liczba całkowita (jako ciąg, znowu!) / / liczba całkowita jest generowany na pierwszego uruchomienia urządzenia / / / / BlackBerry: zwraca numer PIN urządzenia / / to jest unikatową liczbą całkowitą dziewięciu cyfr (jako ciąg, choć!) / / / / iPhone: (zacytowana w dokumentacji klasy UIDevice) / / zwraca ciąg wartości mieszania utworzone z wielu sprzętu identyfikuje.
  23.165 +    Zapewniona jest unikatowy dla każdego urządzenia i nie może być związane z / do konta użytkownika.
  23.166 +    / / Windows Phone 7: zwraca wartość mieszania urządzenia + bieżący użytkownik, / / jeśli nie zdefiniowane przez użytkownika, identyfikator guid jest generowany i będzie trwać do czasu odinstalowania aplikacji / / Tizen: zwraca urządzenia IMEI (International Mobile Equipment Identity lub IMEI jest liczbą / / unikatowe dla każdego telefonu komórkowego GSM i UMTS.
  23.167 +    var deviceID = device.uuid;
  23.168 +    
  23.169 +
  23.170 +### iOS dziwactwo
  23.171 +
  23.172 +`uuid`Na iOS nie jest przypisany do urządzenia, ale różni się dla każdej aplikacji, dla każdej instalacji. Zmienia się jeśli możesz usunąć i ponownie zainstalować aplikację, a ewentualnie także po aktualizacji iOS czy nawet uaktualnienia aplikacji dla wersji (widoczny w iOS 5.1). `uuid`Jest nie wiarygodne wartości.
  23.173 +
  23.174 +### Windows Phone 7 i 8 dziwactwa
  23.175 +
  23.176 +`uuid`Dla Windows Phone 7 wymaga uprawnień `ID_CAP_IDENTITY_DEVICE` . Microsoft będzie prawdopodobnie potępiać ten wkrótce. Jeśli funkcja nie jest dostępna, aplikacja generuje trwałe identyfikator guid, który jest utrzymywany przez czas trwania instalacji aplikacji na urządzeniu.
  23.177 +
  23.178 +## device.version
  23.179 +
  23.180 +Pobierz wersję systemu operacyjnego.
  23.181 +
  23.182 +    var string = device.version;
  23.183 +    
  23.184 +
  23.185 +### Obsługiwane platformy
  23.186 +
  23.187 +*   Android 2.1 +
  23.188 +*   BlackBerry 10
  23.189 +*   Przeglądarka
  23.190 +*   iOS
  23.191 +*   Tizen
  23.192 +*   Windows Phone 7 i 8
  23.193 +*   Windows 8
  23.194 +
  23.195 +### Szybki przykład
  23.196 +
  23.197 +    // Android:    Froyo OS would return "2.2"
  23.198 +    //             Eclair OS would return "2.1", "2.0.1", or "2.0"
  23.199 +    //             Version can also return update level "2.1-update1"
  23.200 +    //
  23.201 +    // BlackBerry: Torch 9800 using OS 6.0 would return "6.0.0.600"
  23.202 +    //
  23.203 +    // Browser:    Returns version number for the browser
  23.204 +    //
  23.205 +    // iPhone:     iOS 3.2 returns "3.2"
  23.206 +    //
  23.207 +    // Windows Phone 7: returns current OS version number, ex. on Mango returns 7.10.7720
  23.208 +    // Tizen: returns "TIZEN_20120425_2"
  23.209 +    var deviceVersion = device.version;
  23.210 \ No newline at end of file
    24.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    24.2 +++ b/Touchgui/plugins/org.apache.cordova.device/doc/ru/index.md	Thu Jun 04 14:50:33 2015 +0200
    24.3 @@ -0,0 +1,219 @@
    24.4 +<!---
    24.5 +    Licensed to the Apache Software Foundation (ASF) under one
    24.6 +    or more contributor license agreements.  See the NOTICE file
    24.7 +    distributed with this work for additional information
    24.8 +    regarding copyright ownership.  The ASF licenses this file
    24.9 +    to you under the Apache License, Version 2.0 (the
   24.10 +    "License"); you may not use this file except in compliance
   24.11 +    with the License.  You may obtain a copy of the License at
   24.12 +
   24.13 +      http://www.apache.org/licenses/LICENSE-2.0
   24.14 +
   24.15 +    Unless required by applicable law or agreed to in writing,
   24.16 +    software distributed under the License is distributed on an
   24.17 +    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
   24.18 +    KIND, either express or implied.  See the License for the
   24.19 +    specific language governing permissions and limitations
   24.20 +    under the License.
   24.21 +-->
   24.22 +
   24.23 +# org.apache.cordova.device
   24.24 +
   24.25 +Этот плагин определяет глобальный объект `device`, который описывает оборудование и программное обеспечение устройства. Несмотря на то что объект в глобальной области видимости, он не доступен до того момента пока не произойдет событие `deviceready`.
   24.26 +
   24.27 +    document.addEventListener("deviceready", onDeviceReady, false);
   24.28 +    function onDeviceReady() {
   24.29 +        console.log(device.cordova);
   24.30 +    }
   24.31 +    
   24.32 +
   24.33 +## Установка
   24.34 +
   24.35 +    cordova plugin add org.apache.cordova.device
   24.36 +    
   24.37 +
   24.38 +## Параметры
   24.39 +
   24.40 +*   device.cordova
   24.41 +*   device.model
   24.42 +*   device.platform
   24.43 +*   device.uuid
   24.44 +*   device.version
   24.45 +
   24.46 +## device.cordova
   24.47 +
   24.48 +Возвращает версию Cordova, работающую на устройстве.
   24.49 +
   24.50 +### Поддерживаемые платформы
   24.51 +
   24.52 +*   Amazon Fire OS
   24.53 +*   Android
   24.54 +*   BlackBerry 10
   24.55 +*   Обозреватель
   24.56 +*   Firefox OS
   24.57 +*   iOS
   24.58 +*   Tizen
   24.59 +*   Windows Phone 7 и 8
   24.60 +*   Windows 8
   24.61 +
   24.62 +## device.model
   24.63 +
   24.64 +Свойство `device.model` возвращает имя устройства модели или продукта. Значение устанавливается производителем устройства и могут отличаться в разных версиях одного и того же продукта.
   24.65 +
   24.66 +### Поддерживаемые платформы
   24.67 +
   24.68 +*   Android
   24.69 +*   BlackBerry 10
   24.70 +*   Обозреватель
   24.71 +*   iOS
   24.72 +*   Tizen
   24.73 +*   Windows Phone 7 и 8
   24.74 +*   Windows 8
   24.75 +
   24.76 +### Краткий пример
   24.77 +
   24.78 +    // Android:    Nexus One       returns "Passion" (Nexus One code name)
   24.79 +    //             Motorola Droid  returns "voles"
   24.80 +    // BlackBerry: Torch 9800      returns "9800"
   24.81 +    // Browser:    Google Chrome   returns "Chrome"
   24.82 +    //             Safari          returns "Safari"
   24.83 +    // iOS:     for the iPad Mini, returns iPad2,5; iPhone 5 is iPhone 5,1. See http://theiphonewiki.com/wiki/index.php?title=Models
   24.84 +    //
   24.85 +    var model = device.model;
   24.86 +    
   24.87 +
   24.88 +### Особенности Android
   24.89 +
   24.90 +*   Возвращает [имя продукта][1] , а не [имя модели][2], которое часто является производственным кодом. Например, Nexus One из них возвращает `Passion` , и Motorola Droid возвращает `voles`.
   24.91 +
   24.92 + [1]: http://developer.android.com/reference/android/os/Build.html#PRODUCT
   24.93 + [2]: http://developer.android.com/reference/android/os/Build.html#MODEL
   24.94 +
   24.95 +### Особенности Tizen
   24.96 +
   24.97 +*   Возвращает модель устройства, назначенного вендором, например,`TIZEN`
   24.98 +
   24.99 +### Особенности Windows Phone 7 и 8
  24.100 +
  24.101 +*   Возвращает модель устройства, указанной заводом-изготовителем. Например Samsung Focus возвращает `SGH-i917`.
  24.102 +
  24.103 +## device.platform
  24.104 +
  24.105 +Получите имя операционной системы устройства.
  24.106 +
  24.107 +    var string = device.platform;
  24.108 +    
  24.109 +
  24.110 +### Поддерживаемые платформы
  24.111 +
  24.112 +*   Android
  24.113 +*   BlackBerry 10
  24.114 +*   Браузером4
  24.115 +*   Firefox OS
  24.116 +*   iOS
  24.117 +*   Tizen
  24.118 +*   Windows Phone 7 и 8
  24.119 +*   Windows 8
  24.120 +
  24.121 +### Краткий пример
  24.122 +
  24.123 +    // Depending on the device, a few examples are:
  24.124 +    //   - "Android"
  24.125 +    //   - "BlackBerry 10"
  24.126 +    //   - Browser:         returns "MacIntel" on Mac
  24.127 +    //                      returns "Win32" on Windows
  24.128 +    //   - "iOS"
  24.129 +    //   - "WinCE"
  24.130 +    //   - "Tizen"
  24.131 +    var devicePlatform = device.platform;
  24.132 +    
  24.133 +
  24.134 +### Особенности Windows Phone 7
  24.135 +
  24.136 +Windows Phone 7 устройства сообщают платформу как `WinCE`.
  24.137 +
  24.138 +### Особенности Windows Phone 8
  24.139 +
  24.140 +Устройства Windows Phone 8 сообщают платформу как `Win32NT`.
  24.141 +
  24.142 +## device.uuid
  24.143 +
  24.144 +Возвращает универсальный уникального идентификатора ([UUID][3] устройства).
  24.145 +
  24.146 + [3]: http://en.wikipedia.org/wiki/Universally_Unique_Identifier
  24.147 +
  24.148 +    var string = device.uuid;
  24.149 +    
  24.150 +
  24.151 +### Описание
  24.152 +
  24.153 +Подробная информация о том как UUID генерируется, определяются изготовителем устройства и являются специфическими для платформы или модели устройства.
  24.154 +
  24.155 +### Поддерживаемые платформы
  24.156 +
  24.157 +*   Android
  24.158 +*   BlackBerry 10
  24.159 +*   iOS
  24.160 +*   Tizen
  24.161 +*   Windows Phone 7 и 8
  24.162 +*   Windows 8
  24.163 +
  24.164 +### Краткий пример
  24.165 +
  24.166 +    // Android: Возвращает случайное 64-разрядное целое число (в виде строки, опять!) 
  24.167 +    // целое число генерируется при первой загрузке устройства 
  24.168 +    //
  24.169 +    // BlackBerry: Возвращает номер PIN устройства 
  24.170 +    // это 9 значный уникальный целочисленный (как строка, хотя!) 
  24.171 +    // 
  24.172 +    // iPhone: (Перефразировано из документации класса UIDevice) 
  24.173 +    // возвращает строку хэш-значения, созданные из нескольких аппаратных определяет.
  24.174 +    // Это значение гарантированно является уникальным для каждого устройства и не может быть привязано 
  24.175 +    // к учетной записи пользователя.
  24.176 +    // Windows Phone 7: Возвращает хэш устройство + текущего пользователя, 
  24.177 +    // если пользователь не определен, формируется guid который и будет сохраняться до тех пор, пока приложение не удалиться 
  24.178 +    // Tizen: возвращает IMEI устройства (Международный идентификатор мобильного оборудования или IMEI это число 
  24.179 +    // уникальное для каждого мобильного телефона GSM и UMTS.
  24.180 +    var deviceID = device.uuid;
  24.181 +    
  24.182 +
  24.183 +### Особенности iOS
  24.184 +
  24.185 +На iOS `uuid` не является уникальным для устройства, но варьируется для каждого приложения, и для каждой установки. Значение меняется, если удалить и повторно установить приложение, и возможно также когда вы обновите iOS, или даже обновить приложение до следующей версии (очевидно в iOS 5.1). Значение `uuid` не является надежным.
  24.186 +
  24.187 +### Особенности Windows Phone 7 и 8
  24.188 +
  24.189 +Для Windows Phone 7 `uuid` требует разрешения `ID_CAP_IDENTITY_DEVICE` . Microsoft скорее всего скоро сделает это свойство устаревшим. Если возможность недоступна, приложение создает постоянные guid, который сохраняется на все время установки приложения на устройстве.
  24.190 +
  24.191 +## device.version
  24.192 +
  24.193 +Возвращает версию операционной системы.
  24.194 +
  24.195 +    var string = device.version;
  24.196 +    
  24.197 +
  24.198 +### Поддерживаемые платформы
  24.199 +
  24.200 +*   Android 2.1 +
  24.201 +*   BlackBerry 10
  24.202 +*   Обозреватель
  24.203 +*   iOS
  24.204 +*   Tizen
  24.205 +*   Windows Phone 7 и 8
  24.206 +*   Windows 8
  24.207 +
  24.208 +### Краткий пример
  24.209 +
  24.210 +    // Android:    Froyo OS would return "2.2"
  24.211 +    //             Eclair OS would return "2.1", "2.0.1", or "2.0"
  24.212 +    //             Version can also return update level "2.1-update1"
  24.213 +    //
  24.214 +    // BlackBerry: Torch 9800 using OS 6.0 would return "6.0.0.600"
  24.215 +    //
  24.216 +    // Browser:    Returns version number for the browser
  24.217 +    //
  24.218 +    // iPhone:     iOS 3.2 returns "3.2"
  24.219 +    //
  24.220 +    // Windows Phone 7: returns current OS version number, ex. on Mango returns 7.10.7720
  24.221 +    // Tizen: returns "TIZEN_20120425_2"
  24.222 +    var deviceVersion = device.version;
  24.223 \ No newline at end of file
    25.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    25.2 +++ b/Touchgui/plugins/org.apache.cordova.device/doc/zh/index.md	Thu Jun 04 14:50:33 2015 +0200
    25.3 @@ -0,0 +1,206 @@
    25.4 +<!---
    25.5 +    Licensed to the Apache Software Foundation (ASF) under one
    25.6 +    or more contributor license agreements.  See the NOTICE file
    25.7 +    distributed with this work for additional information
    25.8 +    regarding copyright ownership.  The ASF licenses this file
    25.9 +    to you under the Apache License, Version 2.0 (the
   25.10 +    "License"); you may not use this file except in compliance
   25.11 +    with the License.  You may obtain a copy of the License at
   25.12 +
   25.13 +      http://www.apache.org/licenses/LICENSE-2.0
   25.14 +
   25.15 +    Unless required by applicable law or agreed to in writing,
   25.16 +    software distributed under the License is distributed on an
   25.17 +    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
   25.18 +    KIND, either express or implied.  See the License for the
   25.19 +    specific language governing permissions and limitations
   25.20 +    under the License.
   25.21 +-->
   25.22 +
   25.23 +# org.apache.cordova.device
   25.24 +
   25.25 +這個外掛程式定義全球 `device` 物件,描述該設備的硬體和軟體。 雖然物件是在全球範圍內,但不是可用,直到後 `deviceready` 事件。
   25.26 +
   25.27 +    document.addEventListener("deviceready", onDeviceReady, false);
   25.28 +    function onDeviceReady() {
   25.29 +        console.log(device.cordova);
   25.30 +    }
   25.31 +    
   25.32 +
   25.33 +## 安裝
   25.34 +
   25.35 +    cordova plugin add org.apache.cordova.device
   25.36 +    
   25.37 +
   25.38 +## 屬性
   25.39 +
   25.40 +*   device.cordova
   25.41 +*   device.model
   25.42 +*   device.platform
   25.43 +*   device.uuid
   25.44 +*   device.version
   25.45 +
   25.46 +## device.cordova
   25.47 +
   25.48 +獲取科爾多瓦在設備上運行的版本。
   25.49 +
   25.50 +### 支援的平臺
   25.51 +
   25.52 +*   亞馬遜火 OS
   25.53 +*   Android 系統
   25.54 +*   黑莓 10
   25.55 +*   瀏覽器
   25.56 +*   火狐瀏覽器的作業系統
   25.57 +*   iOS
   25.58 +*   泰
   25.59 +*   Windows Phone 7 和 8
   25.60 +*   Windows 8
   25.61 +
   25.62 +## device.model
   25.63 +
   25.64 +`device.model`返回設備的模型或產品的名稱。值由設備製造商設置和同一產品的不同版本可能不同。
   25.65 +
   25.66 +### 支援的平臺
   25.67 +
   25.68 +*   Android 系統
   25.69 +*   黑莓 10
   25.70 +*   瀏覽器
   25.71 +*   iOS
   25.72 +*   泰
   25.73 +*   Windows Phone 7 和 8
   25.74 +*   Windows 8
   25.75 +
   25.76 +### 快速的示例
   25.77 +
   25.78 +    // Android:    Nexus One       returns "Passion" (Nexus One code name)
   25.79 +    //             Motorola Droid  returns "voles"
   25.80 +    // BlackBerry: Torch 9800      returns "9800"
   25.81 +    // Browser:    Google Chrome   returns "Chrome"
   25.82 +    //             Safari          returns "Safari"
   25.83 +    // iOS:     for the iPad Mini, returns iPad2,5; iPhone 5 is iPhone 5,1. 請參閱 HTTP://theiphonewiki.com/wiki/index.php?title=Models / / var 模型 = device.model ;
   25.84 +    
   25.85 +
   25.86 +### Android 的怪癖
   25.87 +
   25.88 +*   獲取[產品名稱][1]而不是[產品型號名稱][2],這往往是生產代碼名稱。 例如,Nexus One 返回 `Passion` ,和摩托羅拉 Droid 返回`voles`.
   25.89 +
   25.90 + [1]: http://developer.android.com/reference/android/os/Build.html#PRODUCT
   25.91 + [2]: http://developer.android.com/reference/android/os/Build.html#MODEL
   25.92 +
   25.93 +### Tizen 怪癖
   25.94 +
   25.95 +*   例如,返回與供應商指派的設備模型`TIZEN`
   25.96 +
   25.97 +### Windows Phone 7 和 8 怪癖
   25.98 +
   25.99 +*   返回由製造商指定的設備模型。例如,三星焦點返回`SGH-i917`.
  25.100 +
  25.101 +## device.platform
  25.102 +
  25.103 +獲取設備的作業系統名稱。
  25.104 +
  25.105 +    var string = device.platform;
  25.106 +    
  25.107 +
  25.108 +### 支援的平臺
  25.109 +
  25.110 +*   Android 系統
  25.111 +*   黑莓 10
  25.112 +*   Browser4
  25.113 +*   火狐瀏覽器的作業系統
  25.114 +*   iOS
  25.115 +*   泰
  25.116 +*   Windows Phone 7 和 8
  25.117 +*   Windows 8
  25.118 +
  25.119 +### 快速的示例
  25.120 +
  25.121 +    // Depending on the device, a few examples are:
  25.122 +    //   - "Android"
  25.123 +    //   - "BlackBerry 10"
  25.124 +    //   - Browser:         returns "MacIntel" on Mac
  25.125 +    //                      returns "Win32" on Windows
  25.126 +    //   - "iOS"
  25.127 +    //   - "WinCE"
  25.128 +    //   - "Tizen"
  25.129 +    var devicePlatform = device.platform;
  25.130 +    
  25.131 +
  25.132 +### Windows Phone 7 的怪癖
  25.133 +
  25.134 +Windows Phone 7 設備報告作為平臺`WinCE`.
  25.135 +
  25.136 +### Windows Phone 8 怪癖
  25.137 +
  25.138 +Windows Phone 8 設備報告作為平臺`Win32NT`.
  25.139 +
  25.140 +## device.uuid
  25.141 +
  25.142 +獲取設備的通用唯一識別碼 ([UUID][3]).
  25.143 +
  25.144 + [3]: http://en.wikipedia.org/wiki/Universally_Unique_Identifier
  25.145 +
  25.146 +    var string = device.uuid;
  25.147 +    
  25.148 +
  25.149 +### 說明
  25.150 +
  25.151 +如何生成一個 UUID 的細節由設備製造商和特定于設備的平臺或模型。
  25.152 +
  25.153 +### 支援的平臺
  25.154 +
  25.155 +*   Android 系統
  25.156 +*   黑莓 10
  25.157 +*   iOS
  25.158 +*   Tizen
  25.159 +*   Windows Phone 7 和 8
  25.160 +*   Windows 8
  25.161 +
  25.162 +### 快速的示例
  25.163 +
  25.164 +    / / Android: 一個隨機的 64 位整數 (作為字串返回,再次!) / / 上設備的第一次啟動生成的整數 / / / / 黑莓手機: 返回設備的 PIN 號碼 / / 這是九個數字的唯一整數 (作為字串,雖然!) / / / / iPhone: (從 UIDevice 類文檔解釋) / / 返回一個字串的雜湊值創建的多個硬體標識。
  25.165 +    / / 它保證是唯一的每個設備並不能綁 / / 到使用者帳戶。
  25.166 +    / / Windows Phone 7: 返回的雜湊代碼的設備 + 當前使用者,/ / 如果未定義使用者,則一個 guid 生成的並且將會保留直到卸載該應用程式 / / Tizen: 返回設備 IMEI (國際行動裝置身份或 IMEI 是一個數位 / / 獨有的每一個 UMTS 和 GSM 行動電話。
  25.167 +    var deviceID = device.uuid;
  25.168 +    
  25.169 +
  25.170 +### iOS 怪癖
  25.171 +
  25.172 +`uuid`在 iOS 不是唯一的一種裝置,但對於每個應用程式,為每個安裝而異。 如果您刪除並重新安裝該應用程式,它更改和可能還當你升級 iOS,或甚至升級每個版本 (iOS 5.1 中存在明顯的) 的應用程式。 `uuid`不是一個可靠的值。
  25.173 +
  25.174 +### Windows Phone 7 和 8 怪癖
  25.175 +
  25.176 +`uuid`為 Windows Phone 7 須經許可 `ID_CAP_IDENTITY_DEVICE` 。 Microsoft 可能會很快棄用此屬性。 如果沒有可用的能力,應用程式將生成設備上應用程式的安裝過程中保持持續的 guid。
  25.177 +
  25.178 +## device.version
  25.179 +
  25.180 +獲取作業系統版本。
  25.181 +
  25.182 +    var string = device.version;
  25.183 +    
  25.184 +
  25.185 +### 支援的平臺
  25.186 +
  25.187 +*   Android 2.1 +
  25.188 +*   黑莓 10
  25.189 +*   瀏覽器
  25.190 +*   iOS
  25.191 +*   泰
  25.192 +*   Windows Phone 7 和 8
  25.193 +*   Windows 8
  25.194 +
  25.195 +### 快速的示例
  25.196 +
  25.197 +    // Android:    Froyo OS would return "2.2"
  25.198 +    //             Eclair OS would return "2.1", "2.0.1", or "2.0"
  25.199 +    //             Version can also return update level "2.1-update1"
  25.200 +    //
  25.201 +    // BlackBerry: Torch 9800 using OS 6.0 would return "6.0.0.600"
  25.202 +    //
  25.203 +    // Browser:    Returns version number for the browser
  25.204 +    //
  25.205 +    // iPhone:     iOS 3.2 returns "3.2"
  25.206 +    //
  25.207 +    // Windows Phone 7: returns current OS version number, ex. on Mango returns 7.10.7720
  25.208 +    // Tizen: returns "TIZEN_20120425_2"
  25.209 +    var deviceVersion = device.version;
  25.210 \ No newline at end of file
    26.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    26.2 +++ b/Touchgui/plugins/org.apache.cordova.device/plugin.xml	Thu Jun 04 14:50:33 2015 +0200
    26.3 @@ -0,0 +1,168 @@
    26.4 +<?xml version="1.0" encoding="UTF-8"?>
    26.5 +<!--
    26.6 +  Licensed to the Apache Software Foundation (ASF) under one
    26.7 +  or more contributor license agreements.  See the NOTICE file
    26.8 +  distributed with this work for additional information
    26.9 +  regarding copyright ownership.  The ASF licenses this file
   26.10 +  to you under the Apache License, Version 2.0 (the
   26.11 +  "License"); you may not use this file except in compliance
   26.12 +  with the License.  You may obtain a copy of the License at
   26.13 +
   26.14 +    http://www.apache.org/licenses/LICENSE-2.0
   26.15 +
   26.16 +  Unless required by applicable law or agreed to in writing,
   26.17 +  software distributed under the License is distributed on an
   26.18 +  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
   26.19 +  KIND, either express or implied.  See the License for the
   26.20 +  specific language governing permissions and limitations
   26.21 +  under the License.
   26.22 +-->
   26.23 +
   26.24 +<plugin xmlns="http://apache.org/cordova/ns/plugins/1.0"
   26.25 +    xmlns:rim="http://www.blackberry.com/ns/widgets"
   26.26 +    xmlns:android="http://schemas.android.com/apk/res/android"
   26.27 +    id="org.apache.cordova.device"
   26.28 +    version="0.2.13">
   26.29 +    <name>Device</name>
   26.30 +    <description>Cordova Device Plugin</description>
   26.31 +    <license>Apache 2.0</license>
   26.32 +    <keywords>cordova,device</keywords>
   26.33 +    <repo>https://git-wip-us.apache.org/repos/asf/cordova-plugin-device.git</repo>
   26.34 +    <issue>https://issues.apache.org/jira/browse/CB/component/12320648</issue>
   26.35 +
   26.36 +    <js-module src="www/device.js" name="device">
   26.37 +        <clobbers target="device" />
   26.38 +    </js-module>
   26.39 +
   26.40 +    <!-- firefoxos -->
   26.41 +    <platform name="firefoxos">
   26.42 +        <config-file target="config.xml" parent="/*">
   26.43 +            <feature name="Device">
   26.44 +                <param name="firefoxos-package" value="Device" />
   26.45 +            </feature>
   26.46 +        </config-file>
   26.47 +
   26.48 +        <js-module src="src/firefoxos/DeviceProxy.js" name="DeviceProxy">
   26.49 +            <runs />
   26.50 +        </js-module>
   26.51 +    </platform>
   26.52 +
   26.53 +    <!-- tizen -->
   26.54 +    <platform name="tizen">
   26.55 +        <js-module src="src/tizen/DeviceProxy.js" name="DeviceProxy">
   26.56 +            <runs />
   26.57 +        </js-module>
   26.58 +    </platform>
   26.59 +
   26.60 +    <!-- android -->
   26.61 +    <platform name="android">
   26.62 +        <config-file target="res/xml/config.xml" parent="/*">
   26.63 +            <feature name="Device" >
   26.64 +                <param name="android-package" value="org.apache.cordova.device.Device"/>
   26.65 +            </feature>
   26.66 +        </config-file>
   26.67 +
   26.68 +        <source-file src="src/android/Device.java" target-dir="src/org/apache/cordova/device" />
   26.69 +    </platform>
   26.70 +
   26.71 +    <!-- amazon-fireos -->
   26.72 +    <platform name="amazon-fireos">
   26.73 +        <config-file target="res/xml/config.xml" parent="/*">
   26.74 +            <feature name="Device" >
   26.75 +                <param name="android-package" value="org.apache.cordova.device.Device"/>
   26.76 +            </feature>
   26.77 +        </config-file>
   26.78 +
   26.79 +        <source-file src="src/android/Device.java" target-dir="src/org/apache/cordova/device" />
   26.80 +    </platform>
   26.81 +    
   26.82 +    <!-- ubuntu -->
   26.83 +    <platform name="ubuntu">
   26.84 +        <header-file src="src/ubuntu/device.h" />
   26.85 +        <source-file src="src/ubuntu/device.cpp" />
   26.86 +        <js-module src="src/ubuntu/device.js" name="DeviceProxy">
   26.87 +            <merges target="device" />
   26.88 +        </js-module>
   26.89 +    </platform>
   26.90 +
   26.91 +    <!-- ios -->
   26.92 +    <platform name="ios">
   26.93 +        <config-file target="config.xml" parent="/*">
   26.94 +            <feature name="Device">
   26.95 +                <param name="ios-package" value="CDVDevice"/>
   26.96 +            </feature>
   26.97 +        </config-file>
   26.98 +
   26.99 +        <header-file src="src/ios/CDVDevice.h" />
  26.100 +        <source-file src="src/ios/CDVDevice.m" />
  26.101 +    </platform>
  26.102 +
  26.103 +    <!-- blackberry10 -->
  26.104 +    <platform name="blackberry10">
  26.105 +        <source-file src="src/blackberry10/index.js" target-dir="Device" />
  26.106 +        <config-file target="www/config.xml" parent="/widget">
  26.107 +            <feature name="Device" value="Device"/>
  26.108 +        </config-file>
  26.109 +        <config-file target="www/config.xml" parent="/widget/rim:permissions">
  26.110 +            <rim:permit>read_device_identifying_information</rim:permit>
  26.111 +        </config-file>
  26.112 +    </platform>
  26.113 +
  26.114 +    <!-- wp7 -->
  26.115 +    <platform name="wp7">
  26.116 +        <config-file target="config.xml" parent="/*">
  26.117 +            <feature name="Device">
  26.118 +                <param name="wp-package" value="Device"/>
  26.119 +            </feature>
  26.120 +        </config-file>
  26.121 +
  26.122 +        <config-file target="Properties/WMAppManifest.xml" parent="/Deployment/App/Capabilities">
  26.123 +            <Capability Name="ID_CAP_IDENTITY_DEVICE" />
  26.124 +        </config-file>
  26.125 +
  26.126 +        <source-file src="src/wp/Device.cs" />
  26.127 +    </platform>
  26.128 +
  26.129 +    <!-- wp8 -->
  26.130 +    <platform name="wp8">
  26.131 +        <config-file target="config.xml" parent="/*">
  26.132 +            <feature name="Device">
  26.133 +                <param name="wp-package" value="Device"/>
  26.134 +            </feature>
  26.135 +        </config-file>
  26.136 +
  26.137 +        <config-file target="Properties/WMAppManifest.xml" parent="/Deployment/App/Capabilities">
  26.138 +            <Capability Name="ID_CAP_IDENTITY_DEVICE" />
  26.139 +        </config-file>
  26.140 +
  26.141 +        <source-file src="src/wp/Device.cs" />
  26.142 +    </platform>
  26.143 +
  26.144 +    <!-- windows8 -->
  26.145 +    <platform name="windows8">
  26.146 +        <js-module src="src/windows8/DeviceProxy.js" name="DeviceProxy">
  26.147 +            <merges target="" />
  26.148 +        </js-module>
  26.149 +    </platform>
  26.150 +
  26.151 +    <!-- windows -->
  26.152 +    <platform name="windows">
  26.153 +        <js-module src="src/windows/DeviceProxy.js" name="DeviceProxy">
  26.154 +            <merges target="" />
  26.155 +        </js-module>
  26.156 +    </platform>
  26.157 +
  26.158 +    <!-- browser -->
  26.159 +    <platform name="browser">
  26.160 +        <config-file target="config.xml" parent="/*">
  26.161 +            <feature name="Device">
  26.162 +                <param name="browser-package" value="Device" />
  26.163 +            </feature>
  26.164 +        </config-file>
  26.165 +
  26.166 +        <js-module src="src/browser/DeviceProxy.js" name="DeviceProxy">
  26.167 +            <runs />
  26.168 +        </js-module>
  26.169 +    </platform>
  26.170 +
  26.171 +</plugin>
    27.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    27.2 +++ b/Touchgui/plugins/org.apache.cordova.device/src/android/Device.java	Thu Jun 04 14:50:33 2015 +0200
    27.3 @@ -0,0 +1,156 @@
    27.4 +/*
    27.5 +       Licensed to the Apache Software Foundation (ASF) under one
    27.6 +       or more contributor license agreements.  See the NOTICE file
    27.7 +       distributed with this work for additional information
    27.8 +       regarding copyright ownership.  The ASF licenses this file
    27.9 +       to you under the Apache License, Version 2.0 (the
   27.10 +       "License"); you may not use this file except in compliance
   27.11 +       with the License.  You may obtain a copy of the License at
   27.12 +
   27.13 +         http://www.apache.org/licenses/LICENSE-2.0
   27.14 +
   27.15 +       Unless required by applicable law or agreed to in writing,
   27.16 +       software distributed under the License is distributed on an
   27.17 +       "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
   27.18 +       KIND, either express or implied.  See the License for the
   27.19 +       specific language governing permissions and limitations
   27.20 +       under the License.
   27.21 +*/
   27.22 +package org.apache.cordova.device;
   27.23 +
   27.24 +import java.util.TimeZone;
   27.25 +
   27.26 +import org.apache.cordova.CordovaWebView;
   27.27 +import org.apache.cordova.CallbackContext;
   27.28 +import org.apache.cordova.CordovaPlugin;
   27.29 +import org.apache.cordova.CordovaInterface;
   27.30 +import org.json.JSONArray;
   27.31 +import org.json.JSONException;
   27.32 +import org.json.JSONObject;
   27.33 +
   27.34 +import android.provider.Settings;
   27.35 +
   27.36 +public class Device extends CordovaPlugin {
   27.37 +    public static final String TAG = "Device";
   27.38 +
   27.39 +    public static String platform;                            // Device OS
   27.40 +    public static String uuid;                                // Device UUID
   27.41 +
   27.42 +    private static final String ANDROID_PLATFORM = "Android";
   27.43 +    private static final String AMAZON_PLATFORM = "amazon-fireos";
   27.44 +    private static final String AMAZON_DEVICE = "Amazon";
   27.45 +
   27.46 +    /**
   27.47 +     * Constructor.
   27.48 +     */
   27.49 +    public Device() {
   27.50 +    }
   27.51 +
   27.52 +    /**
   27.53 +     * Sets the context of the Command. This can then be used to do things like
   27.54 +     * get file paths associated with the Activity.
   27.55 +     *
   27.56 +     * @param cordova The context of the main Activity.
   27.57 +     * @param webView The CordovaWebView Cordova is running in.
   27.58 +     */
   27.59 +    public void initialize(CordovaInterface cordova, CordovaWebView webView) {
   27.60 +        super.initialize(cordova, webView);
   27.61 +        Device.uuid = getUuid();
   27.62 +    }
   27.63 +
   27.64 +    /**
   27.65 +     * Executes the request and returns PluginResult.
   27.66 +     *
   27.67 +     * @param action            The action to execute.
   27.68 +     * @param args              JSONArry of arguments for the plugin.
   27.69 +     * @param callbackContext   The callback id used when calling back into JavaScript.
   27.70 +     * @return                  True if the action was valid, false if not.
   27.71 +     */
   27.72 +    public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException {
   27.73 +        if (action.equals("getDeviceInfo")) {
   27.74 +            JSONObject r = new JSONObject();
   27.75 +            r.put("uuid", Device.uuid);
   27.76 +            r.put("version", this.getOSVersion());
   27.77 +            r.put("platform", this.getPlatform());
   27.78 +            r.put("model", this.getModel());
   27.79 +            callbackContext.success(r);
   27.80 +        }
   27.81 +        else {
   27.82 +            return false;
   27.83 +        }
   27.84 +        return true;
   27.85 +    }
   27.86 +
   27.87 +    //--------------------------------------------------------------------------
   27.88 +    // LOCAL METHODS
   27.89 +    //--------------------------------------------------------------------------
   27.90 +
   27.91 +    /**
   27.92 +     * Get the OS name.
   27.93 +     * 
   27.94 +     * @return
   27.95 +     */
   27.96 +    public String getPlatform() {
   27.97 +        String platform;
   27.98 +        if (isAmazonDevice()) {
   27.99 +            platform = AMAZON_PLATFORM;
  27.100 +        } else {
  27.101 +            platform = ANDROID_PLATFORM;
  27.102 +        }
  27.103 +        return platform;
  27.104 +    }
  27.105 +
  27.106 +    /**
  27.107 +     * Get the device's Universally Unique Identifier (UUID).
  27.108 +     *
  27.109 +     * @return
  27.110 +     */
  27.111 +    public String getUuid() {
  27.112 +        String uuid = Settings.Secure.getString(this.cordova.getActivity().getContentResolver(), android.provider.Settings.Secure.ANDROID_ID);
  27.113 +        return uuid;
  27.114 +    }
  27.115 +
  27.116 +    public String getModel() {
  27.117 +        String model = android.os.Build.MODEL;
  27.118 +        return model;
  27.119 +    }
  27.120 +
  27.121 +    public String getProductName() {
  27.122 +        String productname = android.os.Build.PRODUCT;
  27.123 +        return productname;
  27.124 +    }
  27.125 +
  27.126 +    /**
  27.127 +     * Get the OS version.
  27.128 +     *
  27.129 +     * @return
  27.130 +     */
  27.131 +    public String getOSVersion() {
  27.132 +        String osversion = android.os.Build.VERSION.RELEASE;
  27.133 +        return osversion;
  27.134 +    }
  27.135 +
  27.136 +    public String getSDKVersion() {
  27.137 +        @SuppressWarnings("deprecation")
  27.138 +        String sdkversion = android.os.Build.VERSION.SDK;
  27.139 +        return sdkversion;
  27.140 +    }
  27.141 +
  27.142 +    public String getTimeZoneID() {
  27.143 +        TimeZone tz = TimeZone.getDefault();
  27.144 +        return (tz.getID());
  27.145 +    }
  27.146 +
  27.147 +    /**
  27.148 +     * Function to check if the device is manufactured by Amazon
  27.149 +     * 
  27.150 +     * @return
  27.151 +     */
  27.152 +    public boolean isAmazonDevice() {
  27.153 +        if (android.os.Build.MANUFACTURER.equals(AMAZON_DEVICE)) {
  27.154 +            return true;
  27.155 +        }
  27.156 +        return false;
  27.157 +    }
  27.158 +
  27.159 +}
    28.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    28.2 +++ b/Touchgui/plugins/org.apache.cordova.device/src/blackberry10/index.js	Thu Jun 04 14:50:33 2015 +0200
    28.3 @@ -0,0 +1,68 @@
    28.4 +/*
    28.5 + *
    28.6 + * Licensed to the Apache Software Foundation (ASF) under one
    28.7 + * or more contributor license agreements.  See the NOTICE file
    28.8 + * distributed with this work for additional information
    28.9 + * regarding copyright ownership.  The ASF licenses this file
   28.10 + * to you under the Apache License, Version 2.0 (the
   28.11 + * "License"); you may not use this file except in compliance
   28.12 + * with the License.  You may obtain a copy of the License at
   28.13 + *
   28.14 + *   http://www.apache.org/licenses/LICENSE-2.0
   28.15 + *
   28.16 + * Unless required by applicable law or agreed to in writing,
   28.17 + * software distributed under the License is distributed on an
   28.18 + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
   28.19 + * KIND, either express or implied.  See the License for the
   28.20 + * specific language governing permissions and limitations
   28.21 + * under the License.
   28.22 + *
   28.23 +*/
   28.24 +
   28.25 +function getModelName () {
   28.26 +    var modelName = window.qnx.webplatform.device.modelName;
   28.27 +    //Pre 10.2 (meaning Z10 or Q10)
   28.28 +    if (typeof modelName === "undefined") {
   28.29 +        if (window.screen.height === 720 && window.screen.width === 720) {
   28.30 +            if ( window.matchMedia("(-blackberry-display-technology: -blackberry-display-oled)").matches) {
   28.31 +                modelName = "Q10";
   28.32 +            } else {
   28.33 +                modelName = "Q5";
   28.34 +            }
   28.35 +        } else if ((window.screen.height === 1280 && window.screen.width === 768) ||
   28.36 +                   (window.screen.height === 768 && window.screen.width === 1280)) {
   28.37 +            modelName = "Z10";
   28.38 +        } else {
   28.39 +            modelName = window.qnx.webplatform.deviceName;
   28.40 +        }
   28.41 +    }
   28.42 +
   28.43 +    return modelName;
   28.44 +}
   28.45 +
   28.46 +function getUUID () {
   28.47 +    var uuid = "";
   28.48 +    try {
   28.49 +        //Must surround by try catch because this will throw if the app is missing permissions
   28.50 +        uuid = window.qnx.webplatform.device.devicePin;
   28.51 +    } catch (e) {
   28.52 +        //DO Nothing
   28.53 +    }
   28.54 +    return uuid;
   28.55 +}
   28.56 +
   28.57 +module.exports = {
   28.58 +    getDeviceInfo: function (success, fail, args, env) {
   28.59 +        var result = new PluginResult(args, env),
   28.60 +            modelName = getModelName(),
   28.61 +            uuid = getUUID(),
   28.62 +            info = {
   28.63 +                platform: "blackberry10",
   28.64 +                version: window.qnx.webplatform.device.scmBundle,
   28.65 +                model: modelName,
   28.66 +                uuid: uuid
   28.67 +            };
   28.68 +
   28.69 +        result.ok(info);
   28.70 +    }
   28.71 +};
    29.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    29.2 +++ b/Touchgui/plugins/org.apache.cordova.device/src/browser/DeviceProxy.js	Thu Jun 04 14:50:33 2015 +0200
    29.3 @@ -0,0 +1,78 @@
    29.4 +/*
    29.5 + *
    29.6 + * Licensed to the Apache Software Foundation (ASF) under one
    29.7 + * or more contributor license agreements.  See the NOTICE file
    29.8 + * distributed with this work for additional information
    29.9 + * regarding copyright ownership.  The ASF licenses this file
   29.10 + * to you under the Apache License, Version 2.0 (the
   29.11 + * "License"); you may not use this file except in compliance
   29.12 + * with the License.  You may obtain a copy of the License at
   29.13 + *
   29.14 + *   http://www.apache.org/licenses/LICENSE-2.0
   29.15 + *
   29.16 + * Unless required by applicable law or agreed to in writing,
   29.17 + * software distributed under the License is distributed on an
   29.18 + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
   29.19 + * KIND, either express or implied.  See the License for the
   29.20 + * specific language governing permissions and limitations
   29.21 + * under the License.
   29.22 + *
   29.23 + */
   29.24 +var browser = require('cordova/platform');
   29.25 +var cordova = require('cordova');
   29.26 +
   29.27 +function getPlatform() {
   29.28 +    return "browser";
   29.29 +}
   29.30 +
   29.31 +function getModel() {
   29.32 +    return getBrowserInfo(true);
   29.33 +}
   29.34 +
   29.35 +function getVersion() {
   29.36 +    return getBrowserInfo(false);
   29.37 +}
   29.38 +
   29.39 +function getBrowserInfo(getModel) {
   29.40 +    var userAgent = navigator.userAgent;
   29.41 +    var returnVal;
   29.42 +
   29.43 +    if ((offset = userAgent.indexOf('Chrome')) !== -1) {
   29.44 +        returnVal = (getModel) ? 'Chrome' : userAgent.substring(offset + 7);
   29.45 +    } else if ((offset = userAgent.indexOf('Safari')) !== -1) {
   29.46 +        if (getModel) {
   29.47 +            returnVal = 'Safari';
   29.48 +        } else {
   29.49 +            returnVal = userAgent.substring(offset + 7);
   29.50 +
   29.51 +            if ((offset = userAgent.indexOf('Version')) !== -1) {
   29.52 +                returnVal = userAgent.substring(offset + 8);
   29.53 +            }
   29.54 +        }
   29.55 +    } else if ((offset = userAgent.indexOf('Firefox')) !== -1) {
   29.56 +        returnVal = (getModel) ? 'Firefox' : userAgent.substring(offset + 8);
   29.57 +    }
   29.58 +
   29.59 +    if ((offset = returnVal.indexOf(';')) !== -1 || (offset = returnVal.indexOf(' ')) !== -1) {
   29.60 +        returnVal = returnVal.substring(0, offset);
   29.61 +    }
   29.62 +
   29.63 +    return returnVal;
   29.64 +}
   29.65 +
   29.66 +
   29.67 +module.exports = {
   29.68 +    getDeviceInfo: function (success, error) {
   29.69 +        setTimeout(function () {
   29.70 +            success({
   29.71 +                cordova: browser.cordovaVersion,
   29.72 +                platform: getPlatform(),
   29.73 +                model: getModel(),
   29.74 +                version: getVersion(),
   29.75 +                uuid: null
   29.76 +            });
   29.77 +        }, 0);
   29.78 +    }
   29.79 +};
   29.80 +
   29.81 +require("cordova/exec/proxy").add("Device", module.exports);
    30.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    30.2 +++ b/Touchgui/plugins/org.apache.cordova.device/src/firefoxos/DeviceProxy.js	Thu Jun 04 14:50:33 2015 +0200
    30.3 @@ -0,0 +1,79 @@
    30.4 +/*
    30.5 + *
    30.6 + * Licensed to the Apache Software Foundation (ASF) under one
    30.7 + * or more contributor license agreements.  See the NOTICE file
    30.8 + * distributed with this work for additional information
    30.9 + * regarding copyright ownership.  The ASF licenses this file
   30.10 + * to you under the Apache License, Version 2.0 (the
   30.11 + * "License"); you may not use this file except in compliance
   30.12 + * with the License.  You may obtain a copy of the License at
   30.13 + *
   30.14 + *   http://www.apache.org/licenses/LICENSE-2.0
   30.15 + *
   30.16 + * Unless required by applicable law or agreed to in writing,
   30.17 + * software distributed under the License is distributed on an
   30.18 + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
   30.19 + * KIND, either express or implied.  See the License for the
   30.20 + * specific language governing permissions and limitations
   30.21 + * under the License.
   30.22 + *
   30.23 + */
   30.24 +//example UA String for Firefox OS 
   30.25 +//Mozilla/5.0 (Mobile; rv:26.0) Gecko/26.0 Firefox/26.0
   30.26 +var firefoxos = require('cordova/platform');
   30.27 +var cordova = require('cordova');
   30.28 +
   30.29 +//UA parsing not recommended but currently this is the only way to get the Firefox OS version
   30.30 +//https://developer.mozilla.org/en-US/docs/Gecko_user_agent_string_reference
   30.31 +
   30.32 +//Should be replaced when better conversion to Firefox OS Version is available
   30.33 +function convertVersionNumber(ver) {
   30.34 +    var hashVersion = {
   30.35 +        '18.0': '1.0.1',
   30.36 +        '18.1': '1.1',
   30.37 +        '26.0': '1.2',
   30.38 +        '28.0': '1.3',
   30.39 +        '30.0': '1.4',
   30.40 +        '32.0': '2.0'
   30.41 +    };
   30.42 +    var rver = ver;
   30.43 +    var sStr = ver.substring(0, 4);
   30.44 +    if (hashVersion[sStr]) {
   30.45 +        rver = hashVersion[sStr];
   30.46 +    }
   30.47 +    return (rver);
   30.48 +
   30.49 +}
   30.50 +function getVersion() {
   30.51 +    if (navigator.userAgent.match(/(mobile|tablet)/i)) {
   30.52 +        var ffVersionArray = (navigator.userAgent.match(/Firefox\/([\d]+\.[\w]?\.?[\w]+)/));
   30.53 +        if (ffVersionArray.length === 2) {
   30.54 +            return (convertVersionNumber(ffVersionArray[1]));
   30.55 +        }
   30.56 +    }
   30.57 +    return (null);
   30.58 +}
   30.59 +
   30.60 +function getModel() {
   30.61 +    var uaArray = navigator.userAgent.split(/\s*[;)(]\s*/);
   30.62 +    if (navigator.userAgent.match(/(mobile|tablet)/i)) {
   30.63 +        if (uaArray.length === 5) {
   30.64 +            return (uaArray[2]);
   30.65 +        }
   30.66 +    }
   30.67 +    return (null);
   30.68 +}
   30.69 +module.exports = {
   30.70 +    getDeviceInfo: function (success, error) {
   30.71 +        setTimeout(function () {
   30.72 +            success({
   30.73 +                platform: 'firefoxos',
   30.74 +                model: getModel(),
   30.75 +                version: getVersion(),
   30.76 +                uuid: null
   30.77 +            });
   30.78 +        }, 0);
   30.79 +    }
   30.80 +};
   30.81 +
   30.82 +require("cordova/exec/proxy").add("Device", module.exports);
    31.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    31.2 +++ b/Touchgui/plugins/org.apache.cordova.device/src/ios/CDVDevice.h	Thu Jun 04 14:50:33 2015 +0200
    31.3 @@ -0,0 +1,30 @@
    31.4 +/*
    31.5 + Licensed to the Apache Software Foundation (ASF) under one
    31.6 + or more contributor license agreements.  See the NOTICE file
    31.7 + distributed with this work for additional information
    31.8 + regarding copyright ownership.  The ASF licenses this file
    31.9 + to you under the Apache License, Version 2.0 (the
   31.10 + "License"); you may not use this file except in compliance
   31.11 + with the License.  You may obtain a copy of the License at
   31.12 +
   31.13 + http://www.apache.org/licenses/LICENSE-2.0
   31.14 +
   31.15 + Unless required by applicable law or agreed to in writing,
   31.16 + software distributed under the License is distributed on an
   31.17 + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
   31.18 + KIND, either express or implied.  See the License for the
   31.19 + specific language governing permissions and limitations
   31.20 + under the License.
   31.21 + */
   31.22 +
   31.23 +#import <UIKit/UIKit.h>
   31.24 +#import <Cordova/CDVPlugin.h>
   31.25 +
   31.26 +@interface CDVDevice : CDVPlugin
   31.27 +{}
   31.28 +
   31.29 ++ (NSString*)cordovaVersion;
   31.30 +
   31.31 +- (void)getDeviceInfo:(CDVInvokedUrlCommand*)command;
   31.32 +
   31.33 +@end
    32.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    32.2 +++ b/Touchgui/plugins/org.apache.cordova.device/src/ios/CDVDevice.m	Thu Jun 04 14:50:33 2015 +0200
    32.3 @@ -0,0 +1,76 @@
    32.4 +/*
    32.5 + Licensed to the Apache Software Foundation (ASF) under one
    32.6 + or more contributor license agreements.  See the NOTICE file
    32.7 + distributed with this work for additional information
    32.8 + regarding copyright ownership.  The ASF licenses this file
    32.9 + to you under the Apache License, Version 2.0 (the
   32.10 + "License"); you may not use this file except in compliance
   32.11 + with the License.  You may obtain a copy of the License at
   32.12 +
   32.13 + http://www.apache.org/licenses/LICENSE-2.0
   32.14 +
   32.15 + Unless required by applicable law or agreed to in writing,
   32.16 + software distributed under the License is distributed on an
   32.17 + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
   32.18 + KIND, either express or implied.  See the License for the
   32.19 + specific language governing permissions and limitations
   32.20 + under the License.
   32.21 + */
   32.22 +
   32.23 +#include <sys/types.h>
   32.24 +#include <sys/sysctl.h>
   32.25 +
   32.26 +#import <Cordova/CDV.h>
   32.27 +#import "CDVDevice.h"
   32.28 +
   32.29 +@implementation UIDevice (ModelVersion)
   32.30 +
   32.31 +- (NSString*)modelVersion
   32.32 +{
   32.33 +    size_t size;
   32.34 +
   32.35 +    sysctlbyname("hw.machine", NULL, &size, NULL, 0);
   32.36 +    char* machine = malloc(size);
   32.37 +    sysctlbyname("hw.machine", machine, &size, NULL, 0);
   32.38 +    NSString* platform = [NSString stringWithUTF8String:machine];
   32.39 +    free(machine);
   32.40 +
   32.41 +    return platform;
   32.42 +}
   32.43 +
   32.44 +@end
   32.45 +
   32.46 +@interface CDVDevice () {}
   32.47 +@end
   32.48 +
   32.49 +@implementation CDVDevice
   32.50 +
   32.51 +- (void)getDeviceInfo:(CDVInvokedUrlCommand*)command
   32.52 +{
   32.53 +    NSDictionary* deviceProperties = [self deviceProperties];
   32.54 +    CDVPluginResult* pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsDictionary:deviceProperties];
   32.55 +
   32.56 +    [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
   32.57 +}
   32.58 +
   32.59 +- (NSDictionary*)deviceProperties
   32.60 +{
   32.61 +    UIDevice* device = [UIDevice currentDevice];
   32.62 +    NSMutableDictionary* devProps = [NSMutableDictionary dictionaryWithCapacity:4];
   32.63 +
   32.64 +    [devProps setObject:[device modelVersion] forKey:@"model"];
   32.65 +    [devProps setObject:@"iOS" forKey:@"platform"];
   32.66 +    [devProps setObject:[device systemVersion] forKey:@"version"];
   32.67 +    [devProps setObject:[device uniqueAppInstanceIdentifier] forKey:@"uuid"];
   32.68 +    [devProps setObject:[[self class] cordovaVersion] forKey:@"cordova"];
   32.69 +
   32.70 +    NSDictionary* devReturn = [NSDictionary dictionaryWithDictionary:devProps];
   32.71 +    return devReturn;
   32.72 +}
   32.73 +
   32.74 ++ (NSString*)cordovaVersion
   32.75 +{
   32.76 +    return CDV_VERSION;
   32.77 +}
   32.78 +
   32.79 +@end
    33.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    33.2 +++ b/Touchgui/plugins/org.apache.cordova.device/src/tizen/DeviceProxy.js	Thu Jun 04 14:50:33 2015 +0200
    33.3 @@ -0,0 +1,39 @@
    33.4 +/*
    33.5 + *
    33.6 + * Licensed to the Apache Software Foundation (ASF) under one
    33.7 + * or more contributor license agreements.  See the NOTICE file
    33.8 + * distributed with this work for additional information
    33.9 + * regarding copyright ownership.  The ASF licenses this file
   33.10 + * to you under the Apache License, Version 2.0 (the
   33.11 + * "License"); you may not use this file except in compliance
   33.12 + * with the License.  You may obtain a copy of the License at
   33.13 + *
   33.14 + *   http://www.apache.org/licenses/LICENSE-2.0
   33.15 + *
   33.16 + * Unless required by applicable law or agreed to in writing,
   33.17 + * software distributed under the License is distributed on an
   33.18 + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
   33.19 + * KIND, either express or implied.  See the License for the
   33.20 + * specific language governing permissions and limitations
   33.21 + * under the License.
   33.22 + *
   33.23 +*/
   33.24 +
   33.25 +var tizen = require('cordova/platform');
   33.26 +var cordova = require('cordova');
   33.27 +
   33.28 +module.exports = {
   33.29 +    getDeviceInfo: function(success, error) {
   33.30 +        setTimeout(function () {
   33.31 +            success({
   33.32 +                cordova: tizen.cordovaVersion,
   33.33 +                platform: 'tizen',
   33.34 +                model: null,
   33.35 +                version: null,
   33.36 +                uuid: null
   33.37 +            });
   33.38 +        }, 0);
   33.39 +    }
   33.40 +};
   33.41 +
   33.42 +require("cordova/tizen/commandProxy").add("Device", module.exports);
    34.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    34.2 +++ b/Touchgui/plugins/org.apache.cordova.device/src/ubuntu/device.cpp	Thu Jun 04 14:50:33 2015 +0200
    34.3 @@ -0,0 +1,64 @@
    34.4 +/*
    34.5 + *  Copyright 2011 Wolfgang Koller - http://www.gofg.at/
    34.6 + *
    34.7 + *  Licensed under the Apache License, Version 2.0 (the "License");
    34.8 + *  you may not use this file except in compliance with the License.
    34.9 + *  You may obtain a copy of the License at
   34.10 + *
   34.11 + *      http://www.apache.org/licenses/LICENSE-2.0
   34.12 + *
   34.13 + *  Unless required by applicable law or agreed to in writing, software
   34.14 + *  distributed under the License is distributed on an "AS IS" BASIS,
   34.15 + *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   34.16 + *  See the License for the specific language governing permissions and
   34.17 + *  limitations under the License.
   34.18 + */
   34.19 +
   34.20 +#include <QDeviceInfo>
   34.21 +#include <QtSystemInfo>
   34.22 +
   34.23 +#include"device.h"
   34.24 +
   34.25 +#define CORDOVA "3.0.0"
   34.26 +
   34.27 +Device::Device(Cordova *cordova) : CPlugin(cordova) {
   34.28 +}
   34.29 +
   34.30 +static QString getOSName() {
   34.31 +#ifdef Q_OS_SYMBIAN
   34.32 +    QString platform = "Symbian";
   34.33 +#endif
   34.34 +#ifdef Q_OS_WIN
   34.35 +    QString platform = "Windows";
   34.36 +#endif
   34.37 +#ifdef Q_OS_WINCE
   34.38 +    QString platform = "Windows CE";
   34.39 +#endif
   34.40 +#ifdef Q_OS_LINUX
   34.41 +    QString platform = "Linux";
   34.42 +#endif
   34.43 +    return platform;
   34.44 +}
   34.45 +
   34.46 +void Device::getInfo(int scId, int ecId) {
   34.47 +    Q_UNUSED(ecId)
   34.48 +
   34.49 +    QDeviceInfo systemDeviceInfo;
   34.50 +    QDeviceInfo systemInfo;
   34.51 +
   34.52 +    QString platform = getOSName();
   34.53 +
   34.54 +    QString uuid = systemDeviceInfo.uniqueDeviceID();
   34.55 +    if (uuid.isEmpty()) {
   34.56 +        QString deviceDescription = systemInfo.imei(0) + ";" + systemInfo.manufacturer() + ";" + systemInfo.model() + ";" + systemInfo.productName() + ";" + platform;
   34.57 +        QString user = qgetenv("USER");
   34.58 +        if (user.isEmpty()) {
   34.59 +            user = qgetenv("USERNAME");
   34.60 +            if (user.isEmpty())
   34.61 +                user = QDir::homePath();
   34.62 +        }
   34.63 +        uuid = QString(QCryptographicHash::hash((deviceDescription + ";" + user).toUtf8(), QCryptographicHash::Md5).toHex());
   34.64 +    }
   34.65 +
   34.66 +    this->cb(scId, systemDeviceInfo.model(), CORDOVA, platform, uuid, systemInfo.version(QDeviceInfo::Os));
   34.67 +}
    35.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    35.2 +++ b/Touchgui/plugins/org.apache.cordova.device/src/ubuntu/device.h	Thu Jun 04 14:50:33 2015 +0200
    35.3 @@ -0,0 +1,47 @@
    35.4 +/*
    35.5 + *  Copyright 2011 Wolfgang Koller - http://www.gofg.at/
    35.6 + *
    35.7 + *  Licensed under the Apache License, Version 2.0 (the "License");
    35.8 + *  you may not use this file except in compliance with the License.
    35.9 + *  You may obtain a copy of the License at
   35.10 + *
   35.11 + *      http://www.apache.org/licenses/LICENSE-2.0
   35.12 + *
   35.13 + *  Unless required by applicable law or agreed to in writing, software
   35.14 + *  distributed under the License is distributed on an "AS IS" BASIS,
   35.15 + *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   35.16 + *  See the License for the specific language governing permissions and
   35.17 + *  limitations under the License.
   35.18 + */
   35.19 +
   35.20 +#ifndef DEVICE_H_FDSAFAS
   35.21 +#define DEVICE_H_FDSAFAS
   35.22 +
   35.23 +#include <QtCore>
   35.24 +
   35.25 +#include <cplugin.h>
   35.26 +
   35.27 +class Device: public CPlugin {
   35.28 +    Q_OBJECT
   35.29 +public:
   35.30 +    explicit Device(Cordova *cordova);
   35.31 +
   35.32 +    virtual const QString fullName() override {
   35.33 +        return Device::fullID();
   35.34 +    }
   35.35 +
   35.36 +    virtual const QString shortName() override {
   35.37 +        return "Device";
   35.38 +    }
   35.39 +
   35.40 +    static const QString fullID() {
   35.41 +        return "com.cordova.Device";
   35.42 +    }
   35.43 +
   35.44 +signals:
   35.45 +
   35.46 +public slots:
   35.47 +    void getInfo(int scId, int ecId);
   35.48 +};
   35.49 +
   35.50 +#endif
    36.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    36.2 +++ b/Touchgui/plugins/org.apache.cordova.device/src/ubuntu/device.js	Thu Jun 04 14:50:33 2015 +0200
    36.3 @@ -0,0 +1,34 @@
    36.4 +/*
    36.5 + *
    36.6 + * Licensed to the Apache Software Foundation (ASF) under one
    36.7 + * or more contributor license agreements.  See the NOTICE file
    36.8 + * distributed with this work for additional information
    36.9 + * regarding copyright ownership.  The ASF licenses this file
   36.10 + * to you under the Apache License, Version 2.0 (the
   36.11 + * "License"); you may not use this file except in compliance
   36.12 + * with the License.  You may obtain a copy of the License at
   36.13 + *
   36.14 + *   http://www.apache.org/licenses/LICENSE-2.0
   36.15 + *
   36.16 + * Unless required by applicable law or agreed to in writing,
   36.17 + * software distributed under the License is distributed on an
   36.18 + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
   36.19 + * KIND, either express or implied.  See the License for the
   36.20 + * specific language governing permissions and limitations
   36.21 + * under the License.
   36.22 + *
   36.23 +*/
   36.24 +
   36.25 +var cordova = require('cordova');
   36.26 +var exec = require('cordova/exec');
   36.27 +
   36.28 +module.exports = {
   36.29 +    getInfo:function(win,fail,args) {
   36.30 +        Cordova.exec(function (model, cordova, platform, uuid, version) {
   36.31 +            win({name: name, model: model, cordova: cordova,
   36.32 +                 platform: platform, uuid: uuid, version: version});
   36.33 +        }, null, "com.cordova.Device", "getInfo", []);
   36.34 +    }
   36.35 +};
   36.36 +
   36.37 +require("cordova/exec/proxy").add("Device", module.exports);
    37.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    37.2 +++ b/Touchgui/plugins/org.apache.cordova.device/src/windows/DeviceProxy.js	Thu Jun 04 14:50:33 2015 +0200
    37.3 @@ -0,0 +1,80 @@
    37.4 +/*
    37.5 + *
    37.6 + * Licensed to the Apache Software Foundation (ASF) under one
    37.7 + * or more contributor license agreements.  See the NOTICE file
    37.8 + * distributed with this work for additional information
    37.9 + * regarding copyright ownership.  The ASF licenses this file
   37.10 + * to you under the Apache License, Version 2.0 (the
   37.11 + * "License"); you may not use this file except in compliance
   37.12 + * with the License.  You may obtain a copy of the License at
   37.13 + *
   37.14 + *   http://www.apache.org/licenses/LICENSE-2.0
   37.15 + *
   37.16 + * Unless required by applicable law or agreed to in writing,
   37.17 + * software distributed under the License is distributed on an
   37.18 + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
   37.19 + * KIND, either express or implied.  See the License for the
   37.20 + * specific language governing permissions and limitations
   37.21 + * under the License.
   37.22 + *
   37.23 +*/
   37.24 +
   37.25 +module.exports = {
   37.26 +
   37.27 +    getDeviceInfo:function(win, fail, args) {
   37.28 +
   37.29 +        // deviceId aka uuid, stored in Windows.Storage.ApplicationData.current.localSettings.values.deviceId
   37.30 +        var deviceId;
   37.31 +        var localSettings = Windows.Storage.ApplicationData.current.localSettings;
   37.32 +        if (localSettings.values.deviceId) {
   37.33 +            deviceId = localSettings.values.deviceId;
   37.34 +        }
   37.35 +        else {
   37.36 +            // App-specific hardware id could be used as uuid, but it changes if the hardware changes...
   37.37 +            try {
   37.38 +                var ASHWID = Windows.System.Profile.HardwareIdentification.getPackageSpecificToken(null).id;
   37.39 +                deviceId = Windows.Storage.Streams.DataReader.fromBuffer(ASHWID).readGuid();
   37.40 +            } catch (e) {
   37.41 +                // Couldn't get the hardware UUID
   37.42 +                deviceId = createUUID();
   37.43 +            }
   37.44 +            //...so cache it per-install
   37.45 +            localSettings.values.deviceId = deviceId;
   37.46 +        }
   37.47 +
   37.48 +        var userAgent = window.clientInformation.userAgent,
   37.49 +            // this will report "windows" in windows8.1 and windows phone 8.1 apps
   37.50 +            // and "windows8" in windows 8.0 apps similar to cordova.js
   37.51 +            // See https://github.com/apache/cordova-js/blob/master/src/windows/platform.js#L25
   37.52 +            devicePlatform = userAgent.indexOf("MSAppHost/1.0") == -1 ? "windows" : "windows8",
   37.53 +            versionString = userAgent.match(/Windows (?:Phone |NT )?([0-9.]+)/)[1];
   37.54 +        
   37.55 +        var ROOT_CONTAINER = "{00000000-0000-0000-FFFF-FFFFFFFFFFFF}";
   37.56 +        var DEVICE_CLASS_KEY = "{A45C254E-DF1C-4EFD-8020-67D146A850E0},10";
   37.57 +        var DEVICE_CLASS_KEY_NO_SEMICOLON = '{A45C254E-DF1C-4EFD-8020-67D146A850E0}10';
   37.58 +        var ROOT_CONTAINER_QUERY = "System.Devices.ContainerId:=\"" + ROOT_CONTAINER + "\"";
   37.59 +        var HAL_DEVICE_CLASS = "4d36e966-e325-11ce-bfc1-08002be10318";
   37.60 +        var DEVICE_DRIVER_VERSION_KEY = "{A8B865DD-2E3D-4094-AD97-E593A70C75D6},3";
   37.61 +        var pnpObject = Windows.Devices.Enumeration.Pnp.PnpObject;
   37.62 +        pnpObject.findAllAsync(Windows.Devices.Enumeration.Pnp.PnpObjectType.device,
   37.63 +            [DEVICE_DRIVER_VERSION_KEY, DEVICE_CLASS_KEY], ROOT_CONTAINER_QUERY)
   37.64 +        .then(function(rootDevices) {
   37.65 +            for (var i = 0; i < rootDevices.length; i++) {
   37.66 +                var rootDevice = rootDevices[i];
   37.67 +                if (!rootDevice.properties) continue;
   37.68 +                if (rootDevice.properties[DEVICE_CLASS_KEY_NO_SEMICOLON] == HAL_DEVICE_CLASS) {
   37.69 +                    versionString = rootDevice.properties[DEVICE_DRIVER_VERSION_KEY];
   37.70 +                    break;
   37.71 +                }
   37.72 +            }
   37.73 +
   37.74 +            setTimeout(function () {
   37.75 +                win({ platform: devicePlatform, version: versionString,
   37.76 +                    uuid: deviceId, model: window.clientInformation.platform });
   37.77 +            }, 0);
   37.78 +        });
   37.79 +    }
   37.80 +
   37.81 +};
   37.82 +
   37.83 +require("cordova/exec/proxy").add("Device", module.exports);
    38.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    38.2 +++ b/Touchgui/plugins/org.apache.cordova.device/src/windows8/DeviceProxy.js	Thu Jun 04 14:50:33 2015 +0200
    38.3 @@ -0,0 +1,82 @@
    38.4 +/*
    38.5 + *
    38.6 + * Licensed to the Apache Software Foundation (ASF) under one
    38.7 + * or more contributor license agreements.  See the NOTICE file
    38.8 + * distributed with this work for additional information
    38.9 + * regarding copyright ownership.  The ASF licenses this file
   38.10 + * to you under the Apache License, Version 2.0 (the
   38.11 + * "License"); you may not use this file except in compliance
   38.12 + * with the License.  You may obtain a copy of the License at
   38.13 + *
   38.14 + *   http://www.apache.org/licenses/LICENSE-2.0
   38.15 + *
   38.16 + * Unless required by applicable law or agreed to in writing,
   38.17 + * software distributed under the License is distributed on an
   38.18 + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
   38.19 + * KIND, either express or implied.  See the License for the
   38.20 + * specific language governing permissions and limitations
   38.21 + * under the License.
   38.22 + *
   38.23 +*/
   38.24 +
   38.25 +
   38.26 +var cordova = require('cordova');
   38.27 +var utils = require('cordova/utils');
   38.28 +
   38.29 +module.exports = {
   38.30 +
   38.31 +    getDeviceInfo:function(win,fail,args) {
   38.32 +
   38.33 +        // deviceId aka uuid, stored in Windows.Storage.ApplicationData.current.localSettings.values.deviceId
   38.34 +        var deviceId;
   38.35 +
   38.36 +        var localSettings = Windows.Storage.ApplicationData.current.localSettings;
   38.37 +
   38.38 +	    if (localSettings.values.deviceId) {
   38.39 +	    	deviceId = localSettings.values.deviceId;
   38.40 +	    }
   38.41 +	    else {
   38.42 +    		// App-specific hardware id could be used as uuid, but it changes if the hardware changes...
   38.43 +    		try {
   38.44 +    			var ASHWID = Windows.System.Profile.HardwareIdentification.getPackageSpecificToken(null).id;
   38.45 +    			deviceId = Windows.Storage.Streams.DataReader.fromBuffer(ASHWID).readGuid();
   38.46 +    		} catch (e) {
   38.47 +    			// Couldn't get the hardware UUID
   38.48 +    			deviceId = createUUID();
   38.49 +    		}
   38.50 +    		//...so cache it per-install
   38.51 +    		localSettings.values.deviceId = deviceId;
   38.52 +    	}
   38.53 +    	
   38.54 +    	var versionString = window.clientInformation.userAgent.match(/Windows NT ([0-9.]+)/)[1];
   38.55 +    	
   38.56 +    	(function(self){
   38.57 +    		var ROOT_CONTAINER = "{00000000-0000-0000-FFFF-FFFFFFFFFFFF}";
   38.58 +    		var DEVICE_CLASS_KEY = "{A45C254E-DF1C-4EFD-8020-67D146A850E0},10";
   38.59 +    		var DEVICE_CLASS_KEY_NO_SEMICOLON = '{A45C254E-DF1C-4EFD-8020-67D146A850E0}10';
   38.60 +    		var ROOT_CONTAINER_QUERY = "System.Devices.ContainerId:=\"" + ROOT_CONTAINER + "\"";
   38.61 +    		var HAL_DEVICE_CLASS = "4d36e966-e325-11ce-bfc1-08002be10318";
   38.62 +    		var DEVICE_DRIVER_VERSION_KEY = "{A8B865DD-2E3D-4094-AD97-E593A70C75D6},3";
   38.63 +    		var pnpObject = Windows.Devices.Enumeration.Pnp.PnpObject;
   38.64 +    		pnpObject.findAllAsync(Windows.Devices.Enumeration.Pnp.PnpObjectType.device, [DEVICE_DRIVER_VERSION_KEY, DEVICE_CLASS_KEY], ROOT_CONTAINER_QUERY).then(function(rootDevices) {
   38.65 +    
   38.66 +    			for (var i = 0; i < rootDevices.length; i++) {
   38.67 +    				var rootDevice = rootDevices[i];
   38.68 +    				if (!rootDevice.properties) continue;
   38.69 +    				if (rootDevice.properties[DEVICE_CLASS_KEY_NO_SEMICOLON] == HAL_DEVICE_CLASS) {
   38.70 +    					versionString = rootDevice.properties[DEVICE_DRIVER_VERSION_KEY];
   38.71 +    					break;
   38.72 +    				}
   38.73 +    			}
   38.74 +
   38.75 +                setTimeout(function () {
   38.76 +                    win({ platform: "windows8", version: versionString, uuid: deviceId, model: window.clientInformation.platform });
   38.77 +                }, 0);
   38.78 +    		});
   38.79 +    	})(this);
   38.80 +    }
   38.81 +
   38.82 +};
   38.83 +
   38.84 +require("cordova/exec/proxy").add("Device", module.exports);
   38.85 +
    39.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    39.2 +++ b/Touchgui/plugins/org.apache.cordova.device/src/wp/Device.cs	Thu Jun 04 14:50:33 2015 +0200
    39.3 @@ -0,0 +1,123 @@
    39.4 +/*  
    39.5 +	Licensed under the Apache License, Version 2.0 (the "License");
    39.6 +	you may not use this file except in compliance with the License.
    39.7 +	You may obtain a copy of the License at
    39.8 +	
    39.9 +	http://www.apache.org/licenses/LICENSE-2.0
   39.10 +	
   39.11 +	Unless required by applicable law or agreed to in writing, software
   39.12 +	distributed under the License is distributed on an "AS IS" BASIS,
   39.13 +	WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   39.14 +	See the License for the specific language governing permissions and
   39.15 +	limitations under the License.
   39.16 +*/
   39.17 +
   39.18 +using System;
   39.19 +using System.Net;
   39.20 +using System.Windows;
   39.21 +using System.Windows.Controls;
   39.22 +using System.Windows.Documents;
   39.23 +using System.Windows.Ink;
   39.24 +using System.Windows.Input;
   39.25 +using System.Windows.Media;
   39.26 +using System.Windows.Media.Animation;
   39.27 +using System.Windows.Shapes;
   39.28 +using Microsoft.Phone.Info;
   39.29 +using System.IO.IsolatedStorage;
   39.30 +using System.Windows.Resources;
   39.31 +using System.IO;
   39.32 +using System.Diagnostics;
   39.33 +
   39.34 +namespace WPCordovaClassLib.Cordova.Commands
   39.35 +{
   39.36 +    public class Device : BaseCommand
   39.37 +    {
   39.38 +        public void getDeviceInfo(string notused)
   39.39 +        {
   39.40 +
   39.41 +            string res = String.Format("\"name\":\"{0}\",\"platform\":\"{1}\",\"uuid\":\"{2}\",\"version\":\"{3}\",\"model\":\"{4}\"",
   39.42 +                                        this.name,
   39.43 +                                        this.platform,
   39.44 +                                        this.uuid,
   39.45 +                                        this.version,
   39.46 +                                        this.model);
   39.47 +
   39.48 +            res = "{" + res + "}";
   39.49 +            //Debug.WriteLine("Result::" + res);
   39.50 +            DispatchCommandResult(new PluginResult(PluginResult.Status.OK, res));
   39.51 +        }
   39.52 +
   39.53 +        public string model
   39.54 +        {
   39.55 +            get
   39.56 +            {
   39.57 +                return DeviceStatus.DeviceName;
   39.58 +                //return String.Format("{0},{1},{2}", DeviceStatus.DeviceManufacturer, DeviceStatus.DeviceHardwareVersion, DeviceStatus.DeviceFirmwareVersion); 
   39.59 +            }
   39.60 +        }
   39.61 +
   39.62 +        public string name
   39.63 +        {
   39.64 +            get
   39.65 +            {
   39.66 +                return DeviceStatus.DeviceName;
   39.67 +                
   39.68 +            }
   39.69 +        }
   39.70 +
   39.71 +        public string platform
   39.72 +        {
   39.73 +            get
   39.74 +            {
   39.75 +                return Environment.OSVersion.Platform.ToString();
   39.76 +            }
   39.77 +        }
   39.78 +
   39.79 +        public string uuid
   39.80 +        {
   39.81 +            get
   39.82 +            {
   39.83 +                string returnVal = "";
   39.84 +                object id;
   39.85 +                UserExtendedProperties.TryGetValue("ANID", out id);
   39.86 +
   39.87 +                if (id != null)
   39.88 +                {
   39.89 +                    returnVal = id.ToString().Substring(2, 32);
   39.90 +                }
   39.91 +                else
   39.92 +                {
   39.93 +                    returnVal = "???unknown???";
   39.94 +
   39.95 +                    using (IsolatedStorageFile appStorage = IsolatedStorageFile.GetUserStoreForApplication())
   39.96 +                    {
   39.97 +                        try
   39.98 +                        {
   39.99 +                            IsolatedStorageFileStream fileStream = new IsolatedStorageFileStream("DeviceID.txt", FileMode.Open, FileAccess.Read, appStorage);
  39.100 +
  39.101 +                            using (StreamReader reader = new StreamReader(fileStream))
  39.102 +                            {
  39.103 +                                returnVal = reader.ReadLine();
  39.104 +                            }
  39.105 +                        }
  39.106 +                        catch (Exception /*ex*/)
  39.107 +                        {
  39.108 +
  39.109 +                        }
  39.110 +                    }
  39.111 +                }
  39.112 +
  39.113 +                return returnVal;
  39.114 +            }
  39.115 +        }
  39.116 +
  39.117 +        public string version
  39.118 +        {
  39.119 +            get
  39.120 +            {
  39.121 +                return Environment.OSVersion.Version.ToString();
  39.122 +            }
  39.123 +        }
  39.124 +
  39.125 +    }
  39.126 +}
    40.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    40.2 +++ b/Touchgui/plugins/org.apache.cordova.device/tests/plugin.xml	Thu Jun 04 14:50:33 2015 +0200
    40.3 @@ -0,0 +1,31 @@
    40.4 +<?xml version="1.0" encoding="UTF-8"?>
    40.5 +<!--
    40.6 +  Licensed to the Apache Software Foundation (ASF) under one
    40.7 +  or more contributor license agreements.  See the NOTICE file
    40.8 +  distributed with this work for additional information
    40.9 +  regarding copyright ownership.  The ASF licenses this file
   40.10 +  to you under the Apache License, Version 2.0 (the
   40.11 +  "License"); you may not use this file except in compliance
   40.12 +  with the License.  You may obtain a copy of the License at
   40.13 +
   40.14 +    http://www.apache.org/licenses/LICENSE-2.0
   40.15 +
   40.16 +  Unless required by applicable law or agreed to in writing,
   40.17 +  software distributed under the License is distributed on an
   40.18 +  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
   40.19 +  KIND, either express or implied.  See the License for the
   40.20 +  specific language governing permissions and limitations
   40.21 +  under the License.
   40.22 +-->
   40.23 +
   40.24 +<plugin xmlns="http://apache.org/cordova/ns/plugins/1.0"
   40.25 +    xmlns:rim="http://www.blackberry.com/ns/widgets"
   40.26 +    xmlns:android="http://schemas.android.com/apk/res/android"
   40.27 +    id="org.apache.cordova.device.tests"
   40.28 +    version="0.2.13">
   40.29 +    <name>Cordova Device Plugin Tests</name>
   40.30 +    <license>Apache 2.0</license>
   40.31 +
   40.32 +    <js-module src="tests.js" name="tests">
   40.33 +    </js-module>
   40.34 +</plugin>
    41.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    41.2 +++ b/Touchgui/plugins/org.apache.cordova.device/tests/tests.js	Thu Jun 04 14:50:33 2015 +0200
    41.3 @@ -0,0 +1,94 @@
    41.4 +/*
    41.5 + *
    41.6 + * Licensed to the Apache Software Foundation (ASF) under one
    41.7 + * or more contributor license agreements.  See the NOTICE file
    41.8 + * distributed with this work for additional information
    41.9 + * regarding copyright ownership.  The ASF licenses this file
   41.10 + * to you under the Apache License, Version 2.0 (the
   41.11 + * "License"); you may not use this file except in compliance
   41.12 + * with the License.  You may obtain a copy of the License at
   41.13 + *
   41.14 + *   http://www.apache.org/licenses/LICENSE-2.0
   41.15 + *
   41.16 + * Unless required by applicable law or agreed to in writing,
   41.17 + * software distributed under the License is distributed on an
   41.18 + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
   41.19 + * KIND, either express or implied.  See the License for the
   41.20 + * specific language governing permissions and limitations
   41.21 + * under the License.
   41.22 + *
   41.23 +*/
   41.24 +
   41.25 +exports.defineAutoTests = function() {
   41.26 +  describe('Device Information (window.device)', function () {
   41.27 +    it("should exist", function() {
   41.28 +      expect(window.device).toBeDefined();
   41.29 +    });
   41.30 +
   41.31 +    it("should contain a platform specification that is a string", function() {
   41.32 +      expect(window.device.platform).toBeDefined();
   41.33 +      expect((new String(window.device.platform)).length > 0).toBe(true);
   41.34 +    });
   41.35 +
   41.36 +    it("should contain a version specification that is a string", function() {
   41.37 +      expect(window.device.version).toBeDefined();
   41.38 +      expect((new String(window.device.version)).length > 0).toBe(true);
   41.39 +    });
   41.40 +
   41.41 +    it("should contain a UUID specification that is a string or a number", function() {
   41.42 +      expect(window.device.uuid).toBeDefined();
   41.43 +      if (typeof window.device.uuid == 'string' || typeof window.device.uuid == 'object') {
   41.44 +        expect((new String(window.device.uuid)).length > 0).toBe(true);
   41.45 +      } else {
   41.46 +        expect(window.device.uuid > 0).toBe(true);
   41.47 +      }
   41.48 +    });
   41.49 +
   41.50 +    it("should contain a cordova specification that is a string", function() {
   41.51 +      expect(window.device.cordova).toBeDefined();
   41.52 +      expect((new String(window.device.cordova)).length > 0).toBe(true);
   41.53 +    });
   41.54 +
   41.55 +    it("should depend on the precense of cordova.version string", function() {
   41.56 +      expect(window.cordova.version).toBeDefined();
   41.57 +      expect((new String(window.cordova.version)).length > 0).toBe(true);
   41.58 +    });
   41.59 +
   41.60 +    it("should contain device.cordova equal to cordova.version", function() {
   41.61 +      expect(window.device.cordova).toBe(window.cordova.version);
   41.62 +    });
   41.63 +
   41.64 +    it("should contain a model specification that is a string", function() {
   41.65 +      expect(window.device.model).toBeDefined();
   41.66 +      expect((new String(window.device.model)).length > 0).toBe(true);
   41.67 +    });
   41.68 +  });
   41.69 +};
   41.70 +
   41.71 +exports.defineManualTests = function(contentEl, createActionButton) {
   41.72 +  var logMessage = function (message, color) {
   41.73 +        var log = document.getElementById('info');
   41.74 +        var logLine = document.createElement('div');
   41.75 +        if (color) {
   41.76 +            logLine.style.color = color;
   41.77 +        }
   41.78 +        logLine.innerHTML = message;
   41.79 +        log.appendChild(logLine);
   41.80 +    }
   41.81 +
   41.82 +    var clearLog = function () {
   41.83 +        var log = document.getElementById('info');
   41.84 +        log.innerHTML = '';
   41.85 +    }
   41.86 +
   41.87 +    var device_tests = '<h3>Press Dump Device button to get device information</h3>' +
   41.88 +        '<div id="dump_device"></div>' +
   41.89 +        'Expected result: Status box will get updated with device info. (i.e. platform, version, uuid, model, etc)';
   41.90 +
   41.91 +    contentEl.innerHTML = '<div id="info"></div>' + device_tests;
   41.92 +
   41.93 +    createActionButton('Dump device', function() {
   41.94 +      clearLog();
   41.95 +      logMessage(JSON.stringify(window.device, null, '\t'));
   41.96 +    }, "dump_device");
   41.97 +};
    42.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    42.2 +++ b/Touchgui/plugins/org.apache.cordova.device/www/device.js	Thu Jun 04 14:50:33 2015 +0200
    42.3 @@ -0,0 +1,77 @@
    42.4 +/*
    42.5 + *
    42.6 + * Licensed to the Apache Software Foundation (ASF) under one
    42.7 + * or more contributor license agreements.  See the NOTICE file
    42.8 + * distributed with this work for additional information
    42.9 + * regarding copyright ownership.  The ASF licenses this file
   42.10 + * to you under the Apache License, Version 2.0 (the
   42.11 + * "License"); you may not use this file except in compliance
   42.12 + * with the License.  You may obtain a copy of the License at
   42.13 + *
   42.14 + *   http://www.apache.org/licenses/LICENSE-2.0
   42.15 + *
   42.16 + * Unless required by applicable law or agreed to in writing,
   42.17 + * software distributed under the License is distributed on an
   42.18 + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
   42.19 + * KIND, either express or implied.  See the License for the
   42.20 + * specific language governing permissions and limitations
   42.21 + * under the License.
   42.22 + *
   42.23 +*/
   42.24 +
   42.25 +var argscheck = require('cordova/argscheck'),
   42.26 +    channel = require('cordova/channel'),
   42.27 +    utils = require('cordova/utils'),
   42.28 +    exec = require('cordova/exec'),
   42.29 +    cordova = require('cordova');
   42.30 +
   42.31 +channel.createSticky('onCordovaInfoReady');
   42.32 +// Tell cordova channel to wait on the CordovaInfoReady event
   42.33 +channel.waitForInitialization('onCordovaInfoReady');
   42.34 +
   42.35 +/**
   42.36 + * This represents the mobile device, and provides properties for inspecting the model, version, UUID of the
   42.37 + * phone, etc.
   42.38 + * @constructor
   42.39 + */
   42.40 +function Device() {
   42.41 +    this.available = false;
   42.42 +    this.platform = null;
   42.43 +    this.version = null;
   42.44 +    this.uuid = null;
   42.45 +    this.cordova = null;
   42.46 +    this.model = null;
   42.47 +
   42.48 +    var me = this;
   42.49 +
   42.50 +    channel.onCordovaReady.subscribe(function() {
   42.51 +        me.getInfo(function(info) {
   42.52 +            //ignoring info.cordova returning from native, we should use value from cordova.version defined in cordova.js
   42.53 +            //TODO: CB-5105 native implementations should not return info.cordova
   42.54 +            var buildLabel = cordova.version;
   42.55 +            me.available = true;
   42.56 +            me.platform = info.platform;
   42.57 +            me.version = info.version;
   42.58 +            me.uuid = info.uuid;
   42.59 +            me.cordova = buildLabel;
   42.60 +            me.model = info.model;
   42.61 +            channel.onCordovaInfoReady.fire();
   42.62 +        },function(e) {
   42.63 +            me.available = false;
   42.64 +            utils.alert("[ERROR] Error initializing Cordova: " + e);
   42.65 +        });
   42.66 +    });
   42.67 +}
   42.68 +
   42.69 +/**
   42.70 + * Get device info
   42.71 + *
   42.72 + * @param {Function} successCallback The function to call when the heading data is available
   42.73 + * @param {Function} errorCallback The function to call when there is an error getting the heading data. (OPTIONAL)
   42.74 + */
   42.75 +Device.prototype.getInfo = function(successCallback, errorCallback) {
   42.76 +    argscheck.checkArgs('fF', 'Device.getInfo', arguments);
   42.77 +    exec(successCallback, errorCallback, "Device", "getDeviceInfo", []);
   42.78 +};
   42.79 +
   42.80 +module.exports = new Device();
    43.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    43.2 +++ b/Touchgui/plugins/org.apache.cordova.dialogs/.fetch.json	Thu Jun 04 14:50:33 2015 +0200
    43.3 @@ -0,0 +1,1 @@
    43.4 +{"source":{"type":"local","path":"/opt/intel/XDK_IoT_Edition/xdk/components/server/cordova-plugins/org.apache.cordova.dialogs"}}
    43.5 \ No newline at end of file
    44.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    44.2 +++ b/Touchgui/plugins/org.apache.cordova.dialogs/CONTRIBUTING.md	Thu Jun 04 14:50:33 2015 +0200
    44.3 @@ -0,0 +1,37 @@
    44.4 +<!--
    44.5 +#
    44.6 +# Licensed to the Apache Software Foundation (ASF) under one
    44.7 +# or more contributor license agreements.  See the NOTICE file
    44.8 +# distributed with this work for additional information
    44.9 +# regarding copyright ownership.  The ASF licenses this file
   44.10 +# to you under the Apache License, Version 2.0 (the
   44.11 +# "License"); you may not use this file except in compliance
   44.12 +# with the License.  You may obtain a copy of the License at
   44.13 +#
   44.14 +# http://www.apache.org/licenses/LICENSE-2.0
   44.15 +#
   44.16 +# Unless required by applicable law or agreed to in writing,
   44.17 +# software distributed under the License is distributed on an
   44.18 +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
   44.19 +#  KIND, either express or implied.  See the License for the
   44.20 +# specific language governing permissions and limitations
   44.21 +# under the License.
   44.22 +#
   44.23 +-->
   44.24 +
   44.25 +# Contributing to Apache Cordova
   44.26 +
   44.27 +Anyone can contribute to Cordova. And we need your contributions.
   44.28 +
   44.29 +There are multiple ways to contribute: report bugs, improve the docs, and
   44.30 +contribute code.
   44.31 +
   44.32 +For instructions on this, start with the 
   44.33 +[contribution overview](http://cordova.apache.org/#contribute).
   44.34 +
   44.35 +The details are explained there, but the important items are:
   44.36 + - Sign and submit an Apache ICLA (Contributor License Agreement).
   44.37 + - Have a Jira issue open that corresponds to your contribution.
   44.38 + - Run the tests so your patch doesn't break existing functionality.
   44.39 +
   44.40 +We look forward to your contributions!
    45.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    45.2 +++ b/Touchgui/plugins/org.apache.cordova.dialogs/LICENSE	Thu Jun 04 14:50:33 2015 +0200
    45.3 @@ -0,0 +1,202 @@
    45.4 +
    45.5 +                                 Apache License
    45.6 +                           Version 2.0, January 2004
    45.7 +                        http://www.apache.org/licenses/
    45.8 +
    45.9 +   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
   45.10 +
   45.11 +   1. Definitions.
   45.12 +
   45.13 +      "License" shall mean the terms and conditions for use, reproduction,
   45.14 +      and distribution as defined by Sections 1 through 9 of this document.
   45.15 +
   45.16 +      "Licensor" shall mean the copyright owner or entity authorized by
   45.17 +      the copyright owner that is granting the License.
   45.18 +
   45.19 +      "Legal Entity" shall mean the union of the acting entity and all
   45.20 +      other entities that control, are controlled by, or are under common
   45.21 +      control with that entity. For the purposes of this definition,
   45.22 +      "control" means (i) the power, direct or indirect, to cause the
   45.23 +      direction or management of such entity, whether by contract or
   45.24 +      otherwise, or (ii) ownership of fifty percent (50%) or more of the
   45.25 +      outstanding shares, or (iii) beneficial ownership of such entity.
   45.26 +
   45.27 +      "You" (or "Your") shall mean an individual or Legal Entity
   45.28 +      exercising permissions granted by this License.
   45.29 +
   45.30 +      "Source" form shall mean the preferred form for making modifications,
   45.31 +      including but not limited to software source code, documentation
   45.32 +      source, and configuration files.
   45.33 +
   45.34 +      "Object" form shall mean any form resulting from mechanical
   45.35 +      transformation or translation of a Source form, including but
   45.36 +      not limited to compiled object code, generated documentation,
   45.37 +      and conversions to other media types.
   45.38 +
   45.39 +      "Work" shall mean the work of authorship, whether in Source or
   45.40 +      Object form, made available under the License, as indicated by a
   45.41 +      copyright notice that is included in or attached to the work
   45.42 +      (an example is provided in the Appendix below).
   45.43 +
   45.44 +      "Derivative Works" shall mean any work, whether in Source or Object
   45.45 +      form, that is based on (or derived from) the Work and for which the
   45.46 +      editorial revisions, annotations, elaborations, or other modifications
   45.47 +      represent, as a whole, an original work of authorship. For the purposes
   45.48 +      of this License, Derivative Works shall not include works that remain
   45.49 +      separable from, or merely link (or bind by name) to the interfaces of,
   45.50 +      the Work and Derivative Works thereof.
   45.51 +
   45.52 +      "Contribution" shall mean any work of authorship, including
   45.53 +      the original version of the Work and any modifications or additions
   45.54 +      to that Work or Derivative Works thereof, that is intentionally
   45.55 +      submitted to Licensor for inclusion in the Work by the copyright owner
   45.56 +      or by an individual or Legal Entity authorized to submit on behalf of
   45.57 +      the copyright owner. For the purposes of this definition, "submitted"
   45.58 +      means any form of electronic, verbal, or written communication sent
   45.59 +      to the Licensor or its representatives, including but not limited to
   45.60 +      communication on electronic mailing lists, source code control systems,
   45.61 +      and issue tracking systems that are managed by, or on behalf of, the
   45.62 +      Licensor for the purpose of discussing and improving the Work, but
   45.63 +      excluding communication that is conspicuously marked or otherwise
   45.64 +      designated in writing by the copyright owner as "Not a Contribution."
   45.65 +
   45.66 +      "Contributor" shall mean Licensor and any individual or Legal Entity
   45.67 +      on behalf of whom a Contribution has been received by Licensor and
   45.68 +      subsequently incorporated within the Work.
   45.69 +
   45.70 +   2. Grant of Copyright License. Subject to the terms and conditions of
   45.71 +      this License, each Contributor hereby grants to You a perpetual,
   45.72 +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
   45.73 +      copyright license to reproduce, prepare Derivative Works of,
   45.74 +      publicly display, publicly perform, sublicense, and distribute the
   45.75 +      Work and such Derivative Works in Source or Object form.
   45.76 +
   45.77 +   3. Grant of Patent License. Subject to the terms and conditions of
   45.78 +      this License, each Contributor hereby grants to You a perpetual,
   45.79 +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
   45.80 +      (except as stated in this section) patent license to make, have made,
   45.81 +      use, offer to sell, sell, import, and otherwise transfer the Work,
   45.82 +      where such license applies only to those patent claims licensable
   45.83 +      by such Contributor that are necessarily infringed by their
   45.84 +      Contribution(s) alone or by combination of their Contribution(s)
   45.85 +      with the Work to which such Contribution(s) was submitted. If You
   45.86 +      institute patent litigation against any entity (including a
   45.87 +      cross-claim or counterclaim in a lawsuit) alleging that the Work
   45.88 +      or a Contribution incorporated within the Work constitutes direct
   45.89 +      or contributory patent infringement, then any patent licenses
   45.90 +      granted to You under this License for that Work shall terminate
   45.91 +      as of the date such litigation is filed.
   45.92 +
   45.93 +   4. Redistribution. You may reproduce and distribute copies of the
   45.94 +      Work or Derivative Works thereof in any medium, with or without
   45.95 +      modifications, and in Source or Object form, provided that You
   45.96 +      meet the following conditions:
   45.97 +
   45.98 +      (a) You must give any other recipients of the Work or
   45.99 +          Derivative Works a copy of this License; and
  45.100 +
  45.101 +      (b) You must cause any modified files to carry prominent notices
  45.102 +          stating that You changed the files; and
  45.103 +
  45.104 +      (c) You must retain, in the Source form of any Derivative Works
  45.105 +          that You distribute, all copyright, patent, trademark, and
  45.106 +          attribution notices from the Source form of the Work,
  45.107 +          excluding those notices that do not pertain to any part of
  45.108 +          the Derivative Works; and
  45.109 +
  45.110 +      (d) If the Work includes a "NOTICE" text file as part of its
  45.111 +          distribution, then any Derivative Works that You distribute must
  45.112 +          include a readable copy of the attribution notices contained
  45.113 +          within such NOTICE file, excluding those notices that do not
  45.114 +          pertain to any part of the Derivative Works, in at least one
  45.115 +          of the following places: within a NOTICE text file distributed
  45.116 +          as part of the Derivative Works; within the Source form or
  45.117 +          documentation, if provided along with the Derivative Works; or,
  45.118 +          within a display generated by the Derivative Works, if and
  45.119 +          wherever such third-party notices normally appear. The contents
  45.120 +          of the NOTICE file are for informational purposes only and
  45.121 +          do not modify the License. You may add Your own attribution
  45.122 +          notices within Derivative Works that You distribute, alongside
  45.123 +          or as an addendum to the NOTICE text from the Work, provided
  45.124 +          that such additional attribution notices cannot be construed
  45.125 +          as modifying the License.
  45.126 +
  45.127 +      You may add Your own copyright statement to Your modifications and
  45.128 +      may provide additional or different license terms and conditions
  45.129 +      for use, reproduction, or distribution of Your modifications, or
  45.130 +      for any such Derivative Works as a whole, provided Your use,
  45.131 +      reproduction, and distribution of the Work otherwise complies with
  45.132 +      the conditions stated in this License.
  45.133 +
  45.134 +   5. Submission of Contributions. Unless You explicitly state otherwise,
  45.135 +      any Contribution intentionally submitted for inclusion in the Work
  45.136 +      by You to the Licensor shall be under the terms and conditions of
  45.137 +      this License, without any additional terms or conditions.
  45.138 +      Notwithstanding the above, nothing herein shall supersede or modify
  45.139 +      the terms of any separate license agreement you may have executed
  45.140 +      with Licensor regarding such Contributions.
  45.141 +
  45.142 +   6. Trademarks. This License does not grant permission to use the trade
  45.143 +      names, trademarks, service marks, or product names of the Licensor,
  45.144 +      except as required for reasonable and customary use in describing the
  45.145 +      origin of the Work and reproducing the content of the NOTICE file.
  45.146 +
  45.147 +   7. Disclaimer of Warranty. Unless required by applicable law or
  45.148 +      agreed to in writing, Licensor provides the Work (and each
  45.149 +      Contributor provides its Contributions) on an "AS IS" BASIS,
  45.150 +      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
  45.151 +      implied, including, without limitation, any warranties or conditions
  45.152 +      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
  45.153 +      PARTICULAR PURPOSE. You are solely responsible for determining the
  45.154 +      appropriateness of using or redistributing the Work and assume any
  45.155 +      risks associated with Your exercise of permissions under this License.
  45.156 +
  45.157 +   8. Limitation of Liability. In no event and under no legal theory,
  45.158 +      whether in tort (including negligence), contract, or otherwise,
  45.159 +      unless required by applicable law (such as deliberate and grossly
  45.160 +      negligent acts) or agreed to in writing, shall any Contributor be
  45.161 +      liable to You for damages, including any direct, indirect, special,
  45.162 +      incidental, or consequential damages of any character arising as a
  45.163 +      result of this License or out of the use or inability to use the
  45.164 +      Work (including but not limited to damages for loss of goodwill,
  45.165 +      work stoppage, computer failure or malfunction, or any and all
  45.166 +      other commercial damages or losses), even if such Contributor
  45.167 +      has been advised of the possibility of such damages.
  45.168 +
  45.169 +   9. Accepting Warranty or Additional Liability. While redistributing
  45.170 +      the Work or Derivative Works thereof, You may choose to offer,
  45.171 +      and charge a fee for, acceptance of support, warranty, indemnity,
  45.172 +      or other liability obligations and/or rights consistent with this
  45.173 +      License. However, in accepting such obligations, You may act only
  45.174 +      on Your own behalf and on Your sole responsibility, not on behalf
  45.175 +      of any other Contributor, and only if You agree to indemnify,
  45.176 +      defend, and hold each Contributor harmless for any liability
  45.177 +      incurred by, or claims asserted against, such Contributor by reason
  45.178 +      of your accepting any such warranty or additional liability.
  45.179 +
  45.180 +   END OF TERMS AND CONDITIONS
  45.181 +
  45.182 +   APPENDIX: How to apply the Apache License to your work.
  45.183 +
  45.184 +      To apply the Apache License to your work, attach the following
  45.185 +      boilerplate notice, with the fields enclosed by brackets "[]"
  45.186 +      replaced with your own identifying information. (Don't include
  45.187 +      the brackets!)  The text should be enclosed in the appropriate
  45.188 +      comment syntax for the file format. We also recommend that a
  45.189 +      file or class name and description of purpose be included on the
  45.190 +      same "printed page" as the copyright notice for easier
  45.191 +      identification within third-party archives.
  45.192 +
  45.193 +   Copyright [yyyy] [name of copyright owner]
  45.194 +
  45.195 +   Licensed under the Apache License, Version 2.0 (the "License");
  45.196 +   you may not use this file except in compliance with the License.
  45.197 +   You may obtain a copy of the License at
  45.198 +
  45.199 +       http://www.apache.org/licenses/LICENSE-2.0
  45.200 +
  45.201 +   Unless required by applicable law or agreed to in writing, software
  45.202 +   distributed under the License is distributed on an "AS IS" BASIS,
  45.203 +   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  45.204 +   See the License for the specific language governing permissions and
  45.205 +   limitations under the License.
  45.206 \ No newline at end of file
    46.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    46.2 +++ b/Touchgui/plugins/org.apache.cordova.dialogs/NOTICE	Thu Jun 04 14:50:33 2015 +0200
    46.3 @@ -0,0 +1,5 @@
    46.4 +Apache Cordova
    46.5 +Copyright 2012 The Apache Software Foundation
    46.6 +
    46.7 +This product includes software developed at
    46.8 +The Apache Software Foundation (http://www.apache.org/).
    47.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    47.2 +++ b/Touchgui/plugins/org.apache.cordova.dialogs/README.md	Thu Jun 04 14:50:33 2015 +0200
    47.3 @@ -0,0 +1,22 @@
    47.4 +<!---
    47.5 + license: Licensed to the Apache Software Foundation (ASF) under one
    47.6 +         or more contributor license agreements.  See the NOTICE file
    47.7 +         distributed with this work for additional information
    47.8 +         regarding copyright ownership.  The ASF licenses this file
    47.9 +         to you under the Apache License, Version 2.0 (the
   47.10 +         "License"); you may not use this file except in compliance
   47.11 +         with the License.  You may obtain a copy of the License at
   47.12 +
   47.13 +           http://www.apache.org/licenses/LICENSE-2.0
   47.14 +
   47.15 +         Unless required by applicable law or agreed to in writing,
   47.16 +         software distributed under the License is distributed on an
   47.17 +         "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
   47.18 +         KIND, either express or implied.  See the License for the
   47.19 +         specific language governing permissions and limitations
   47.20 +         under the License.
   47.21 +-->
   47.22 +
   47.23 +# org.apache.cordova.dialogs
   47.24 +
   47.25 +Plugin documentation: [doc/index.md](doc/index.md)
    48.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    48.2 +++ b/Touchgui/plugins/org.apache.cordova.dialogs/RELEASENOTES.md	Thu Jun 04 14:50:33 2015 +0200
    48.3 @@ -0,0 +1,112 @@
    48.4 +<!--
    48.5 +#
    48.6 +# Licensed to the Apache Software Foundation (ASF) under one
    48.7 +# or more contributor license agreements.  See the NOTICE file
    48.8 +# distributed with this work for additional information
    48.9 +# regarding copyright ownership.  The ASF licenses this file
   48.10 +# to you under the Apache License, Version 2.0 (the
   48.11 +# "License"); you may not use this file except in compliance
   48.12 +# with the License.  You may obtain a copy of the License at
   48.13 +# 
   48.14 +# http://www.apache.org/licenses/LICENSE-2.0
   48.15 +# 
   48.16 +# Unless required by applicable law or agreed to in writing,
   48.17 +# software distributed under the License is distributed on an
   48.18 +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
   48.19 +#  KIND, either express or implied.  See the License for the
   48.20 +# specific language governing permissions and limitations
   48.21 +# under the License.
   48.22 +#
   48.23 +-->
   48.24 +# Release Notes
   48.25 +
   48.26 +### 0.2.2 (Sept 25, 2013)
   48.27 +* CB-4889 bumping&resetting version
   48.28 +* [windows8] commandProxy was moved
   48.29 +* CB-4889 renaming reference in Notification.cs
   48.30 +* CB-4889 renaming org.apache.cordova.core.dialogs to org.apache.cordova.dialogs
   48.31 +* Rename CHANGELOG.md -> RELEASENOTES.md
   48.32 +* [CB-4592] [Blackberry10] Added beep support
   48.33 +* [CB-4752] Incremented plugin version on dev branch.
   48.34 +
   48.35 + ### 0.2.3 (Oct 28, 2013)
   48.36 +* CB-5128: added repo + issue tag to plugin.xml for dialogs plugin
   48.37 +* new plugin execute arguments supported
   48.38 +* new plugin style
   48.39 +* smaller fonts styling input
   48.40 +* img files copied inside plugin
   48.41 +* style added
   48.42 +* prompt added
   48.43 +* styling from James
   48.44 +* fixed "exec" calls addedd css, but not working yet
   48.45 +* first (blind) try
   48.46 +* [CB-4915] Incremented plugin version on dev branch.
   48.47 +
   48.48 + 
   48.49 +### 0.2.4 (Dec 4, 2013)
   48.50 +* add ubuntu platform
   48.51 +* 1. Added amazon-fireos platform. 2. Change to use amazon-fireos as a platform if user agent string contains 'cordova-amazon-fireos'.
   48.52 +* added beep funtionality using ms-winsoundevent:Notfication.Default
   48.53 +
   48.54 +### 0.2.5 (Jan 02, 2014)
   48.55 +* CB-4696 Fix compile error for Xcode 4.5.
   48.56 +* CB-5658 Add doc/index.md for Dialogs plugin
   48.57 +* CB-3762 Change prompt default to empty string
   48.58 +* Move images from css to img
   48.59 +
   48.60 +### 0.2.6 (Feb 05, 2014)
   48.61 +* no need to recreate the manifest.webapp file after each `cordova prepare` for FFOS
   48.62 +* FFOS description added
   48.63 +
   48.64 +### 0.2.7 (Apr 17, 2014)
   48.65 +* CB-6212: [iOS] fix warnings compiled under arm64 64-bit
   48.66 +* CB-6411: [BlackBerry10] Work around Audio playback issue
   48.67 +* CB-6411: [BlackBerry10] Updates to beep
   48.68 +* CB-6422: [windows8] use cordova/exec/proxy
   48.69 +* CB-6460: Update license headers
   48.70 +* Add NOTICE file
   48.71 +
   48.72 +### 0.2.8 (Jun 05, 2014)
   48.73 +* CB-6801 Add license
   48.74 +* running original windows.open, inAppBrowser is overriding it no need to place CSS in every page anymore
   48.75 +* CB-5945 [Windows8] do not call success callbacks until dialog is dismissed
   48.76 +* CB-4616 Returned index 0 was not documented for notification.prompt
   48.77 +* update docs to state that prompt is supported on windowsphone
   48.78 +* CB-6528 allow scroll on alert message content
   48.79 +* [CB-6628][amazon-fireos]dialogs plugin's confirm and prompt methods dont work confirm() method was missing amazon-fireos platform check. added that. prompt() method had bug. It is executed in a worker thread that does not have a message queue(or Looper object) associated with it and hence "can't create a handler" exception is thrown. To fix this issue, we need to create the EditText widget from within the UI thread. This was fixed sometime ago when we added fireos platform but commit got lost somewhere. So fixing it again now.
   48.80 +* CB-6491 add CONTRIBUTING.md
   48.81 +* Added check for isFinishing() on the parent activity to prevent crashes when trying to display dialogs when activity is in this phase of it's lifecycle
   48.82 +* CB-4966 Dialogs are in window now No need to add anything to manifest or index.html
   48.83 +* Removing FirefoxOS Quirks * no need to add special permission (it's different API with the same name) * notification.css is added automatically
   48.84 +
   48.85 +### 0.2.9 (Aug 06, 2014)
   48.86 +* ubuntu: pass proper arguments to prompt callback
   48.87 +* ubuntu: use TextField instead of TextInput
   48.88 +* ubuntu: proper message escaping before passing to qml
   48.89 +* **FFOS** update notification.js
   48.90 +* CB-6127 Updated translations for docs
   48.91 +* android: Explicitly apply default theme to dialogs
   48.92 +* Fix Beep exception on Android when no argument passed
   48.93 +
   48.94 +### 0.2.10 (Sep 17, 2014)
   48.95 +* CB-7538 Android beep thread fix Beep now executes in it's own thread. It was previously executing in the main UI thread which was causing the application to lock up will the beep was occurring.  Closing pull request
   48.96 +* Set dialog text dir to locale
   48.97 +* Renamed test dir, added nested plugin.xml
   48.98 +* added documentation for manual tests
   48.99 +* CB-6965 Added manual tests
  48.100 +* CB-6965 Port notification tests to test-framework
  48.101 +
  48.102 +### 0.2.11 (Dec 02, 2014)
  48.103 +* [CB-7737] lower min height for alert
  48.104 +* CB-8038 backslash getting escaped twice in **BB10**
  48.105 +* CB-8029 test 1-based indexing for confirm
  48.106 +* CB-7639 Update docs + manual tests
  48.107 +* CB-7639 Revert back `isAlertShowing` flag in case of exception to prevent queuing of future dialogs.
  48.108 +* CB-7639 Handle button labels as array on windows
  48.109 +* CB-7977 Mention `deviceready` in plugin docs
  48.110 +* Check for `setTextDirection` API level
  48.111 +* **Android** Make spinner dialog to use `THEME_DEVICE_DEFAULT_LIGHT` (same as the other dialogs)
  48.112 +* **Android** Unbreak `API` level < `14`
  48.113 +* CB-7414 **BB10** Document callback parameter for `navigator.notification.alert`
  48.114 +* CB-7700 cordova-plugin-dialogs documentation translation: cordova-plugin-dialogs
  48.115 +* CB-7571 Bump version of nested plugin to match parent plugin
    49.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    49.2 +++ b/Touchgui/plugins/org.apache.cordova.dialogs/doc/de/index.md	Thu Jun 04 14:50:33 2015 +0200
    49.3 @@ -0,0 +1,247 @@
    49.4 +<!---
    49.5 +    Licensed to the Apache Software Foundation (ASF) under one
    49.6 +    or more contributor license agreements.  See the NOTICE file
    49.7 +    distributed with this work for additional information
    49.8 +    regarding copyright ownership.  The ASF licenses this file
    49.9 +    to you under the Apache License, Version 2.0 (the
   49.10 +    "License"); you may not use this file except in compliance
   49.11 +    with the License.  You may obtain a copy of the License at
   49.12 +
   49.13 +      http://www.apache.org/licenses/LICENSE-2.0
   49.14 +
   49.15 +    Unless required by applicable law or agreed to in writing,
   49.16 +    software distributed under the License is distributed on an
   49.17 +    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
   49.18 +    KIND, either express or implied.  See the License for the
   49.19 +    specific language governing permissions and limitations
   49.20 +    under the License.
   49.21 +-->
   49.22 +
   49.23 +# org.apache.cordova.dialogs
   49.24 +
   49.25 +Dieses Plugin ermöglicht den Zugriff auf einige native Dialog-UI-Elemente.
   49.26 +
   49.27 +## Installation
   49.28 +
   49.29 +    cordova plugin add org.apache.cordova.dialogs
   49.30 +    
   49.31 +
   49.32 +## Methoden
   49.33 +
   49.34 +*   `navigator.notification.alert`
   49.35 +*   `navigator.notification.confirm`
   49.36 +*   `navigator.notification.prompt`
   49.37 +*   `navigator.notification.beep`
   49.38 +
   49.39 +## navigator.notification.alert
   49.40 +
   49.41 +Zeigt eine benutzerdefinierte Warnung oder Dialogfeld Feld. Die meisten Implementierungen von Cordova ein native Dialogfeld für dieses Feature verwenden, aber einige Plattformen des Browsers `alert` Funktion, die in der Regel weniger anpassbar ist.
   49.42 +
   49.43 +    Navigator.Notification.Alert (Message, AlertCallback, [Titel], [ButtonName])
   49.44 +    
   49.45 +
   49.46 +*   **Nachricht**: Dialogfeld Nachricht. *(String)*
   49.47 +
   49.48 +*   **AlertCallback**: Callback aufgerufen wird, wenn Warnungs-Dialogfeld geschlossen wird. *(Funktion)*
   49.49 +
   49.50 +*   **Titel**: Dialog "Titel". *(String)* (Optional, Standard ist`Alert`)
   49.51 +
   49.52 +*   **ButtonName**: Name der Schaltfläche. *(String)* (Optional, Standard ist`OK`)
   49.53 +
   49.54 +### Beispiel
   49.55 +
   49.56 +    function alertDismissed() {
   49.57 +        // do something
   49.58 +    }
   49.59 +    
   49.60 +    navigator.notification.alert(
   49.61 +        'You are the winner!',  // message
   49.62 +        alertDismissed,         // callback
   49.63 +        'Game Over',            // title
   49.64 +        'Done'                  // buttonName
   49.65 +    );
   49.66 +    
   49.67 +
   49.68 +### Unterstützte Plattformen
   49.69 +
   49.70 +*   Amazon Fire OS
   49.71 +*   Android
   49.72 +*   BlackBerry 10
   49.73 +*   Firefox OS
   49.74 +*   iOS
   49.75 +*   Tizen
   49.76 +*   Windows Phone 7 und 8
   49.77 +*   Windows 8
   49.78 +
   49.79 +### Windows Phone 7 und 8 Eigenarten
   49.80 +
   49.81 +*   Es gibt keine eingebaute Datenbanksuchroutine-Warnung, aber Sie können binden, wie folgt zu nennen `alert()` im globalen Gültigkeitsbereich:
   49.82 +    
   49.83 +        window.alert = navigator.notification.alert;
   49.84 +        
   49.85 +
   49.86 +*   Beide `alert` und `confirm` sind nicht blockierende Aufrufe, die Ergebnisse davon nur asynchron sind.
   49.87 +
   49.88 +### Firefox OS Macken:
   49.89 +
   49.90 +Beide Native blockierenden `window.alert()` und nicht-blockierende `navigator.notification.alert()` stehen zur Verfügung.
   49.91 +
   49.92 +## navigator.notification.confirm
   49.93 +
   49.94 +Zeigt das Dialogfeld anpassbare Bestätigung.
   49.95 +
   49.96 +    navigator.notification.confirm(message, confirmCallback, [title], [buttonLabels])
   49.97 +    
   49.98 +
   49.99 +*   **Nachricht**: Dialogfeld Nachricht. *(String)*
  49.100 +
  49.101 +*   **ConfirmCallback**: Callback aufgerufen wird, mit Index gedrückt (1, 2 oder 3) oder wenn das Dialogfeld geschlossen wird, ohne einen Tastendruck (0). *(Funktion)*
  49.102 +
  49.103 +*   **Titel**: Dialog "Titel". *(String)* (Optional, Standard ist`Confirm`)
  49.104 +
  49.105 +*   **ButtonLabels**: Array von Zeichenfolgen, die Schaltflächenbezeichnungen angeben. *(Array)* (Optional, Standard ist [ `OK,Cancel` ])
  49.106 +
  49.107 +### confirmCallback
  49.108 +
  49.109 +Die `confirmCallback` wird ausgeführt, wenn der Benutzer eine der Schaltflächen im Dialogfeld zur Bestätigung drückt.
  49.110 +
  49.111 +Der Rückruf dauert das Argument `buttonIndex` *(Anzahl)*, die der Index der Schaltfläche gedrückt ist. Beachten Sie, dass der Index 1-basierte Indizierung, verwendet, sodass der Wert ist `1` , `2` , `3` , etc..
  49.112 +
  49.113 +### Beispiel
  49.114 +
  49.115 +    function onConfirm(buttonIndex) {
  49.116 +        alert('You selected button ' + buttonIndex);
  49.117 +    }
  49.118 +    
  49.119 +    navigator.notification.confirm(
  49.120 +        'You are the winner!', // message
  49.121 +         onConfirm,            // callback to invoke with index of button pressed
  49.122 +        'Game Over',           // title
  49.123 +        ['Restart','Exit']     // buttonLabels
  49.124 +    );
  49.125 +    
  49.126 +
  49.127 +### Unterstützte Plattformen
  49.128 +
  49.129 +*   Amazon Fire OS
  49.130 +*   Android
  49.131 +*   BlackBerry 10
  49.132 +*   Firefox OS
  49.133 +*   iOS
  49.134 +*   Tizen
  49.135 +*   Windows Phone 7 und 8
  49.136 +*   Windows 8
  49.137 +
  49.138 +### Windows Phone 7 und 8 Eigenarten
  49.139 +
  49.140 +*   Es gibt keine integrierte Browser-Funktion für `window.confirm` , aber Sie können es binden, indem Sie zuweisen:
  49.141 +    
  49.142 +        window.confirm = navigator.notification.confirm;
  49.143 +        
  49.144 +
  49.145 +*   Aufrufe von `alert` und `confirm` sind nicht blockierend, so dass das Ergebnis nur asynchron zur Verfügung steht.
  49.146 +
  49.147 +### Firefox OS Macken:
  49.148 +
  49.149 +Beide Native blockierenden `window.confirm()` und nicht-blockierende `navigator.notification.confirm()` stehen zur Verfügung.
  49.150 +
  49.151 +## navigator.notification.prompt
  49.152 +
  49.153 +Zeigt eine native Dialogfeld, das mehr als des Browsers anpassbar ist `prompt` Funktion.
  49.154 +
  49.155 +    navigator.notification.prompt(message, promptCallback, [title], [buttonLabels], [defaultText])
  49.156 +    
  49.157 +
  49.158 +*   **Nachricht**: Dialogfeld Nachricht. *(String)*
  49.159 +
  49.160 +*   **PromptCallback**: Callback aufgerufen wird, mit Index gedrückt (1, 2 oder 3) oder wenn das Dialogfeld geschlossen wird, ohne einen Tastendruck (0). *(Funktion)*
  49.161 +
  49.162 +*   **Titel**: Dialog Title *(String)* (Optional, Standard ist`Prompt`)
  49.163 +
  49.164 +*   **ButtonLabels**: Array von Zeichenfolgen angeben Schaltfläche Etiketten *(Array)* (Optional, Standard ist`["OK","Cancel"]`)
  49.165 +
  49.166 +*   **DefaultText**: Standard-Textbox Eingabewert ( `String` ) (Optional, Standard: leere Zeichenfolge)
  49.167 +
  49.168 +### promptCallback
  49.169 +
  49.170 +Die `promptCallback` wird ausgeführt, wenn der Benutzer eine der Schaltflächen im Eingabedialogfeld drückt. Die `results` an den Rückruf übergebene Objekt enthält die folgenden Eigenschaften:
  49.171 +
  49.172 +*   **ButtonIndex**: der Index der Schaltfläche gedrückt. *(Anzahl)* Beachten Sie, dass der Index 1-basierte Indizierung, verwendet, sodass der Wert ist `1` , `2` , `3` , etc..
  49.173 +
  49.174 +*   **Eingang1**: in Eingabedialogfeld eingegebenen Text. *(String)*
  49.175 +
  49.176 +### Beispiel
  49.177 +
  49.178 +    function onPrompt(results) {
  49.179 +        alert("You selected button number " + results.buttonIndex + " and entered " + results.input1);
  49.180 +    }
  49.181 +    
  49.182 +    navigator.notification.prompt(
  49.183 +        'Please enter your name',  // message
  49.184 +        onPrompt,                  // callback to invoke
  49.185 +        'Registration',            // title
  49.186 +        ['Ok','Exit'],             // buttonLabels
  49.187 +        'Jane Doe'                 // defaultText
  49.188 +    );
  49.189 +    
  49.190 +
  49.191 +### Unterstützte Plattformen
  49.192 +
  49.193 +*   Amazon Fire OS
  49.194 +*   Android
  49.195 +*   Firefox OS
  49.196 +*   iOS
  49.197 +*   Windows Phone 7 und 8
  49.198 +
  49.199 +### Android Eigenarten
  49.200 +
  49.201 +*   Android unterstützt maximal drei Schaltflächen und mehr als das ignoriert.
  49.202 +
  49.203 +*   Auf Android 3.0 und höher, werden die Schaltflächen in umgekehrter Reihenfolge für Geräte angezeigt, die das Holo-Design verwenden.
  49.204 +
  49.205 +### Firefox OS Macken:
  49.206 +
  49.207 +Beide Native blockierenden `window.prompt()` und nicht-blockierende `navigator.notification.prompt()` stehen zur Verfügung.
  49.208 +
  49.209 +## navigator.notification.beep
  49.210 +
  49.211 +Das Gerät spielt einen Signalton sound.
  49.212 +
  49.213 +    navigator.notification.beep(times);
  49.214 +    
  49.215 +
  49.216 +*   **Zeiten**: die Anzahl der Wiederholungen des Signaltons. *(Anzahl)*
  49.217 +
  49.218 +### Beispiel
  49.219 +
  49.220 +    // Beep twice!
  49.221 +    navigator.notification.beep(2);
  49.222 +    
  49.223 +
  49.224 +### Unterstützte Plattformen
  49.225 +
  49.226 +*   Amazon Fire OS
  49.227 +*   Android
  49.228 +*   BlackBerry 10
  49.229 +*   iOS
  49.230 +*   Tizen
  49.231 +*   Windows Phone 7 und 8
  49.232 +*   Windows 8
  49.233 +
  49.234 +### Amazon Fire OS Macken
  49.235 +
  49.236 +*   Amazon Fire OS spielt die Standardeinstellung **Akustische Benachrichtigung** unter **Einstellungen/Display & Sound** Bereich angegeben.
  49.237 +
  49.238 +### Android Eigenarten
  49.239 +
  49.240 +*   Android spielt die Standardeinstellung **Benachrichtigung Klingelton** unter **Einstellungen/Sound & Display** -Panel angegeben.
  49.241 +
  49.242 +### Windows Phone 7 und 8 Eigenarten
  49.243 +
  49.244 +*   Stützt sich auf eine generische Piepton-Datei aus der Cordova-Distribution.
  49.245 +
  49.246 +### Tizen Macken
  49.247 +
  49.248 +*   Tizen implementiert Signaltöne durch Abspielen einer Audiodatei über die Medien API.
  49.249 +
  49.250 +*   Die Beep-Datei muss kurz sein, befinden muss einem `sounds` Unterverzeichnis des Stammverzeichnisses der Anwendung, und muss den Namen`beep.wav`.
  49.251 \ No newline at end of file
    50.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    50.2 +++ b/Touchgui/plugins/org.apache.cordova.dialogs/doc/es/index.md	Thu Jun 04 14:50:33 2015 +0200
    50.3 @@ -0,0 +1,247 @@
    50.4 +<!---
    50.5 +    Licensed to the Apache Software Foundation (ASF) under one
    50.6 +    or more contributor license agreements.  See the NOTICE file
    50.7 +    distributed with this work for additional information
    50.8 +    regarding copyright ownership.  The ASF licenses this file
    50.9 +    to you under the Apache License, Version 2.0 (the
   50.10 +    "License"); you may not use this file except in compliance
   50.11 +    with the License.  You may obtain a copy of the License at
   50.12 +
   50.13 +      http://www.apache.org/licenses/LICENSE-2.0
   50.14 +
   50.15 +    Unless required by applicable law or agreed to in writing,
   50.16 +    software distributed under the License is distributed on an
   50.17 +    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
   50.18 +    KIND, either express or implied.  See the License for the
   50.19 +    specific language governing permissions and limitations
   50.20 +    under the License.
   50.21 +-->
   50.22 +
   50.23 +# org.apache.cordova.dialogs
   50.24 +
   50.25 +Este plugin proporciona acceso a algunos elementos de la interfaz nativa de diálogo.
   50.26 +
   50.27 +## Instalación
   50.28 +
   50.29 +    cordova plugin add org.apache.cordova.dialogs
   50.30 +    
   50.31 +
   50.32 +## Métodos
   50.33 +
   50.34 +*   `navigator.notification.alert`
   50.35 +*   `navigator.notification.confirm`
   50.36 +*   `navigator.notification.prompt`
   50.37 +*   `navigator.notification.beep`
   50.38 +
   50.39 +## navigator.notification.alert
   50.40 +
   50.41 +Muestra un cuadro de alerta o diálogo personalizado. La mayoría de las implementaciones de Cordova utilizan un cuadro de diálogo nativa para esta característica, pero algunas plataformas utilizan el navegador `alert` la función, que es típicamente menos personalizable.
   50.42 +
   50.43 +    navigator.notification.alert(message, alertCallback, [title], [buttonName])
   50.44 +    
   50.45 +
   50.46 +*   **message**: mensaje de diálogo. *(String)*
   50.47 +
   50.48 +*   **alertCallback**: Callback para invocar al diálogo de alerta es desestimada. *(Función)*
   50.49 +
   50.50 +*   **title**: título de diálogo. *(String)* (Opcional, el valor predeterminado de `Alert`)
   50.51 +
   50.52 +*   **buttonName**: nombre del botón. *(String)* (Opcional, por defecto `Aceptar`)
   50.53 +
   50.54 +### Ejemplo
   50.55 +
   50.56 +    function alertDismissed() {
   50.57 +        // do something
   50.58 +    }
   50.59 +    
   50.60 +    navigator.notification.alert(
   50.61 +        'You are the winner!',  // message
   50.62 +        alertDismissed,         // callback
   50.63 +        'Game Over',            // title
   50.64 +        'Done'                  // buttonName
   50.65 +    );
   50.66 +    
   50.67 +
   50.68 +### Plataformas soportadas
   50.69 +
   50.70 +*   Amazon fire OS
   50.71 +*   Android
   50.72 +*   BlackBerry 10
   50.73 +*   Firefox OS
   50.74 +*   iOS
   50.75 +*   Tizen
   50.76 +*   Windows Phone 7 y 8
   50.77 +*   Windows 8
   50.78 +
   50.79 +### Windows Phone 7 y 8 rarezas
   50.80 +
   50.81 +*   No hay ninguna alerta del navegador integrado, pero puede enlazar uno proceda a llamar `alert()` en el ámbito global:
   50.82 +    
   50.83 +        window.alert = navigator.notification.alert;
   50.84 +        
   50.85 +
   50.86 +*   `alert` y `confirm` son non-blocking llamadas, cuyos resultados sólo están disponibles de forma asincrónica.
   50.87 +
   50.88 +### Firefox OS rarezas:
   50.89 +
   50.90 +Dos nativos de bloqueo `window.alert()` y no-bloqueo `navigator.notification.alert()` están disponibles.
   50.91 +
   50.92 +## navigator.notification.confirm
   50.93 +
   50.94 +Muestra un cuadro de diálogo de confirmación personalizables.
   50.95 +
   50.96 +    navigator.notification.confirm(message, confirmCallback, [title], [buttonLabels])
   50.97 +    
   50.98 +
   50.99 +*   **message**: mensaje de diálogo. *(String)*
  50.100 +
  50.101 +*   **confirmCallback**: Callback para invocar con índice de botón pulsado (1, 2 o 3) o cuando el diálogo es despedido sin la presión del botón (0). *(Función)*
  50.102 +
  50.103 +*   **title**: título de diálogo. *(String)* (Opcional, por defecto a `confirmar`)
  50.104 +
  50.105 +*   **buttonLabels**: matriz de cadenas especificando las etiquetas de botón. *(Matriz)* (Opcional, por defecto [`OK, cancelar`])
  50.106 +
  50.107 +### confirmCallback
  50.108 +
  50.109 +El `confirmCallback` se ejecuta cuando el usuario presiona uno de los botones en el cuadro de diálogo de confirmación.
  50.110 +
  50.111 +La devolución de llamada toma el argumento `buttonIndex` *(número)*, que es el índice del botón presionado. Tenga en cuenta que el índice utiliza uno basado en la indexación, así que el valor es `1`, `2`, `3`, etc..
  50.112 +
  50.113 +### Ejemplo
  50.114 +
  50.115 +    function onConfirm(buttonIndex) {
  50.116 +        alert('You selected button ' + buttonIndex);
  50.117 +    }
  50.118 +    
  50.119 +    navigator.notification.confirm(
  50.120 +        'You are the winner!', // message
  50.121 +         onConfirm,            // callback to invoke with index of button pressed
  50.122 +        'Game Over',           // title
  50.123 +        ['Restart','Exit']     // buttonLabels
  50.124 +    );
  50.125 +    
  50.126 +
  50.127 +### Plataformas soportadas
  50.128 +
  50.129 +*   Amazon fire OS
  50.130 +*   Android
  50.131 +*   BlackBerry 10
  50.132 +*   Firefox OS
  50.133 +*   iOS
  50.134 +*   Tizen
  50.135 +*   Windows Phone 7 y 8
  50.136 +*   Windows 8
  50.137 +
  50.138 +### Windows Phone 7 y 8 rarezas
  50.139 +
  50.140 +*   No hay ninguna función de navegador incorporado para `window.confirm`, pero lo puede enlazar mediante la asignación:
  50.141 +    
  50.142 +        window.confirm = navigator.notification.confirm;
  50.143 +        
  50.144 +
  50.145 +*   Llamadas de `alert` y `confirm` son non-blocking, así que el resultado sólo está disponible de forma asincrónica.
  50.146 +
  50.147 +### Firefox OS rarezas:
  50.148 +
  50.149 +Dos nativos de bloqueo `window.confirm()` y no-bloqueo `navigator.notification.confirm()` están disponibles.
  50.150 +
  50.151 +## navigator.notification.prompt
  50.152 +
  50.153 +Muestra un cuadro de diálogo nativa que es más personalizable que del navegador `prompt` función.
  50.154 +
  50.155 +    navigator.notification.prompt(message, promptCallback, [title], [buttonLabels], [defaultText])
  50.156 +    
  50.157 +
  50.158 +*   **message**: mensaje de diálogo. *(String)*
  50.159 +
  50.160 +*   **promptCallback**: Callback para invocar con índice del botón pulsado (1, 2 ó 3) o cuando el cuadro de diálogo es despedido sin la presión del botón (0). *(Función)*
  50.161 +
  50.162 +*   **title**: título *(String)* (opcional, por defecto `puntual` de diálogo)
  50.163 +
  50.164 +*   **buttonLabels**: matriz de cadenas especificando el botón etiquetas *(Array)* (opcional, por defecto `["OK", "Cancelar"]`)
  50.165 +
  50.166 +*   **defaultText**: valor de la entrada predeterminada textbox ( `String` ) (opcional, por defecto: cadena vacía)
  50.167 +
  50.168 +### promptCallback
  50.169 +
  50.170 +El `promptCallback` se ejecuta cuando el usuario presiona uno de los botones en el cuadro de diálogo pronto. El objeto de `resultados` pasado a la devolución de llamada contiene las siguientes propiedades:
  50.171 +
  50.172 +*   **buttonIndex**: el índice del botón presionado. *(Número)* Tenga en cuenta que el índice utiliza uno basado en la indexación, así que el valor es `1`, `2`, `3`, etc..
  50.173 +
  50.174 +*   **input1**: el texto introducido en el cuadro de diálogo pronto. *(String)*
  50.175 +
  50.176 +### Ejemplo
  50.177 +
  50.178 +    function onPrompt(results) {
  50.179 +        alert("You selected button number " + results.buttonIndex + " and entered " + results.input1);
  50.180 +    }
  50.181 +    
  50.182 +    navigator.notification.prompt(
  50.183 +        'Please enter your name',  // message
  50.184 +        onPrompt,                  // callback to invoke
  50.185 +        'Registration',            // title
  50.186 +        ['Ok','Exit'],             // buttonLabels
  50.187 +        'Jane Doe'                 // defaultText
  50.188 +    );
  50.189 +    
  50.190 +
  50.191 +### Plataformas soportadas
  50.192 +
  50.193 +*   Amazon fire OS
  50.194 +*   Android
  50.195 +*   Firefox OS
  50.196 +*   iOS
  50.197 +*   Windows Phone 7 y 8
  50.198 +
  50.199 +### Rarezas Android
  50.200 +
  50.201 +*   Android soporta un máximo de tres botones e ignora nada más.
  50.202 +
  50.203 +*   En Android 3.0 y posteriores, los botones se muestran en orden inverso para dispositivos que utilizan el tema de Holo.
  50.204 +
  50.205 +### Firefox OS rarezas:
  50.206 +
  50.207 +Dos nativos de bloqueo `window.prompt()` y no-bloqueo `navigator.notification.prompt()` están disponibles.
  50.208 +
  50.209 +## navigator.notification.beep
  50.210 +
  50.211 +El dispositivo reproduce un sonido sonido.
  50.212 +
  50.213 +    navigator.notification.beep(times);
  50.214 +    
  50.215 +
  50.216 +*   **times**: el número de veces a repetir la señal. *(Número)*
  50.217 +
  50.218 +### Ejemplo
  50.219 +
  50.220 +    / / Pitido dos veces! 
  50.221 +    navigator.notification.beep(2);
  50.222 +    
  50.223 +
  50.224 +### Plataformas soportadas
  50.225 +
  50.226 +*   Amazon fire OS
  50.227 +*   Android
  50.228 +*   BlackBerry 10
  50.229 +*   iOS
  50.230 +*   Tizen
  50.231 +*   Windows Phone 7 y 8
  50.232 +*   Windows 8
  50.233 +
  50.234 +### Amazon fuego OS rarezas
  50.235 +
  50.236 +*   Amazon fuego OS reproduce el **Sonido de notificación** especificados en el panel de **configuración/pantalla y sonido** por defecto.
  50.237 +
  50.238 +### Rarezas Android
  50.239 +
  50.240 +*   Android juega el **tono de notificación** especificados en el panel **ajustes de sonido y pantalla** por defecto.
  50.241 +
  50.242 +### Windows Phone 7 y 8 rarezas
  50.243 +
  50.244 +*   Se basa en un archivo de sonido genérico de la distribución de Cordova.
  50.245 +
  50.246 +### Rarezas Tizen
  50.247 +
  50.248 +*   Tizen implementa pitidos por reproducir un archivo de audio a través de los medios de comunicación API.
  50.249 +
  50.250 +*   El archivo de sonido debe ser corto, debe estar ubicado en un `sounds` subdirectorio del directorio raíz de la aplicación y deben ser nombrados`beep.wav`.
  50.251 \ No newline at end of file
    51.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    51.2 +++ b/Touchgui/plugins/org.apache.cordova.dialogs/doc/fr/index.md	Thu Jun 04 14:50:33 2015 +0200
    51.3 @@ -0,0 +1,247 @@
    51.4 +<!---
    51.5 +    Licensed to the Apache Software Foundation (ASF) under one
    51.6 +    or more contributor license agreements.  See the NOTICE file
    51.7 +    distributed with this work for additional information
    51.8 +    regarding copyright ownership.  The ASF licenses this file
    51.9 +    to you under the Apache License, Version 2.0 (the
   51.10 +    "License"); you may not use this file except in compliance
   51.11 +    with the License.  You may obtain a copy of the License at
   51.12 +
   51.13 +      http://www.apache.org/licenses/LICENSE-2.0
   51.14 +
   51.15 +    Unless required by applicable law or agreed to in writing,
   51.16 +    software distributed under the License is distributed on an
   51.17 +    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
   51.18 +    KIND, either express or implied.  See the License for the
   51.19 +    specific language governing permissions and limitations
   51.20 +    under the License.
   51.21 +-->
   51.22 +
   51.23 +# org.apache.cordova.dialogs
   51.24 +
   51.25 +Ce plugin permet d'accéder à certains éléments d'interface utilisateur native de dialogue.
   51.26 +
   51.27 +## Installation
   51.28 +
   51.29 +    cordova plugin add org.apache.cordova.dialogs
   51.30 +    
   51.31 +
   51.32 +## Méthodes
   51.33 +
   51.34 +*   `navigator.notification.alert`
   51.35 +*   `navigator.notification.confirm`
   51.36 +*   `navigator.notification.prompt`
   51.37 +*   `navigator.notification.beep`
   51.38 +
   51.39 +## navigator.notification.alert
   51.40 +
   51.41 +Affiche une boîte de dialogue ou d'alerte personnalisé. La plupart des implémentations de Cordova utilisent une boîte de dialogue natives pour cette fonctionnalité, mais certaines plates-formes du navigateur `alert` fonction, qui est généralement moins personnalisable.
   51.42 +
   51.43 +    Navigator.notification.Alert (message, alertCallback, [titre], [buttonName])
   51.44 +    
   51.45 +
   51.46 +*   **message**: message de la boîte de dialogue. *(String)*
   51.47 +
   51.48 +*   **alertCallback**: callback à appeler lorsque la boîte de dialogue d'alerte est rejetée. *(Fonction)*
   51.49 +
   51.50 +*   **titre**: titre de la boîte de dialogue. *(String)* (Facultatif, par défaut`Alert`)
   51.51 +
   51.52 +*   **buttonName**: nom du bouton. *(String)* (Facultatif, par défaut`OK`)
   51.53 +
   51.54 +### Exemple
   51.55 +
   51.56 +    function alertDismissed() {
   51.57 +        // do something
   51.58 +    }
   51.59 +    
   51.60 +    navigator.notification.alert(
   51.61 +        'You are the winner!',  // message
   51.62 +        alertDismissed,         // callback
   51.63 +        'Game Over',            // title
   51.64 +        'Done'                  // buttonName
   51.65 +    );
   51.66 +    
   51.67 +
   51.68 +### Plates-formes prises en charge
   51.69 +
   51.70 +*   Amazon Fire OS
   51.71 +*   Android
   51.72 +*   BlackBerry 10
   51.73 +*   Firefox OS
   51.74 +*   iOS
   51.75 +*   Tizen
   51.76 +*   Windows Phone 7 et 8
   51.77 +*   Windows 8
   51.78 +
   51.79 +### Windows Phone 7 et 8 Quirks
   51.80 +
   51.81 +*   Il n'y a aucune boîte de dialogue d'alerte intégrée au navigateur, mais vous pouvez en lier une pour appeler `alert()` dans le scope global:
   51.82 +    
   51.83 +        window.alert = navigator.notification.alert;
   51.84 +        
   51.85 +
   51.86 +*   Les deux appels `alert` et `confirm` sont non-blocants, leurs résultats ne sont disponibles que de façon asynchrone.
   51.87 +
   51.88 +### Firefox OS Quirks :
   51.89 +
   51.90 +Les deux indigènes bloquant `window.alert()` et non-bloquante `navigator.notification.alert()` sont disponibles.
   51.91 +
   51.92 +## navigator.notification.confirm
   51.93 +
   51.94 +Affiche une boîte de dialogue de confirmation personnalisable.
   51.95 +
   51.96 +    navigator.notification.confirm(message, confirmCallback, [title], [buttonLabels])
   51.97 +    
   51.98 +
   51.99 +*   **message**: message de la boîte de dialogue. *(String)*
  51.100 +
  51.101 +*   **confirmCallback**: callback à appeler avec l'index du bouton pressé (1, 2 ou 3) ou lorsque la boîte de dialogue est fermée sans qu'un bouton ne soit pressé (0). *(Fonction)*
  51.102 +
  51.103 +*   **titre**: titre de dialogue. *(String)* (Facultatif, par défaut`Confirm`)
  51.104 +
  51.105 +*   **buttonLabels**: tableau de chaînes spécifiant les étiquettes des boutons. *(Array)* (Optionnel, par défaut, [ `OK,Cancel` ])
  51.106 +
  51.107 +### confirmCallback
  51.108 +
  51.109 +Le `confirmCallback` s'exécute lorsque l'utilisateur appuie sur un bouton dans la boîte de dialogue de confirmation.
  51.110 +
  51.111 +Le rappel prend l'argument `buttonIndex` *(nombre)*, qui est l'index du bouton activé. Notez que l'index utilise base d'indexation, la valeur est `1` , `2` , `3` , etc..
  51.112 +
  51.113 +### Exemple
  51.114 +
  51.115 +    function onConfirm(buttonIndex) {
  51.116 +        alert('You selected button ' + buttonIndex);
  51.117 +    }
  51.118 +    
  51.119 +    navigator.notification.confirm(
  51.120 +        'You are the winner!', // message
  51.121 +         onConfirm,            // callback to invoke with index of button pressed
  51.122 +        'Game Over',           // title
  51.123 +        ['Restart','Exit']     // buttonLabels
  51.124 +    );
  51.125 +    
  51.126 +
  51.127 +### Plates-formes prises en charge
  51.128 +
  51.129 +*   Amazon Fire OS
  51.130 +*   Android
  51.131 +*   BlackBerry 10
  51.132 +*   Firefox OS
  51.133 +*   iOS
  51.134 +*   Paciarelli
  51.135 +*   Windows Phone 7 et 8
  51.136 +*   Windows 8
  51.137 +
  51.138 +### Windows Phone 7 et 8 Quirks
  51.139 +
  51.140 +*   Il n'y a aucune fonction intégrée au navigateur pour `window.confirm`, mais vous pouvez en lier une en affectant:
  51.141 +    
  51.142 +        window.confirm = navigator.notification.confirm ;
  51.143 +        
  51.144 +
  51.145 +*   Les appels à `alert` et `confirm` sont non-bloquants, donc le résultat est seulement disponible de façon asynchrone.
  51.146 +
  51.147 +### Firefox OS Quirks :
  51.148 +
  51.149 +Les deux indigènes bloquant `window.confirm()` et non-bloquante `navigator.notification.confirm()` sont disponibles.
  51.150 +
  51.151 +## navigator.notification.prompt
  51.152 +
  51.153 +Affiche une boîte de dialogue natif qui est plus personnalisable que le navigateur `prompt` fonction.
  51.154 +
  51.155 +    navigator.notification.prompt(message, promptCallback, [title], [buttonLabels], [defaultText])
  51.156 +    
  51.157 +
  51.158 +*   **message**: message de la boîte de dialogue. *(String)*
  51.159 +
  51.160 +*   **promptCallback**: rappel d'invoquer avec l'index du bouton pressé (1, 2 ou 3) ou lorsque la boîte de dialogue est fermée sans une presse de bouton (0). *(Fonction)*
  51.161 +
  51.162 +*   **titre**: titre de la boîte de dialogue. *(String)* (Facultatif, par défaut`Alert`)
  51.163 +
  51.164 +*   **buttonLabels**: tableau de chaînes spécifiant les étiquettes de boutons *(Array)* (facultatif, par défaut, les étiquettes `["OK","Cancel"]`)
  51.165 +
  51.166 +*   **defaultText**: texte par défaut de la zone de texte ( `String` ) (en option, par défaut : chaîne vide)
  51.167 +
  51.168 +### promptCallback
  51.169 +
  51.170 +Le `promptCallback` s'exécute lorsque l'utilisateur appuie sur un bouton dans la boîte de dialogue d'invite. Le `results` objet passé au rappel contient les propriétés suivantes :
  51.171 +
  51.172 +*   **buttonIndex**: l'index du bouton activé. *(Nombre)* Notez que l'index utilise une indexation de base 1, donc la valeur est `1` , `2` , `3` , etc.
  51.173 +
  51.174 +*   **entrée 1**: le texte entré dans la boîte de dialogue d'invite. *(String)*
  51.175 +
  51.176 +### Exemple
  51.177 +
  51.178 +    function onPrompt(results) {
  51.179 +        alert("You selected button number " + results.buttonIndex + " and entered " + results.input1);
  51.180 +    }
  51.181 +    
  51.182 +    navigator.notification.prompt(
  51.183 +        'Please enter your name',  // message
  51.184 +        onPrompt,                  // callback to invoke
  51.185 +        'Registration',            // title
  51.186 +        ['Ok','Exit'],             // buttonLabels
  51.187 +        'Jane Doe'                 // defaultText
  51.188 +    );
  51.189 +    
  51.190 +
  51.191 +### Plates-formes prises en charge
  51.192 +
  51.193 +*   Amazon Fire OS
  51.194 +*   Android
  51.195 +*   Firefox OS
  51.196 +*   iOS
  51.197 +*   Windows Phone 7 et 8
  51.198 +
  51.199 +### Quirks Android
  51.200 +
  51.201 +*   Android prend en charge un maximum de trois boutons et ignore plus que cela.
  51.202 +
  51.203 +*   Sur Android 3.0 et versions ultérieures, les boutons sont affichés dans l'ordre inverse pour les appareils qui utilisent le thème Holo.
  51.204 +
  51.205 +### Firefox OS Quirks :
  51.206 +
  51.207 +Les deux indigènes bloquant `window.prompt()` et non-bloquante `navigator.notification.prompt()` sont disponibles.
  51.208 +
  51.209 +## navigator.notification.beep
  51.210 +
  51.211 +Le dispositif joue un bip sonore.
  51.212 +
  51.213 +    navigator.notification.beep(times);
  51.214 +    
  51.215 +
  51.216 +*   **temps**: le nombre de fois répéter le bip. *(Nombre)*
  51.217 +
  51.218 +### Exemple
  51.219 +
  51.220 +    // Beep twice!
  51.221 +    navigator.notification.beep(2);
  51.222 +    
  51.223 +
  51.224 +### Plates-formes prises en charge
  51.225 +
  51.226 +*   Amazon Fire OS
  51.227 +*   Android
  51.228 +*   BlackBerry 10
  51.229 +*   iOS
  51.230 +*   Paciarelli
  51.231 +*   Windows Phone 7 et 8
  51.232 +*   Windows 8
  51.233 +
  51.234 +### Amazon Fire OS Quirks
  51.235 +
  51.236 +*   Amazon Fire OS joue la valeur par défaut le **Son de Notification** spécifié sous le panneau **d'affichage des réglages/& Sound** .
  51.237 +
  51.238 +### Quirks Android
  51.239 +
  51.240 +*   Android joue la **sonnerie de Notification** spécifié sous le panneau des **réglages/son et affichage** de valeur par défaut.
  51.241 +
  51.242 +### Windows Phone 7 et 8 Quirks
  51.243 +
  51.244 +*   S'appuie sur un fichier générique bip de la distribution de Cordova.
  51.245 +
  51.246 +### Bizarreries de paciarelli
  51.247 +
  51.248 +*   Paciarelli implémente les bips en lisant un fichier audio via les médias API.
  51.249 +
  51.250 +*   Le fichier sonore doit être court, doit se trouver dans un `sounds` sous-répertoire du répertoire racine de l'application et doit être nommé`beep.wav`.
  51.251 \ No newline at end of file
    52.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    52.2 +++ b/Touchgui/plugins/org.apache.cordova.dialogs/doc/index.md	Thu Jun 04 14:50:33 2015 +0200
    52.3 @@ -0,0 +1,267 @@
    52.4 +<!---
    52.5 +    Licensed to the Apache Software Foundation (ASF) under one
    52.6 +    or more contributor license agreements.  See the NOTICE file
    52.7 +    distributed with this work for additional information
    52.8 +    regarding copyright ownership.  The ASF licenses this file
    52.9 +    to you under the Apache License, Version 2.0 (the
   52.10 +    "License"); you may not use this file except in compliance
   52.11 +    with the License.  You may obtain a copy of the License at
   52.12 +
   52.13 +      http://www.apache.org/licenses/LICENSE-2.0
   52.14 +
   52.15 +    Unless required by applicable law or agreed to in writing,
   52.16 +    software distributed under the License is distributed on an
   52.17 +    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
   52.18 +    KIND, either express or implied.  See the License for the
   52.19 +    specific language governing permissions and limitations
   52.20 +    under the License.
   52.21 +-->
   52.22 +
   52.23 +# org.apache.cordova.dialogs
   52.24 +
   52.25 +This plugin provides access to some native dialog UI elements
   52.26 +via a global `navigator.notification` object.
   52.27 +
   52.28 +Although the object is attached to the global scoped `navigator`, it is not available until after the `deviceready` event.
   52.29 +
   52.30 +    document.addEventListener("deviceready", onDeviceReady, false);
   52.31 +    function onDeviceReady() {
   52.32 +        console.log(navigator.notification);
   52.33 +    }
   52.34 +
   52.35 +## Installation
   52.36 +
   52.37 +    cordova plugin add org.apache.cordova.dialogs
   52.38 +
   52.39 +## Methods
   52.40 +
   52.41 +- `navigator.notification.alert`
   52.42 +- `navigator.notification.confirm`
   52.43 +- `navigator.notification.prompt`
   52.44 +- `navigator.notification.beep`
   52.45 +
   52.46 +## navigator.notification.alert
   52.47 +
   52.48 +Shows a custom alert or dialog box.  Most Cordova implementations use a native
   52.49 +dialog box for this feature, but some platforms use the browser's `alert`
   52.50 +function, which is typically less customizable.
   52.51 +
   52.52 +    navigator.notification.alert(message, alertCallback, [title], [buttonName])
   52.53 +
   52.54 +- __message__: Dialog message. _(String)_
   52.55 +
   52.56 +- __alertCallback__: Callback to invoke when alert dialog is dismissed. _(Function)_
   52.57 +
   52.58 +- __title__: Dialog title. _(String)_ (Optional, defaults to `Alert`)
   52.59 +
   52.60 +- __buttonName__: Button name. _(String)_ (Optional, defaults to `OK`)
   52.61 +
   52.62 +
   52.63 +### Example
   52.64 +
   52.65 +    function alertDismissed() {
   52.66 +        // do something
   52.67 +    }
   52.68 +
   52.69 +    navigator.notification.alert(
   52.70 +        'You are the winner!',  // message
   52.71 +        alertDismissed,         // callback
   52.72 +        'Game Over',            // title
   52.73 +        'Done'                  // buttonName
   52.74 +    );
   52.75 +
   52.76 +### Supported Platforms
   52.77 +
   52.78 +- Amazon Fire OS
   52.79 +- Android
   52.80 +- BlackBerry 10
   52.81 +- Firefox OS
   52.82 +- iOS
   52.83 +- Tizen
   52.84 +- Windows Phone 7 and 8
   52.85 +- Windows 8
   52.86 +- Windows
   52.87 +
   52.88 +### Windows Phone 7 and 8 Quirks
   52.89 +
   52.90 +- There is no built-in browser alert, but you can bind one as follows to call `alert()` in the global scope:
   52.91 +
   52.92 +        window.alert = navigator.notification.alert;
   52.93 +
   52.94 +- Both `alert` and `confirm` are non-blocking calls, results of which are only available asynchronously.
   52.95 +
   52.96 +### Firefox OS Quirks:
   52.97 +
   52.98 +Both native-blocking `window.alert()` and non-blocking `navigator.notification.alert()` are available.
   52.99 +
  52.100 +### BlackBerry 10 Quirks
  52.101 +`navigator.notification.alert('text', callback, 'title', 'text')` callback parameter is passed the number 1.
  52.102 +
  52.103 +## navigator.notification.confirm
  52.104 +
  52.105 +Displays a customizable confirmation dialog box.
  52.106 +
  52.107 +    navigator.notification.confirm(message, confirmCallback, [title], [buttonLabels])
  52.108 +
  52.109 +- __message__: Dialog message. _(String)_
  52.110 +
  52.111 +- __confirmCallback__: Callback to invoke with index of button pressed (1, 2, or 3) or when the dialog is dismissed without a button press (0). _(Function)_
  52.112 +
  52.113 +- __title__: Dialog title. _(String)_ (Optional, defaults to `Confirm`)
  52.114 +
  52.115 +- __buttonLabels__: Array of strings specifying button labels. _(Array)_  (Optional, defaults to [`OK,Cancel`])
  52.116 +
  52.117 +
  52.118 +### confirmCallback
  52.119 +
  52.120 +The `confirmCallback` executes when the user presses one of the
  52.121 +buttons in the confirmation dialog box.
  52.122 +
  52.123 +The callback takes the argument `buttonIndex` _(Number)_, which is the
  52.124 +index of the pressed button. Note that the index uses one-based
  52.125 +indexing, so the value is `1`, `2`, `3`, etc.
  52.126 +
  52.127 +### Example
  52.128 +
  52.129 +    function onConfirm(buttonIndex) {
  52.130 +        alert('You selected button ' + buttonIndex);
  52.131 +    }
  52.132 +
  52.133 +    navigator.notification.confirm(
  52.134 +        'You are the winner!', // message
  52.135 +         onConfirm,            // callback to invoke with index of button pressed
  52.136 +        'Game Over',           // title
  52.137 +        ['Restart','Exit']     // buttonLabels
  52.138 +    );
  52.139 +
  52.140 +### Supported Platforms
  52.141 +
  52.142 +- Amazon Fire OS
  52.143 +- Android
  52.144 +- BlackBerry 10
  52.145 +- Firefox OS
  52.146 +- iOS
  52.147 +- Tizen
  52.148 +- Windows Phone 7 and 8
  52.149 +- Windows 8
  52.150 +- Windows
  52.151 +
  52.152 +### Windows Phone 7 and 8 Quirks
  52.153 +
  52.154 +- There is no built-in browser function for `window.confirm`, but you can bind it by assigning:
  52.155 +
  52.156 +        window.confirm = navigator.notification.confirm;
  52.157 +
  52.158 +- Calls to `alert` and `confirm` are non-blocking, so the result is only available asynchronously.
  52.159 +
  52.160 +### Windows Quirks
  52.161 +
  52.162 +- On Windows8/8.1 it is not possible to add more than three buttons to MessageDialog instance.
  52.163 +
  52.164 +- On Windows Phone 8.1 it's not possible to show dialog with more than two buttons.
  52.165 +
  52.166 +### Firefox OS Quirks:
  52.167 +
  52.168 +Both native-blocking `window.confirm()` and non-blocking `navigator.notification.confirm()` are available.
  52.169 +
  52.170 +## navigator.notification.prompt
  52.171 +
  52.172 +Displays a native dialog box that is more customizable than the browser's `prompt` function.
  52.173 +
  52.174 +    navigator.notification.prompt(message, promptCallback, [title], [buttonLabels], [defaultText])
  52.175 +
  52.176 +- __message__: Dialog message. _(String)_
  52.177 +
  52.178 +- __promptCallback__: Callback to invoke with index of button pressed (1, 2, or 3) or when the dialog is dismissed without a button press (0). _(Function)_
  52.179 +
  52.180 +- __title__: Dialog title _(String)_ (Optional, defaults to `Prompt`)
  52.181 +
  52.182 +- __buttonLabels__: Array of strings specifying button labels _(Array)_ (Optional, defaults to `["OK","Cancel"]`)
  52.183 +
  52.184 +- __defaultText__: Default textbox input value (`String`) (Optional, Default: empty string)
  52.185 +
  52.186 +### promptCallback
  52.187 +
  52.188 +The `promptCallback` executes when the user presses one of the buttons
  52.189 +in the prompt dialog box. The `results` object passed to the callback
  52.190 +contains the following properties:
  52.191 +
  52.192 +- __buttonIndex__: The index of the pressed button. _(Number)_ Note that the index uses one-based indexing, so the value is `1`, `2`, `3`, etc.
  52.193 +
  52.194 +
  52.195 +
  52.196 +- __input1__: The text entered in the prompt dialog box. _(String)_
  52.197 +
  52.198 +### Example
  52.199 +
  52.200 +    function onPrompt(results) {
  52.201 +        alert("You selected button number " + results.buttonIndex + " and entered " + results.input1);
  52.202 +    }
  52.203 +
  52.204 +    navigator.notification.prompt(
  52.205 +        'Please enter your name',  // message
  52.206 +        onPrompt,                  // callback to invoke
  52.207 +        'Registration',            // title
  52.208 +        ['Ok','Exit'],             // buttonLabels
  52.209 +        'Jane Doe'                 // defaultText
  52.210 +    );
  52.211 +
  52.212 +### Supported Platforms
  52.213 +
  52.214 +- Amazon Fire OS
  52.215 +- Android
  52.216 +- Firefox OS
  52.217 +- iOS
  52.218 +- Windows Phone 7 and 8
  52.219 +
  52.220 +### Android Quirks
  52.221 +
  52.222 +- Android supports a maximum of three buttons, and ignores any more than that.
  52.223 +
  52.224 +- On Android 3.0 and later, buttons are displayed in reverse order for devices that use the Holo theme.
  52.225 +
  52.226 +### Firefox OS Quirks:
  52.227 +
  52.228 +Both native-blocking `window.prompt()` and non-blocking `navigator.notification.prompt()` are available.
  52.229 +
  52.230 +## navigator.notification.beep
  52.231 +
  52.232 +The device plays a beep sound.
  52.233 +
  52.234 +    navigator.notification.beep(times);
  52.235 +
  52.236 +- __times__: The number of times to repeat the beep. _(Number)_
  52.237 +
  52.238 +### Example
  52.239 +
  52.240 +    // Beep twice!
  52.241 +    navigator.notification.beep(2);
  52.242 +
  52.243 +### Supported Platforms
  52.244 +
  52.245 +- Amazon Fire OS
  52.246 +- Android
  52.247 +- BlackBerry 10
  52.248 +- iOS
  52.249 +- Tizen
  52.250 +- Windows Phone 7 and 8
  52.251 +- Windows 8
  52.252 +
  52.253 +### Amazon Fire OS Quirks
  52.254 +
  52.255 +- Amazon Fire OS plays the default __Notification Sound__ specified under the __Settings/Display & Sound__ panel.
  52.256 +
  52.257 +### Android Quirks
  52.258 +
  52.259 +- Android plays the default __Notification ringtone__ specified under the __Settings/Sound & Display__ panel.
  52.260 +
  52.261 +### Windows Phone 7 and 8 Quirks
  52.262 +
  52.263 +- Relies on a generic beep file from the Cordova distribution.
  52.264 +
  52.265 +### Tizen Quirks
  52.266 +
  52.267 +- Tizen implements beeps by playing an audio file via the media API.
  52.268 +
  52.269 +- The beep file must be short, must be located in a `sounds` subdirectory of the application's root directory, and must be named `beep.wav`.
  52.270 +
    53.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    53.2 +++ b/Touchgui/plugins/org.apache.cordova.dialogs/doc/it/index.md	Thu Jun 04 14:50:33 2015 +0200
    53.3 @@ -0,0 +1,247 @@
    53.4 +<!---
    53.5 +    Licensed to the Apache Software Foundation (ASF) under one
    53.6 +    or more contributor license agreements.  See the NOTICE file
    53.7 +    distributed with this work for additional information
    53.8 +    regarding copyright ownership.  The ASF licenses this file
    53.9 +    to you under the Apache License, Version 2.0 (the
   53.10 +    "License"); you may not use this file except in compliance
   53.11 +    with the License.  You may obtain a copy of the License at
   53.12 +
   53.13 +      http://www.apache.org/licenses/LICENSE-2.0
   53.14 +
   53.15 +    Unless required by applicable law or agreed to in writing,
   53.16 +    software distributed under the License is distributed on an
   53.17 +    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
   53.18 +    KIND, either express or implied.  See the License for the
   53.19 +    specific language governing permissions and limitations
   53.20 +    under the License.
   53.21 +-->
   53.22 +
   53.23 +# org.apache.cordova.dialogs
   53.24 +
   53.25 +Questo plugin consente di accedere ad alcuni elementi di interfaccia utente nativa del dialogo.
   53.26 +
   53.27 +## Installazione
   53.28 +
   53.29 +    cordova plugin add org.apache.cordova.dialogs
   53.30 +    
   53.31 +
   53.32 +## Metodi
   53.33 +
   53.34 +*   `navigator.notification.alert`
   53.35 +*   `navigator.notification.confirm`
   53.36 +*   `navigator.notification.prompt`
   53.37 +*   `navigator.notification.beep`
   53.38 +
   53.39 +## navigator.notification.alert
   53.40 +
   53.41 +Mostra una finestra di avviso o la finestra di dialogo personalizzata. La maggior parte delle implementazioni di Cordova una dialogo nativa per questa caratteristica, ma alcune piattaforme utilizzano il browser `alert` funzione, che è in genere meno personalizzabile.
   53.42 +
   53.43 +    navigator.notification.alert(message, alertCallback, [title], [buttonName])
   53.44 +    
   53.45 +
   53.46 +*   **messaggio**: messaggio finestra di dialogo. *(String)*
   53.47 +
   53.48 +*   **alertCallback**: Callback da richiamare quando viene chiusa la finestra di avviso. *(Funzione)*
   53.49 +
   53.50 +*   **titolo**: titolo di dialogo. *(String)* (Opzionale, default è`Alert`)
   53.51 +
   53.52 +*   **buttonName**: nome del pulsante. *(String)* (Opzionale, default è`OK`)
   53.53 +
   53.54 +### Esempio
   53.55 +
   53.56 +    function alertDismissed() {
   53.57 +        // do something
   53.58 +    }
   53.59 +    
   53.60 +    navigator.notification.alert(
   53.61 +        'You are the winner!',  // message
   53.62 +        alertDismissed,         // callback
   53.63 +        'Game Over',            // title
   53.64 +        'Done'                  // buttonName
   53.65 +    );
   53.66 +    
   53.67 +
   53.68 +### Piattaforme supportate
   53.69 +
   53.70 +*   Amazon fuoco OS
   53.71 +*   Android
   53.72 +*   BlackBerry 10
   53.73 +*   Firefox OS
   53.74 +*   iOS
   53.75 +*   Tizen
   53.76 +*   Windows Phone 7 e 8
   53.77 +*   Windows 8
   53.78 +
   53.79 +### Windows Phone 7 e 8 stranezze
   53.80 +
   53.81 +*   Non non c'è nessun avviso del browser integrato, ma è possibile associare uno come segue per chiamare `alert()` in ambito globale:
   53.82 +    
   53.83 +        window.alert = navigator.notification.alert;
   53.84 +        
   53.85 +
   53.86 +*   Entrambi `alert` e `confirm` sono non di blocco chiamate, risultati di cui sono disponibili solo in modo asincrono.
   53.87 +
   53.88 +### Firefox OS Stranezze:
   53.89 +
   53.90 +Entrambi nativi di blocco `window.alert()` e non bloccante `navigator.notification.alert()` sono disponibili.
   53.91 +
   53.92 +## navigator.notification.confirm
   53.93 +
   53.94 +Visualizza una finestra di dialogo conferma personalizzabile.
   53.95 +
   53.96 +    navigator.notification.confirm(message, confirmCallback, [title], [buttonLabels])
   53.97 +    
   53.98 +
   53.99 +*   **messaggio**: messaggio finestra di dialogo. *(String)*
  53.100 +
  53.101 +*   **confirmCallback**: Callback da richiamare con l'indice del pulsante premuto (1, 2 o 3) o quando la finestra di dialogo viene chiusa senza una pressione del pulsante (0). *(Funzione)*
  53.102 +
  53.103 +*   **titolo**: titolo di dialogo. *(String)* (Opzionale, default è`Confirm`)
  53.104 +
  53.105 +*   **buttonLabels**: matrice di stringhe che specificano le etichette dei pulsanti. *(Matrice)* (Opzionale, default è [ `OK,Cancel` ])
  53.106 +
  53.107 +### confirmCallback
  53.108 +
  53.109 +Il `confirmCallback` viene eseguito quando l'utente preme uno dei pulsanti nella finestra di dialogo conferma.
  53.110 +
  53.111 +Il callback accetta l'argomento `buttonIndex` *(numero)*, che è l'indice del pulsante premuto. Nota che l'indice utilizza l'indicizzazione base uno, quindi il valore è `1` , `2` , `3` , ecc.
  53.112 +
  53.113 +### Esempio
  53.114 +
  53.115 +    function onConfirm(buttonIndex) {
  53.116 +        alert('You selected button ' + buttonIndex);
  53.117 +    }
  53.118 +    
  53.119 +    navigator.notification.confirm(
  53.120 +        'You are the winner!', // message
  53.121 +         onConfirm,            // callback to invoke with index of button pressed
  53.122 +        'Game Over',           // title
  53.123 +        ['Restart','Exit']     // buttonLabels
  53.124 +    );
  53.125 +    
  53.126 +
  53.127 +### Piattaforme supportate
  53.128 +
  53.129 +*   Amazon fuoco OS
  53.130 +*   Android
  53.131 +*   BlackBerry 10
  53.132 +*   Firefox OS
  53.133 +*   iOS
  53.134 +*   Tizen
  53.135 +*   Windows Phone 7 e 8
  53.136 +*   Windows 8
  53.137 +
  53.138 +### Windows Phone 7 e 8 stranezze
  53.139 +
  53.140 +*   Non non c'è nessuna funzione browser incorporato per `window.confirm` , ma è possibile associare assegnando:
  53.141 +    
  53.142 +        window.confirm = navigator.notification.confirm;
  53.143 +        
  53.144 +
  53.145 +*   Chiama al `alert` e `confirm` sono non bloccante, quindi il risultato è disponibile solo in modo asincrono.
  53.146 +
  53.147 +### Firefox OS Stranezze:
  53.148 +
  53.149 +Entrambi nativi di blocco `window.confirm()` e non bloccante `navigator.notification.confirm()` sono disponibili.
  53.150 +
  53.151 +## navigator.notification.prompt
  53.152 +
  53.153 +Visualizza una finestra di dialogo nativa che è più personalizzabile del browser `prompt` funzione.
  53.154 +
  53.155 +    navigator.notification.prompt(message, promptCallback, [title], [buttonLabels], [defaultText])
  53.156 +    
  53.157 +
  53.158 +*   **messaggio**: messaggio finestra di dialogo. *(String)*
  53.159 +
  53.160 +*   **promptCallback**: Callback da richiamare con l'indice del pulsante premuto (1, 2 o 3) o quando la finestra di dialogo viene chiusa senza una pressione del pulsante (0). *(Funzione)*
  53.161 +
  53.162 +*   **titolo**: dialogo titolo *(String)* (opzionale, default è`Prompt`)
  53.163 +
  53.164 +*   **buttonLabels**: matrice di stringhe specificando il pulsante etichette *(Array)* (opzionale, default è`["OK","Cancel"]`)
  53.165 +
  53.166 +*   **defaultText**: valore di input predefinito textbox ( `String` ) (opzionale, Default: stringa vuota)
  53.167 +
  53.168 +### promptCallback
  53.169 +
  53.170 +Il `promptCallback` viene eseguito quando l'utente preme uno dei pulsanti nella finestra di dialogo richiesta. Il `results` oggetto passato al metodo di callback contiene le seguenti proprietà:
  53.171 +
  53.172 +*   **buttonIndex**: l'indice del pulsante premuto. *(Numero)* Nota che l'indice utilizza l'indicizzazione base uno, quindi il valore è `1` , `2` , `3` , ecc.
  53.173 +
  53.174 +*   **INPUT1**: il testo immesso nella finestra di dialogo richiesta. *(String)*
  53.175 +
  53.176 +### Esempio
  53.177 +
  53.178 +    function onPrompt(results) {
  53.179 +        alert("You selected button number " + results.buttonIndex + " and entered " + results.input1);
  53.180 +    }
  53.181 +    
  53.182 +    navigator.notification.prompt(
  53.183 +        'Please enter your name',  // message
  53.184 +        onPrompt,                  // callback to invoke
  53.185 +        'Registration',            // title
  53.186 +        ['Ok','Exit'],             // buttonLabels
  53.187 +        'Jane Doe'                 // defaultText
  53.188 +    );
  53.189 +    
  53.190 +
  53.191 +### Piattaforme supportate
  53.192 +
  53.193 +*   Amazon fuoco OS
  53.194 +*   Android
  53.195 +*   Firefox OS
  53.196 +*   iOS
  53.197 +*   Windows Phone 7 e 8
  53.198 +
  53.199 +### Stranezze Android
  53.200 +
  53.201 +*   Android supporta un massimo di tre pulsanti e ignora di più di quello.
  53.202 +
  53.203 +*   Su Android 3.0 e versioni successive, i pulsanti vengono visualizzati in ordine inverso per dispositivi che utilizzano il tema Holo.
  53.204 +
  53.205 +### Firefox OS Stranezze:
  53.206 +
  53.207 +Entrambi nativi di blocco `window.prompt()` e non bloccante `navigator.notification.prompt()` sono disponibili.
  53.208 +
  53.209 +## navigator.notification.beep
  53.210 +
  53.211 +Il dispositivo riproduce un bip sonoro.
  53.212 +
  53.213 +    navigator.notification.beep(times);
  53.214 +    
  53.215 +
  53.216 +*   **volte**: il numero di volte per ripetere il segnale acustico. *(Numero)*
  53.217 +
  53.218 +### Esempio
  53.219 +
  53.220 +    // Beep twice!
  53.221 +    navigator.notification.beep(2);
  53.222 +    
  53.223 +
  53.224 +### Piattaforme supportate
  53.225 +
  53.226 +*   Amazon fuoco OS
  53.227 +*   Android
  53.228 +*   BlackBerry 10
  53.229 +*   iOS
  53.230 +*   Tizen
  53.231 +*   Windows Phone 7 e 8
  53.232 +*   Windows 8
  53.233 +
  53.234 +### Amazon fuoco OS stranezze
  53.235 +
  53.236 +*   Amazon fuoco OS riproduce il **Suono di notifica** specificato sotto il pannello **Impostazioni/Display e il suono** predefinito.
  53.237 +
  53.238 +### Stranezze Android
  53.239 +
  53.240 +*   Android giochi default **Notification ringtone** specificato sotto il pannello **impostazioni/audio e Display** .
  53.241 +
  53.242 +### Windows Phone 7 e 8 stranezze
  53.243 +
  53.244 +*   Si basa su un file generico bip dalla distribuzione di Cordova.
  53.245 +
  53.246 +### Tizen stranezze
  53.247 +
  53.248 +*   Tizen implementa bip di riproduzione di un file audio tramite i media API.
  53.249 +
  53.250 +*   Il file beep deve essere breve, deve essere situato un `sounds` sottodirectory della directory radice dell'applicazione e deve essere denominato`beep.wav`.
  53.251 \ No newline at end of file
    54.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    54.2 +++ b/Touchgui/plugins/org.apache.cordova.dialogs/doc/ja/index.md	Thu Jun 04 14:50:33 2015 +0200
    54.3 @@ -0,0 +1,247 @@
    54.4 +<!---
    54.5 +    Licensed to the Apache Software Foundation (ASF) under one
    54.6 +    or more contributor license agreements.  See the NOTICE file
    54.7 +    distributed with this work for additional information
    54.8 +    regarding copyright ownership.  The ASF licenses this file
    54.9 +    to you under the Apache License, Version 2.0 (the
   54.10 +    "License"); you may not use this file except in compliance
   54.11 +    with the License.  You may obtain a copy of the License at
   54.12 +
   54.13 +      http://www.apache.org/licenses/LICENSE-2.0
   54.14 +
   54.15 +    Unless required by applicable law or agreed to in writing,
   54.16 +    software distributed under the License is distributed on an
   54.17 +    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
   54.18 +    KIND, either express or implied.  See the License for the
   54.19 +    specific language governing permissions and limitations
   54.20 +    under the License.
   54.21 +-->
   54.22 +
   54.23 +# org.apache.cordova.dialogs
   54.24 +
   54.25 +このプラグインはいくつかのネイティブのダイアログの UI 要素へのアクセスを提供します。
   54.26 +
   54.27 +## インストール
   54.28 +
   54.29 +    cordova plugin add org.apache.cordova.dialogs
   54.30 +    
   54.31 +
   54.32 +## メソッド
   54.33 +
   54.34 +*   `navigator.notification.alert`
   54.35 +*   `navigator.notification.confirm`
   54.36 +*   `navigator.notification.prompt`
   54.37 +*   `navigator.notification.beep`
   54.38 +
   54.39 +## navigator.notification.alert
   54.40 +
   54.41 +カスタムの警告またはダイアログ ボックスが表示されます。 ほとんどコルドバ ネイティブ] ダイアログ ボックスの使用この機能がいくつかのプラットフォームを使用して、ブラウザーの `alert` 関数は、通常より少なくカスタマイズ可能です。
   54.42 +
   54.43 +    navigator.notification.alert(message, alertCallback, [title], [buttonName])
   54.44 +    
   54.45 +
   54.46 +*   **メッセージ**: ダイアログ メッセージ。*(文字列)*
   54.47 +
   54.48 +*   **alertCallback**: 警告ダイアログが閉じられたときに呼び出すコールバック。*(機能)*
   54.49 +
   54.50 +*   **タイトル**: ダイアログのタイトル。*(文字列)*(省略可能、既定値は`Alert`)
   54.51 +
   54.52 +*   **buttonName**: ボタンの名前。*(文字列)*(省略可能、既定値は`OK`)
   54.53 +
   54.54 +### 例
   54.55 +
   54.56 +    function alertDismissed() {
   54.57 +        // do something
   54.58 +    }
   54.59 +    
   54.60 +    navigator.notification.alert(
   54.61 +        'You are the winner!',  // message
   54.62 +        alertDismissed,         // callback
   54.63 +        'Game Over',            // title
   54.64 +        'Done'                  // buttonName
   54.65 +    );
   54.66 +    
   54.67 +
   54.68 +### サポートされているプラットフォーム
   54.69 +
   54.70 +*   アマゾン火 OS
   54.71 +*   アンドロイド
   54.72 +*   ブラックベリー 10
   54.73 +*   Firefox の OS
   54.74 +*   iOS
   54.75 +*   Tizen
   54.76 +*   Windows Phone 7 と 8
   54.77 +*   Windows 8
   54.78 +
   54.79 +### Windows Phone 7 と 8 癖
   54.80 +
   54.81 +*   組み込みのブラウザー警告がない呼び出しを次のように 1 つをバインドすることができます `alert()` 、グローバル スコープで。
   54.82 +    
   54.83 +        window.alert = navigator.notification.alert;
   54.84 +        
   54.85 +
   54.86 +*   両方の `alert` と `confirm` は非ブロッキング呼び出し、結果は非同期的にのみ利用できます。
   54.87 +
   54.88 +### Firefox OS 互換:
   54.89 +
   54.90 +両方のネイティブ ブロック `window.alert()` ノン ブロッキングと `navigator.notification.alert()` は利用できます。
   54.91 +
   54.92 +## navigator.notification.confirm
   54.93 +
   54.94 +カスタマイズ可能な確認のダイアログ ボックスが表示されます。
   54.95 +
   54.96 +    navigator.notification.confirm(message, confirmCallback, [title], [buttonLabels])
   54.97 +    
   54.98 +
   54.99 +*   **メッセージ**: ダイアログ メッセージ。*(文字列)*
  54.100 +
  54.101 +*   **confirmCallback**: インデックス (1、2、または 3) を押されたボタンまたはダイアログ ボックスは、ボタンを押す (0) なしに解雇されたときに呼び出すコールバック。*(機能)*
  54.102 +
  54.103 +*   **タイトル**: ダイアログのタイトル。*(文字列)*(省略可能、既定値は`Confirm`)
  54.104 +
  54.105 +*   **buttonLabels**: ボタンのラベルを指定する文字列の配列。*(配列)*(省略可能、既定値は [ `OK,Cancel` ])
  54.106 +
  54.107 +### confirmCallback
  54.108 +
  54.109 +`confirmCallback`の確認ダイアログ ボックスでボタンを押したときに実行されます。
  54.110 +
  54.111 +コールバック引数 `buttonIndex` *(番号)*は、押されたボタンのインデックス。 メモこと、インデックスを使用して 1 ベースのインデックス化、ので、値は `1` 、 `2` 、 `3` 、等。
  54.112 +
  54.113 +### 例
  54.114 +
  54.115 +    function onConfirm(buttonIndex) {
  54.116 +        alert('You selected button ' + buttonIndex);
  54.117 +    }
  54.118 +    
  54.119 +    navigator.notification.confirm(
  54.120 +        'You are the winner!', // message
  54.121 +         onConfirm,            // callback to invoke with index of button pressed
  54.122 +        'Game Over',           // title
  54.123 +        ['Restart','Exit']     // buttonLabels
  54.124 +    );
  54.125 +    
  54.126 +
  54.127 +### サポートされているプラットフォーム
  54.128 +
  54.129 +*   アマゾン火 OS
  54.130 +*   アンドロイド
  54.131 +*   ブラックベリー 10
  54.132 +*   Firefox の OS
  54.133 +*   iOS
  54.134 +*   Tizen
  54.135 +*   Windows Phone 7 と 8
  54.136 +*   Windows 8
  54.137 +
  54.138 +### Windows Phone 7 と 8 癖
  54.139 +
  54.140 +*   組み込みブラウザーの機能はありません `window.confirm` が割り当てることによってバインドすることができます。
  54.141 +    
  54.142 +        window.confirm = navigator.notification.confirm;
  54.143 +        
  54.144 +
  54.145 +*   呼び出しを `alert` と `confirm` では非ブロッキング、結果は非同期的にのみ使用できます。
  54.146 +
  54.147 +### Firefox OS 互換:
  54.148 +
  54.149 +両方のネイティブ ブロック `window.confirm()` ノン ブロッキングと `navigator.notification.confirm()` は利用できます。
  54.150 +
  54.151 +## navigator.notification.prompt
  54.152 +
  54.153 +ブラウザーのより詳細にカスタマイズはネイティブのダイアログ ボックスが表示されます `prompt` 関数。
  54.154 +
  54.155 +    navigator.notification.prompt(message, promptCallback, [title], [buttonLabels], [defaultText])
  54.156 +    
  54.157 +
  54.158 +*   **メッセージ**: ダイアログ メッセージ。*(文字列)*
  54.159 +
  54.160 +*   **promptCallback**: インデックス (1、2、または 3) を押されたボタンまたはダイアログ ボックスは、ボタンを押す (0) なしに解雇されたときに呼び出すコールバック。*(機能)*
  54.161 +
  54.162 +*   **タイトル**: *(文字列)* (省略可能、既定値のタイトル] ダイアログ`Prompt`)
  54.163 +
  54.164 +*   **buttonLabels**: ボタンを指定する文字列の配列*(配列)* (省略可能、既定値のラベル`["OK","Cancel"]`)
  54.165 +
  54.166 +*   **これら**: 既定テキスト ボックスの入力値 ( `String` ) (省略可能、既定: 空の文字列)
  54.167 +
  54.168 +### promptCallback
  54.169 +
  54.170 +`promptCallback`プロンプト ダイアログ ボックス内のボタンのいずれかを押したときに実行されます。`results`コールバックに渡されるオブジェクトに、次のプロパティが含まれています。
  54.171 +
  54.172 +*   **buttonIndex**: 押されたボタンのインデックス。*(数)*メモこと、インデックスを使用して 1 ベースのインデックス化、ので、値は `1` 、 `2` 、 `3` 、等。
  54.173 +
  54.174 +*   **input1**: プロンプト ダイアログ ボックスに入力したテキスト。*(文字列)*
  54.175 +
  54.176 +### 例
  54.177 +
  54.178 +    function onPrompt(results) {
  54.179 +        alert("You selected button number " + results.buttonIndex + " and entered " + results.input1);
  54.180 +    }
  54.181 +    
  54.182 +    navigator.notification.prompt(
  54.183 +        'Please enter your name',  // message
  54.184 +        onPrompt,                  // callback to invoke
  54.185 +        'Registration',            // title
  54.186 +        ['Ok','Exit'],             // buttonLabels
  54.187 +        'Jane Doe'                 // defaultText
  54.188 +    );
  54.189 +    
  54.190 +
  54.191 +### サポートされているプラットフォーム
  54.192 +
  54.193 +*   アマゾン火 OS
  54.194 +*   アンドロイド
  54.195 +*   Firefox の OS
  54.196 +*   iOS
  54.197 +*   Windows Phone 7 と 8
  54.198 +
  54.199 +### Android の癖
  54.200 +
  54.201 +*   Android は最大 3 つのボタンをサポートしているし、それ以上無視します。
  54.202 +
  54.203 +*   アンドロイド 3.0 と後、ホロのテーマを使用するデバイスを逆の順序でボタンが表示されます。
  54.204 +
  54.205 +### Firefox OS 互換:
  54.206 +
  54.207 +両方のネイティブ ブロック `window.prompt()` ノン ブロッキングと `navigator.notification.prompt()` は利用できます。
  54.208 +
  54.209 +## navigator.notification.beep
  54.210 +
  54.211 +デバイス サウンドをビープ音を再生します。
  54.212 +
  54.213 +    navigator.notification.beep(times);
  54.214 +    
  54.215 +
  54.216 +*   **回**: ビープ音を繰り返す回数。*(数)*
  54.217 +
  54.218 +### 例
  54.219 +
  54.220 +    // Beep twice!
  54.221 +    navigator.notification.beep(2);
  54.222 +    
  54.223 +
  54.224 +### サポートされているプラットフォーム
  54.225 +
  54.226 +*   アマゾン火 OS
  54.227 +*   アンドロイド
  54.228 +*   ブラックベリー 10
  54.229 +*   iOS
  54.230 +*   Tizen
  54.231 +*   Windows Phone 7 と 8
  54.232 +*   Windows 8
  54.233 +
  54.234 +### アマゾン火 OS 癖
  54.235 +
  54.236 +*   アマゾン火 OS デフォルト**設定/表示 & サウンド**パネルの下に指定した**通知音**を果たしています。
  54.237 +
  54.238 +### Android の癖
  54.239 +
  54.240 +*   アンドロイド デフォルト**通知着信音****設定/サウンド & ディスプレイ**パネルの下に指定を果たしています。
  54.241 +
  54.242 +### Windows Phone 7 と 8 癖
  54.243 +
  54.244 +*   コルドバ分布からジェネリック ビープ音ファイルに依存します。
  54.245 +
  54.246 +### Tizen の癖
  54.247 +
  54.248 +*   Tizen は、メディア API 経由でオーディオ ファイルを再生してビープ音を実装します。
  54.249 +
  54.250 +*   ビープ音ファイルする必要があります短いである必要があります、 `sounds` 、アプリケーションのルート ディレクトリのサブディレクトリと命名する必要があります`beep.wav`.
  54.251 \ No newline at end of file
    55.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    55.2 +++ b/Touchgui/plugins/org.apache.cordova.dialogs/doc/ko/index.md	Thu Jun 04 14:50:33 2015 +0200
    55.3 @@ -0,0 +1,247 @@
    55.4 +<!---
    55.5 +    Licensed to the Apache Software Foundation (ASF) under one
    55.6 +    or more contributor license agreements.  See the NOTICE file
    55.7 +    distributed with this work for additional information
    55.8 +    regarding copyright ownership.  The ASF licenses this file
    55.9 +    to you under the Apache License, Version 2.0 (the
   55.10 +    "License"); you may not use this file except in compliance
   55.11 +    with the License.  You may obtain a copy of the License at
   55.12 +
   55.13 +      http://www.apache.org/licenses/LICENSE-2.0
   55.14 +
   55.15 +    Unless required by applicable law or agreed to in writing,
   55.16 +    software distributed under the License is distributed on an
   55.17 +    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
   55.18 +    KIND, either express or implied.  See the License for the
   55.19 +    specific language governing permissions and limitations
   55.20 +    under the License.
   55.21 +-->
   55.22 +
   55.23 +# org.apache.cordova.dialogs
   55.24 +
   55.25 +이 플러그인 몇 가지 기본 대화 상자 UI 요소에 액세스할 수 있습니다.
   55.26 +
   55.27 +## 설치
   55.28 +
   55.29 +    cordova plugin add org.apache.cordova.dialogs
   55.30 +    
   55.31 +
   55.32 +## 메서드
   55.33 +
   55.34 +*   `navigator.notification.alert`
   55.35 +*   `navigator.notification.confirm`
   55.36 +*   `navigator.notification.prompt`
   55.37 +*   `navigator.notification.beep`
   55.38 +
   55.39 +## navigator.notification.alert
   55.40 +
   55.41 +사용자 지정 경고 또는 대화 상자를 보여 줍니다. 이 기능에 대 한 기본 대화 상자를 사용 하는 대부분의 코르도바 구현 하지만 일부 플랫폼 사용 브라우저의 `alert` 함수는 일반적으로 덜 사용자 정의할 수 있습니다.
   55.42 +
   55.43 +    navigator.notification.alert(message, alertCallback, [title], [buttonName])
   55.44 +    
   55.45 +
   55.46 +*   **메시지**: 대화 메시지. *(문자열)*
   55.47 +
   55.48 +*   **alertCallback**: 콜백을 호출할 때 경고 대화 기 각. *(기능)*
   55.49 +
   55.50 +*   **제목**: 제목 대화 상자. *(문자열)* (옵션, 기본값:`Alert`)
   55.51 +
   55.52 +*   **buttonName**: 단추 이름. *(문자열)* (옵션, 기본값:`OK`)
   55.53 +
   55.54 +### 예를 들어
   55.55 +
   55.56 +    function alertDismissed() {
   55.57 +        // do something
   55.58 +    }
   55.59 +    
   55.60 +    navigator.notification.alert(
   55.61 +        'You are the winner!',  // message
   55.62 +        alertDismissed,         // callback
   55.63 +        'Game Over',            // title
   55.64 +        'Done'                  // buttonName
   55.65 +    );
   55.66 +    
   55.67 +
   55.68 +### 지원 되는 플랫폼
   55.69 +
   55.70 +*   아마존 화재 운영 체제
   55.71 +*   안 드 로이드
   55.72 +*   블랙베리 10
   55.73 +*   Firefox 운영 체제
   55.74 +*   iOS
   55.75 +*   Tizen
   55.76 +*   Windows Phone 7과 8
   55.77 +*   윈도우 8
   55.78 +
   55.79 +### Windows Phone 7, 8 특수
   55.80 +
   55.81 +*   아니 내장 브라우저 경고 하지만 다음과 같이 전화를 바인딩할 수 있습니다 `alert()` 전역 범위에서:
   55.82 +    
   55.83 +        window.alert = navigator.notification.alert;
   55.84 +        
   55.85 +
   55.86 +*   둘 다 `alert` 와 `confirm` 는 비차단 호출, 결과 비동기적으로 사용할 수 있습니다.
   55.87 +
   55.88 +### 파이어 폭스 OS 단점:
   55.89 +
   55.90 +두 기본 차단 `window.alert()` 및 비차단 `navigator.notification.alert()` 사용할 수 있습니다.
   55.91 +
   55.92 +## navigator.notification.confirm
   55.93 +
   55.94 +사용자 정의 확인 대화 상자가 표시 됩니다.
   55.95 +
   55.96 +    navigator.notification.confirm(message, confirmCallback, [title], [buttonLabels])
   55.97 +    
   55.98 +
   55.99 +*   **메시지**: 대화 메시지. *(문자열)*
  55.100 +
  55.101 +*   **confirmCallback**: 인덱스 버튼 (1, 2 또는 3) 또는 대화 상자 버튼을 누르면 (0) 없이 기 각 될 때 호출할 콜백 합니다. *(기능)*
  55.102 +
  55.103 +*   **제목**: 제목 대화 상자. *(문자열)* (옵션, 기본값:`Confirm`)
  55.104 +
  55.105 +*   **buttonLabels**: 단추 레이블을 지정 하는 문자열 배열입니다. *(배열)* (옵션, 기본값은 [ `OK,Cancel` ])
  55.106 +
  55.107 +### confirmCallback
  55.108 +
  55.109 +`confirmCallback`사용자가 확인 대화 상자에서 단추 중 하나를 누를 때 실행 됩니다.
  55.110 +
  55.111 +콜백 인수 `buttonIndex` *(번호)를*누르면된 버튼의 인덱스입니다. 참고 인덱스에서는 인덱스 1부터 값은 `1` , `2` , `3` , 등등.
  55.112 +
  55.113 +### 예를 들어
  55.114 +
  55.115 +    function onConfirm(buttonIndex) {
  55.116 +        alert('You selected button ' + buttonIndex);
  55.117 +    }
  55.118 +    
  55.119 +    navigator.notification.confirm(
  55.120 +        'You are the winner!', // message
  55.121 +         onConfirm,            // callback to invoke with index of button pressed
  55.122 +        'Game Over',           // title
  55.123 +        ['Restart','Exit']     // buttonLabels
  55.124 +    );
  55.125 +    
  55.126 +
  55.127 +### 지원 되는 플랫폼
  55.128 +
  55.129 +*   아마존 화재 운영 체제
  55.130 +*   안 드 로이드
  55.131 +*   블랙베리 10
  55.132 +*   Firefox 운영 체제
  55.133 +*   iOS
  55.134 +*   Tizen
  55.135 +*   Windows Phone 7과 8
  55.136 +*   윈도우 8
  55.137 +
  55.138 +### Windows Phone 7, 8 특수
  55.139 +
  55.140 +*   에 대 한 기본 제공 브라우저 함수가 `window.confirm` , 그러나 할당 하 여 바인딩할 수 있습니다:
  55.141 +    
  55.142 +        window.confirm = navigator.notification.confirm;
  55.143 +        
  55.144 +
  55.145 +*   호출 `alert` 및 `confirm` 되므로 차단 되지 않은 결과만 비동기적으로 사용할 수 있습니다.
  55.146 +
  55.147 +### 파이어 폭스 OS 단점:
  55.148 +
  55.149 +두 기본 차단 `window.confirm()` 및 비차단 `navigator.notification.confirm()` 사용할 수 있습니다.
  55.150 +
  55.151 +## navigator.notification.prompt
  55.152 +
  55.153 +브라우저의 보다 더 많은 사용자 정의 기본 대화 상자 표시 `prompt` 기능.
  55.154 +
  55.155 +    navigator.notification.prompt(message, promptCallback, [title], [buttonLabels], [defaultText])
  55.156 +    
  55.157 +
  55.158 +*   **메시지**: 대화 메시지. *(문자열)*
  55.159 +
  55.160 +*   **promptCallback**: 인덱스 버튼 (1, 2 또는 3) 또는 대화 상자 버튼을 누르면 (0) 없이 기 각 될 때 호출할 콜백 합니다. *(기능)*
  55.161 +
  55.162 +*   **제목**: 제목 *(문자열)* (옵션, 기본값 대화 상자`Prompt`)
  55.163 +
  55.164 +*   **buttonLabels**: 단추를 지정 하는 문자열의 배열 *(배열)* (옵션, 기본값은 레이블`["OK","Cancel"]`)
  55.165 +
  55.166 +*   **defaultText**: 기본 텍스트 상자 입력 값 ( `String` ) (옵션, 기본값: 빈 문자열)
  55.167 +
  55.168 +### promptCallback
  55.169 +
  55.170 +`promptCallback`사용자가 프롬프트 대화 상자에서 단추 중 하나를 누를 때 실행 됩니다. `results`콜백에 전달 된 개체에는 다음 속성이 포함 되어 있습니다:
  55.171 +
  55.172 +*   **buttonIndex**: 눌려진된 버튼의 인덱스. *(수)* 참고 인덱스에서는 인덱스 1부터 값은 `1` , `2` , `3` , 등등.
  55.173 +
  55.174 +*   **input1**: 프롬프트 대화 상자에 입력 한 텍스트. *(문자열)*
  55.175 +
  55.176 +### 예를 들어
  55.177 +
  55.178 +    function onPrompt(results) {
  55.179 +        alert("You selected button number " + results.buttonIndex + " and entered " + results.input1);
  55.180 +    }
  55.181 +    
  55.182 +    navigator.notification.prompt(
  55.183 +        'Please enter your name',  // message
  55.184 +        onPrompt,                  // callback to invoke
  55.185 +        'Registration',            // title
  55.186 +        ['Ok','Exit'],             // buttonLabels
  55.187 +        'Jane Doe'                 // defaultText
  55.188 +    );
  55.189 +    
  55.190 +
  55.191 +### 지원 되는 플랫폼
  55.192 +
  55.193 +*   아마존 화재 운영 체제
  55.194 +*   안 드 로이드
  55.195 +*   Firefox 운영 체제
  55.196 +*   iOS
  55.197 +*   Windows Phone 7과 8
  55.198 +
  55.199 +### 안 드 로이드 단점
  55.200 +
  55.201 +*   안 드 로이드 최대 3 개의 단추를 지원 하 고 그것 보다는 더 이상 무시 합니다.
  55.202 +
  55.203 +*   안 드 로이드 3.0 및 나중에, 단추는 홀로 테마를 사용 하는 장치에 대 한 반대 순서로 표시 됩니다.
  55.204 +
  55.205 +### 파이어 폭스 OS 단점:
  55.206 +
  55.207 +두 기본 차단 `window.prompt()` 및 비차단 `navigator.notification.prompt()` 사용할 수 있습니다.
  55.208 +
  55.209 +## navigator.notification.beep
  55.210 +
  55.211 +장치는 경고음 소리를 재생 합니다.
  55.212 +
  55.213 +    navigator.notification.beep(times);
  55.214 +    
  55.215 +
  55.216 +*   **시간**: 경고음을 반복 하는 횟수. *(수)*
  55.217 +
  55.218 +### 예를 들어
  55.219 +
  55.220 +    // Beep twice!
  55.221 +    navigator.notification.beep(2);
  55.222 +    
  55.223 +
  55.224 +### 지원 되는 플랫폼
  55.225 +
  55.226 +*   아마존 화재 운영 체제
  55.227 +*   안 드 로이드
  55.228 +*   블랙베리 10
  55.229 +*   iOS
  55.230 +*   Tizen
  55.231 +*   Windows Phone 7과 8
  55.232 +*   윈도우 8
  55.233 +
  55.234 +### 아마존 화재 OS 단점
  55.235 +
  55.236 +*   아마존 화재 운영 체제 기본 **설정/디스플레이 및 사운드** 패널에 지정 된 **알림 소리** 재생 됩니다.
  55.237 +
  55.238 +### 안 드 로이드 단점
  55.239 +
  55.240 +*   안 드 로이드 기본 **알림 벨소리** **설정/사운드 및 디스플레이** 패널에서 지정 합니다.
  55.241 +
  55.242 +### Windows Phone 7, 8 특수
  55.243 +
  55.244 +*   코르 도우 바 분포에서 일반 경고음 파일에 의존합니다.
  55.245 +
  55.246 +### Tizen 특수
  55.247 +
  55.248 +*   Tizen은 미디어 API 통해 오디오 파일을 재생 하 여 경고음을 구현 합니다.
  55.249 +
  55.250 +*   경고음 파일에 위치 해야 합니다, 짧은 해야 한 `sounds` 응용 프로그램의 루트 디렉터리의 하위 디렉터리 명명 해야 합니다`beep.wav`.
  55.251 \ No newline at end of file
    56.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    56.2 +++ b/Touchgui/plugins/org.apache.cordova.dialogs/doc/pl/index.md	Thu Jun 04 14:50:33 2015 +0200
    56.3 @@ -0,0 +1,247 @@
    56.4 +<!---
    56.5 +    Licensed to the Apache Software Foundation (ASF) under one
    56.6 +    or more contributor license agreements.  See the NOTICE file
    56.7 +    distributed with this work for additional information
    56.8 +    regarding copyright ownership.  The ASF licenses this file
    56.9 +    to you under the Apache License, Version 2.0 (the
   56.10 +    "License"); you may not use this file except in compliance
   56.11 +    with the License.  You may obtain a copy of the License at
   56.12 +
   56.13 +      http://www.apache.org/licenses/LICENSE-2.0
   56.14 +
   56.15 +    Unless required by applicable law or agreed to in writing,
   56.16 +    software distributed under the License is distributed on an
   56.17 +    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
   56.18 +    KIND, either express or implied.  See the License for the
   56.19 +    specific language governing permissions and limitations
   56.20 +    under the License.
   56.21 +-->
   56.22 +
   56.23 +# org.apache.cordova.dialogs
   56.24 +
   56.25 +Ten plugin umożliwia dostęp do niektórych rodzimych okna dialogowego elementy interfejsu użytkownika.
   56.26 +
   56.27 +## Instalacja
   56.28 +
   56.29 +    cordova plugin add org.apache.cordova.dialogs
   56.30 +    
   56.31 +
   56.32 +## Metody
   56.33 +
   56.34 +*   `navigator.notification.alert`
   56.35 +*   `navigator.notification.confirm`
   56.36 +*   `navigator.notification.prompt`
   56.37 +*   `navigator.notification.beep`
   56.38 +
   56.39 +## navigator.notification.alert
   56.40 +
   56.41 +Pokazuje niestandardowe wpisu lub okno dialogowe. Większość implementacji Cordova używać rodzimych okno dialogowe dla tej funkcji, ale niektóre platformy używać przeglądarki `alert` funkcja, który jest zazwyczaj mniej konfigurowalny.
   56.42 +
   56.43 +    navigator.notification.alert(message, alertCallback, [title], [buttonName])
   56.44 +    
   56.45 +
   56.46 +*   **wiadomość**: komunikat okna dialogowego. *(String)*
   56.47 +
   56.48 +*   **alertCallback**: wywołanie zwrotne do wywołania, gdy okno dialogowe alert jest oddalona. *(Funkcja)*
   56.49 +
   56.50 +*   **tytuł**: okno tytuł. *(String)* (Opcjonalna, domyślnie`Alert`)
   56.51 +
   56.52 +*   **buttonName**: Nazwa przycisku. *(String)* (Opcjonalna, domyślnie`OK`)
   56.53 +
   56.54 +### Przykład
   56.55 +
   56.56 +    function alertDismissed() {
   56.57 +        // do something
   56.58 +    }
   56.59 +    
   56.60 +    navigator.notification.alert(
   56.61 +        'You are the winner!',  // message
   56.62 +        alertDismissed,         // callback
   56.63 +        'Game Over',            // title
   56.64 +        'Done'                  // buttonName
   56.65 +    );
   56.66 +    
   56.67 +
   56.68 +### Obsługiwane platformy
   56.69 +
   56.70 +*   Amazon Fire OS
   56.71 +*   Android
   56.72 +*   BlackBerry 10
   56.73 +*   Firefox OS
   56.74 +*   iOS
   56.75 +*   Tizen
   56.76 +*   Windows Phone 7 i 8
   56.77 +*   Windows 8
   56.78 +
   56.79 +### Windows Phone 7 i 8 dziwactwa
   56.80 +
   56.81 +*   Istnieje wpis nie wbudowana przeglądarka, ale można powiązać w następujący sposób na wywołanie `alert()` w globalnym zasięgu:
   56.82 +    
   56.83 +        window.alert = navigator.notification.alert;
   56.84 +        
   56.85 +
   56.86 +*   Zarówno `alert` i `confirm` są bez blokowania połączeń, których wyniki są tylko dostępne asynchronicznie.
   56.87 +
   56.88 +### Firefox OS dziwactwa:
   56.89 +
   56.90 +Blokuje zarówno rodzimych `window.alert()` i bez blokowania `navigator.notification.alert()` są dostępne.
   56.91 +
   56.92 +## navigator.notification.confirm
   56.93 +
   56.94 +Wyświetla okno dialogowe potwierdzenia konfigurowalny.
   56.95 +
   56.96 +    navigator.notification.confirm(message, confirmCallback, [title], [buttonLabels])
   56.97 +    
   56.98 +
   56.99 +*   **wiadomość**: komunikat okna dialogowego. *(String)*
  56.100 +
  56.101 +*   **confirmCallback**: wywołanie zwrotne do wywołania z indeksu z przycisku (1, 2 lub 3), lub gdy okno jest zwolniony bez naciśnij przycisk (0). *(Funkcja)*
  56.102 +
  56.103 +*   **tytuł**: okno tytuł. *(String)* (Opcjonalna, domyślnie`Confirm`)
  56.104 +
  56.105 +*   **buttonLabels**: tablica ciągów, określając etykiety przycisków. *(Tablica)* (Opcjonalna, domyślnie [ `OK,Cancel` ])
  56.106 +
  56.107 +### confirmCallback
  56.108 +
  56.109 +`confirmCallback`Wykonuje, gdy użytkownik naciśnie klawisz jeden z przycisków w oknie dialogowym potwierdzenia.
  56.110 +
  56.111 +Wywołania zwrotnego przyjmuje argument `buttonIndex` *(numer)*, który jest indeksem wciśnięty przycisk. Uwaga, że indeks używa, na podstawie jednego indeksowania, więc wartość jest `1` , `2` , `3` , itp.
  56.112 +
  56.113 +### Przykład
  56.114 +
  56.115 +    function onConfirm(buttonIndex) {
  56.116 +        alert('You selected button ' + buttonIndex);
  56.117 +    }
  56.118 +    
  56.119 +    navigator.notification.confirm(
  56.120 +        'You are the winner!', // message
  56.121 +         onConfirm,            // callback to invoke with index of button pressed
  56.122 +        'Game Over',           // title
  56.123 +        ['Restart','Exit']     // buttonLabels
  56.124 +    );
  56.125 +    
  56.126 +
  56.127 +### Obsługiwane platformy
  56.128 +
  56.129 +*   Amazon Fire OS
  56.130 +*   Android
  56.131 +*   BlackBerry 10
  56.132 +*   Firefox OS
  56.133 +*   iOS
  56.134 +*   Tizen
  56.135 +*   Windows Phone 7 i 8
  56.136 +*   Windows 8
  56.137 +
  56.138 +### Windows Phone 7 i 8 dziwactwa
  56.139 +
  56.140 +*   Istnieje funkcja wbudowana przeglądarka nie `window.confirm` , ale można go powiązać przypisując:
  56.141 +    
  56.142 +        window.confirm = navigator.notification.confirm;
  56.143 +        
  56.144 +
  56.145 +*   Wzywa do `alert` i `confirm` są bez blokowania, więc wynik jest tylko dostępnych asynchronicznie.
  56.146 +
  56.147 +### Firefox OS dziwactwa:
  56.148 +
  56.149 +Blokuje zarówno rodzimych `window.confirm()` i bez blokowania `navigator.notification.confirm()` są dostępne.
  56.150 +
  56.151 +## navigator.notification.prompt
  56.152 +
  56.153 +Wyświetla okno dialogowe macierzystego, który bardziej niż przeglądarki `prompt` funkcja.
  56.154 +
  56.155 +    navigator.notification.prompt(message, promptCallback, [title], [buttonLabels], [defaultText])
  56.156 +    
  56.157 +
  56.158 +*   **wiadomość**: komunikat okna dialogowego. *(String)*
  56.159 +
  56.160 +*   **promptCallback**: wywołanie zwrotne do wywołania z indeksu z przycisku (1, 2 lub 3), lub gdy okno jest zwolniony bez naciśnij przycisk (0). *(Funkcja)*
  56.161 +
  56.162 +*   **tytuł**: okno tytuł *(String)* (opcjonalna, domyślnie`Prompt`)
  56.163 +
  56.164 +*   **buttonLabels**: tablica ciągów, określając przycisk etykiety *(tablica)* (opcjonalna, domyślnie`["OK","Cancel"]`)
  56.165 +
  56.166 +*   **defaultText**: wartość wejściowa tekstowym domyślnego ( `String` ) (opcjonalna, domyślnie: pusty ciąg)
  56.167 +
  56.168 +### promptCallback
  56.169 +
  56.170 +`promptCallback`Wykonuje, gdy użytkownik naciśnie klawisz jeden z przycisków w oknie dialogowym polecenia. `results`Obiekt przekazywany do wywołania zwrotnego zawiera następujące właściwości:
  56.171 +
  56.172 +*   **buttonIndex**: indeks wciśnięty przycisk. *(Liczba)* Uwaga, że indeks używa, na podstawie jednego indeksowania, więc wartość jest `1` , `2` , `3` , itp.
  56.173 +
  56.174 +*   **input1**: Tekst wprowadzony w oknie polecenia. *(String)*
  56.175 +
  56.176 +### Przykład
  56.177 +
  56.178 +    function onPrompt(results) {
  56.179 +        alert("You selected button number " + results.buttonIndex + " and entered " + results.input1);
  56.180 +    }
  56.181 +    
  56.182 +    navigator.notification.prompt(
  56.183 +        'Please enter your name',  // message
  56.184 +        onPrompt,                  // callback to invoke
  56.185 +        'Registration',            // title
  56.186 +        ['Ok','Exit'],             // buttonLabels
  56.187 +        'Jane Doe'                 // defaultText
  56.188 +    );
  56.189 +    
  56.190 +
  56.191 +### Obsługiwane platformy
  56.192 +
  56.193 +*   Amazon Fire OS
  56.194 +*   Android
  56.195 +*   Firefox OS
  56.196 +*   iOS
  56.197 +*   Windows Phone 7 i 8
  56.198 +
  56.199 +### Dziwactwa Androida
  56.200 +
  56.201 +*   Android obsługuje maksymalnie trzy przyciski i więcej niż to ignoruje.
  56.202 +
  56.203 +*   Android 3.0 i nowszych przyciski są wyświetlane w kolejności odwrotnej do urządzenia, które używają tematu Holo.
  56.204 +
  56.205 +### Firefox OS dziwactwa:
  56.206 +
  56.207 +Blokuje zarówno rodzimych `window.prompt()` i bez blokowania `navigator.notification.prompt()` są dostępne.
  56.208 +
  56.209 +## navigator.notification.beep
  56.210 +
  56.211 +Urządzenie odtwarza sygnał ciągły dźwięk.
  56.212 +
  56.213 +    navigator.notification.beep(times);
  56.214 +    
  56.215 +
  56.216 +*   **razy**: liczba powtórzeń po sygnale. *(Liczba)*
  56.217 +
  56.218 +### Przykład
  56.219 +
  56.220 +    // Beep twice!
  56.221 +    navigator.notification.beep(2);
  56.222 +    
  56.223 +
  56.224 +### Obsługiwane platformy
  56.225 +
  56.226 +*   Amazon Fire OS
  56.227 +*   Android
  56.228 +*   BlackBerry 10
  56.229 +*   iOS
  56.230 +*   Tizen
  56.231 +*   Windows Phone 7 i 8
  56.232 +*   Windows 8
  56.233 +
  56.234 +### Amazon ogień OS dziwactwa
  56.235 +
  56.236 +*   Amazon ogień OS gra domyślny **Dźwięk powiadomienia** określone w panelu **ekranu/ustawienia i dźwięk** .
  56.237 +
  56.238 +### Dziwactwa Androida
  56.239 +
  56.240 +*   Android gra domyślnie **dzwonek powiadomienia** określone w panelu **ustawień/dźwięk i wyświetlacz** .
  56.241 +
  56.242 +### Windows Phone 7 i 8 dziwactwa
  56.243 +
  56.244 +*   Opiera się na pliku rodzajowego sygnał z rozkładu Cordova.
  56.245 +
  56.246 +### Dziwactwa Tizen
  56.247 +
  56.248 +*   Tizen implementuje dźwięków przez odtwarzania pliku audio za pośrednictwem mediów API.
  56.249 +
  56.250 +*   Plik dźwiękowy muszą być krótkie, musi znajdować się w `sounds` podkatalogu katalogu głównego aplikacji i musi być nazwany`beep.wav`.
  56.251 \ No newline at end of file
    57.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    57.2 +++ b/Touchgui/plugins/org.apache.cordova.dialogs/doc/ru/index.md	Thu Jun 04 14:50:33 2015 +0200
    57.3 @@ -0,0 +1,247 @@
    57.4 +<!---
    57.5 +    Licensed to the Apache Software Foundation (ASF) under one
    57.6 +    or more contributor license agreements.  See the NOTICE file
    57.7 +    distributed with this work for additional information
    57.8 +    regarding copyright ownership.  The ASF licenses this file
    57.9 +    to you under the Apache License, Version 2.0 (the
   57.10 +    "License"); you may not use this file except in compliance
   57.11 +    with the License.  You may obtain a copy of the License at
   57.12 +
   57.13 +      http://www.apache.org/licenses/LICENSE-2.0
   57.14 +
   57.15 +    Unless required by applicable law or agreed to in writing,
   57.16 +    software distributed under the License is distributed on an
   57.17 +    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
   57.18 +    KIND, either express or implied.  See the License for the
   57.19 +    specific language governing permissions and limitations
   57.20 +    under the License.
   57.21 +-->
   57.22 +
   57.23 +# org.apache.cordova.dialogs
   57.24 +
   57.25 +Этот плагин обеспечивает доступ к некоторым элементам собственного диалогового окна пользовательского интерфейса.
   57.26 +
   57.27 +## Установка
   57.28 +
   57.29 +    cordova plugin add org.apache.cordova.dialogs
   57.30 +    
   57.31 +
   57.32 +## Методы
   57.33 +
   57.34 +*   `navigator.notification.alert`
   57.35 +*   `navigator.notification.confirm`
   57.36 +*   `navigator.notification.prompt`
   57.37 +*   `navigator.notification.beep`
   57.38 +
   57.39 +## navigator.notification.alert
   57.40 +
   57.41 +Показывает окно пользовательские оповещения или диалоговое окно. Большинство реализаций Cordova использовать диалоговое окно родной для этой функции, но некоторые платформы браузера `alert` функция, которая как правило менее настраивается.
   57.42 +
   57.43 +    Navigator.Notification.Alert (сообщение, alertCallback, [название], [buttonName])
   57.44 +    
   57.45 +
   57.46 +*   **сообщение**: сообщение диалога. *(Строка)*
   57.47 +
   57.48 +*   **alertCallback**: обратного вызова для вызова, когда закрывается диалоговое окно оповещения. *(Функция)*
   57.49 +
   57.50 +*   **название**: диалоговое окно название. *(Строка)* (Опционально, по умолчанию`Alert`)
   57.51 +
   57.52 +*   **buttonName**: имя кнопки. *(Строка)* (Опционально, по умолчанию`OK`)
   57.53 +
   57.54 +### Пример
   57.55 +
   57.56 +    function alertDismissed() {
   57.57 +        // do something
   57.58 +    }
   57.59 +    
   57.60 +    navigator.notification.alert(
   57.61 +        'You are the winner!',  // message
   57.62 +        alertDismissed,         // callback
   57.63 +        'Game Over',            // title
   57.64 +        'Done'                  // buttonName
   57.65 +    );
   57.66 +    
   57.67 +
   57.68 +### Поддерживаемые платформы
   57.69 +
   57.70 +*   Amazon Fire OS
   57.71 +*   Android
   57.72 +*   BlackBerry 10
   57.73 +*   Firefox OS
   57.74 +*   iOS
   57.75 +*   Tizen
   57.76 +*   Windows Phone 7 и 8
   57.77 +*   Windows 8
   57.78 +
   57.79 +### Особенности Windows Phone 7 и 8
   57.80 +
   57.81 +*   Существует предупреждение не встроенный браузер, но можно привязать один следующим позвонить `alert()` в глобальной области действия:
   57.82 +    
   57.83 +        window.alert = navigator.notification.alert;
   57.84 +        
   57.85 +
   57.86 +*   Оба `alert` и `confirm` являются не блокировка звонков, результаты которых доступны только асинхронно.
   57.87 +
   57.88 +### Firefox OS причуды:
   57.89 +
   57.90 +Как родной блокировка `window.alert()` и неблокирующий `navigator.notification.alert()` доступны.
   57.91 +
   57.92 +## navigator.notification.confirm
   57.93 +
   57.94 +Отображает диалоговое окно Настраиваемый подтверждения.
   57.95 +
   57.96 +    navigator.notification.confirm(message, confirmCallback, [title], [buttonLabels])
   57.97 +    
   57.98 +
   57.99 +*   **сообщение**: сообщение диалога. *(Строка)*
  57.100 +
  57.101 +*   **confirmCallback**: обратного вызова с индексом кнопка нажата (1, 2 или 3) или когда диалоговое окно закрывается без нажатия кнопки (0). *(Функция)*
  57.102 +
  57.103 +*   **название**: диалоговое окно название. *(Строка)* (Опционально, по умолчанию`Confirm`)
  57.104 +
  57.105 +*   **buttonLabels**: массив строк, указав названия кнопок. *(Массив)* (Не обязательно, по умолчанию [ `OK,Cancel` ])
  57.106 +
  57.107 +### confirmCallback
  57.108 +
  57.109 +`confirmCallback`Выполняется, когда пользователь нажимает одну из кнопок в диалоговом окне подтверждения.
  57.110 +
  57.111 +Аргументом функции обратного вызова `buttonIndex` *(номер)*, который является индекс нажатой кнопки. Обратите внимание, что индекс использует единицы индексации, поэтому значение `1` , `2` , `3` , и т.д.
  57.112 +
  57.113 +### Пример
  57.114 +
  57.115 +    function onConfirm(buttonIndex) {
  57.116 +        alert('You selected button ' + buttonIndex);
  57.117 +    }
  57.118 +    
  57.119 +    navigator.notification.confirm(
  57.120 +        'You are the winner!', // message
  57.121 +         onConfirm,            // callback to invoke with index of button pressed
  57.122 +        'Game Over',           // title
  57.123 +        ['Restart','Exit']     // buttonLabels
  57.124 +    );
  57.125 +    
  57.126 +
  57.127 +### Поддерживаемые платформы
  57.128 +
  57.129 +*   Amazon Fire OS
  57.130 +*   Android
  57.131 +*   BlackBerry 10
  57.132 +*   Firefox OS
  57.133 +*   iOS
  57.134 +*   Tizen
  57.135 +*   Windows Phone 7 и 8
  57.136 +*   Windows 8
  57.137 +
  57.138 +### Особенности Windows Phone 7 и 8
  57.139 +
  57.140 +*   Нет встроенного браузера функция для `window.confirm` , но его можно привязать путем присвоения:
  57.141 +    
  57.142 +        window.confirm = navigator.notification.confirm;
  57.143 +        
  57.144 +
  57.145 +*   Вызовы `alert` и `confirm` являются не блокируется, поэтому результат доступен только асинхронно.
  57.146 +
  57.147 +### Firefox OS причуды:
  57.148 +
  57.149 +Как родной блокировка `window.confirm()` и неблокирующий `navigator.notification.confirm()` доступны.
  57.150 +
  57.151 +## navigator.notification.prompt
  57.152 +
  57.153 +Отображает родной диалоговое окно более настраиваемый, чем в браузере `prompt` функции.
  57.154 +
  57.155 +    navigator.notification.prompt(message, promptCallback, [title], [buttonLabels], [defaultText])
  57.156 +    
  57.157 +
  57.158 +*   **сообщение**: сообщение диалога. *(Строка)*
  57.159 +
  57.160 +*   **promptCallback**: обратного вызова с индексом кнопка нажата (1, 2 или 3) или когда диалоговое окно закрывается без нажатия кнопки (0). *(Функция)*
  57.161 +
  57.162 +*   **название**: диалоговое окно название *(String)* (опционально, по умолчанию`Prompt`)
  57.163 +
  57.164 +*   **buttonLabels**: массив строк, указав кнопку этикетки *(массив)* (опционально, по умолчанию`["OK","Cancel"]`)
  57.165 +
  57.166 +*   **defaultText**: по умолчанию textbox входное значение ( `String` ) (опционально, по умолчанию: пустая строка)
  57.167 +
  57.168 +### promptCallback
  57.169 +
  57.170 +`promptCallback`Выполняется, когда пользователь нажимает одну из кнопок в диалоговом окне приглашения. `results`Объект, переданный в метод обратного вызова содержит следующие свойства:
  57.171 +
  57.172 +*   **buttonIndex**: индекс нажатой кнопки. *(Число)* Обратите внимание, что индекс использует единицы индексации, поэтому значение `1` , `2` , `3` , и т.д.
  57.173 +
  57.174 +*   **INPUT1**: текст, введенный в диалоговом окне приглашения. *(Строка)*
  57.175 +
  57.176 +### Пример
  57.177 +
  57.178 +    function onPrompt(results) {
  57.179 +        alert("You selected button number " + results.buttonIndex + " and entered " + results.input1);
  57.180 +    }
  57.181 +    
  57.182 +    navigator.notification.prompt(
  57.183 +        'Please enter your name',  // message
  57.184 +        onPrompt,                  // callback to invoke
  57.185 +        'Registration',            // title
  57.186 +        ['Ok','Exit'],             // buttonLabels
  57.187 +        'Jane Doe'                 // defaultText
  57.188 +    );
  57.189 +    
  57.190 +
  57.191 +### Поддерживаемые платформы
  57.192 +
  57.193 +*   Amazon Fire OS
  57.194 +*   Android
  57.195 +*   Firefox OS
  57.196 +*   iOS
  57.197 +*   Windows Phone 7 и 8
  57.198 +
  57.199 +### Особенности Android
  57.200 +
  57.201 +*   Android поддерживает максимум из трех кнопок и игнорирует больше, чем это.
  57.202 +
  57.203 +*   На Android 3.0 и более поздних версиях кнопки отображаются в обратном порядке для устройств, которые используют тему холо.
  57.204 +
  57.205 +### Firefox OS причуды:
  57.206 +
  57.207 +Как родной блокировка `window.prompt()` и неблокирующий `navigator.notification.prompt()` доступны.
  57.208 +
  57.209 +## navigator.notification.beep
  57.210 +
  57.211 +Устройство воспроизводит звуковой сигнал звук.
  57.212 +
  57.213 +    navigator.notification.beep(times);
  57.214 +    
  57.215 +
  57.216 +*   **раз**: количество раз, чтобы повторить сигнал. *(Число)*
  57.217 +
  57.218 +### Пример
  57.219 +
  57.220 +    // Beep twice!
  57.221 +    navigator.notification.beep(2);
  57.222 +    
  57.223 +
  57.224 +### Поддерживаемые платформы
  57.225 +
  57.226 +*   Amazon Fire OS
  57.227 +*   Android
  57.228 +*   BlackBerry 10
  57.229 +*   iOS
  57.230 +*   Tizen
  57.231 +*   Windows Phone 7 и 8
  57.232 +*   Windows 8
  57.233 +
  57.234 +### Особенности Amazon Fire OS
  57.235 +
  57.236 +*   Amazon Fire OS играет по умолчанию **Звук уведомления** , указанного на панели **параметров/дисплей и звук** .
  57.237 +
  57.238 +### Особенности Android
  57.239 +
  57.240 +*   Android играет по умолчанию **уведомления рингтон** указанных в панели **настройки/звук и дисплей** .
  57.241 +
  57.242 +### Особенности Windows Phone 7 и 8
  57.243 +
  57.244 +*   Опирается на общий звуковой файл из дистрибутива Кордова.
  57.245 +
  57.246 +### Особенности Tizen
  57.247 +
  57.248 +*   Tizen реализует гудков, воспроизведении аудиофайла через СМИ API.
  57.249 +
  57.250 +*   Звуковой файл должен быть коротким, должен быть расположен в `sounds` подкаталог корневого каталога приложения и должны быть названы`beep.wav`.
  57.251 \ No newline at end of file
    58.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    58.2 +++ b/Touchgui/plugins/org.apache.cordova.dialogs/doc/zh/index.md	Thu Jun 04 14:50:33 2015 +0200
    58.3 @@ -0,0 +1,247 @@
    58.4 +<!---
    58.5 +    Licensed to the Apache Software Foundation (ASF) under one
    58.6 +    or more contributor license agreements.  See the NOTICE file
    58.7 +    distributed with this work for additional information
    58.8 +    regarding copyright ownership.  The ASF licenses this file
    58.9 +    to you under the Apache License, Version 2.0 (the
   58.10 +    "License"); you may not use this file except in compliance
   58.11 +    with the License.  You may obtain a copy of the License at
   58.12 +
   58.13 +      http://www.apache.org/licenses/LICENSE-2.0
   58.14 +
   58.15 +    Unless required by applicable law or agreed to in writing,
   58.16 +    software distributed under the License is distributed on an
   58.17 +    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
   58.18 +    KIND, either express or implied.  See the License for the
   58.19 +    specific language governing permissions and limitations
   58.20 +    under the License.
   58.21 +-->
   58.22 +
   58.23 +# org.apache.cordova.dialogs
   58.24 +
   58.25 +這個外掛程式提供了對一些本機對話方塊的使用者介面元素的訪問。
   58.26 +
   58.27 +## 安裝
   58.28 +
   58.29 +    cordova plugin add org.apache.cordova.dialogs
   58.30 +    
   58.31 +
   58.32 +## 方法
   58.33 +
   58.34 +*   `navigator.notification.alert`
   58.35 +*   `navigator.notification.confirm`
   58.36 +*   `navigator.notification.prompt`
   58.37 +*   `navigator.notification.beep`
   58.38 +
   58.39 +## navigator.notification.alert
   58.40 +
   58.41 +顯示一個自訂的警報或對話方塊框。 大多數科爾多瓦實現使用本機對話方塊中的此項功能,但一些平臺使用瀏覽器的 `alert` 函數,這是通常不那麼可自訂。
   58.42 +
   58.43 +    navigator.notification.alert(message, alertCallback, [title], [buttonName])
   58.44 +    
   58.45 +
   58.46 +*   **消息**: 消息對話方塊。*(字串)*
   58.47 +
   58.48 +*   **alertCallback**: 當警報對話方塊的被解雇時要調用的回檔。*(函數)*
   58.49 +
   58.50 +*   **標題**: 標題對話方塊。*(字串)*(可選,預設值為`Alert`)
   58.51 +
   58.52 +*   **buttonName**: 按鈕名稱。*(字串)*(可選,預設值為`OK`)
   58.53 +
   58.54 +### 示例
   58.55 +
   58.56 +    function alertDismissed() {
   58.57 +        // do something
   58.58 +    }
   58.59 +    
   58.60 +    navigator.notification.alert(
   58.61 +        'You are the winner!',  // message
   58.62 +        alertDismissed,         // callback
   58.63 +        'Game Over',            // title
   58.64 +        'Done'                  // buttonName
   58.65 +    );
   58.66 +    
   58.67 +
   58.68 +### 支援的平臺
   58.69 +
   58.70 +*   亞馬遜火 OS
   58.71 +*   Android 系統
   58.72 +*   黑莓 10
   58.73 +*   火狐瀏覽器作業系統
   58.74 +*   iOS
   58.75 +*   Tizen
   58.76 +*   Windows Phone 7 和 8
   58.77 +*   Windows 8
   58.78 +
   58.79 +### Windows Phone 7 和 8 怪癖
   58.80 +
   58.81 +*   有沒有內置瀏覽器警報,但你可以綁定一個,如下所示調用 `alert()` 在全球範圍內:
   58.82 +    
   58.83 +        window.alert = navigator.notification.alert;
   58.84 +        
   58.85 +
   58.86 +*   兩個 `alert` 和 `confirm` 的非阻塞的調用,其中的結果才是可用的非同步。
   58.87 +
   58.88 +### 火狐瀏覽器作業系統怪癖:
   58.89 +
   58.90 +這兩個本機阻止 `window.alert()` 和非阻塞 `navigator.notification.alert()` 可用。
   58.91 +
   58.92 +## navigator.notification.confirm
   58.93 +
   58.94 +顯示一個可自訂的確認對話方塊。
   58.95 +
   58.96 +    navigator.notification.confirm(message, confirmCallback, [title], [buttonLabels])
   58.97 +    
   58.98 +
   58.99 +*   **消息**: 消息對話方塊。*(字串)*
  58.100 +
  58.101 +*   **confirmCallback**: 要用索引 (1、 2 或 3) 按下的按鈕,或者在沒有按下按鈕 (0) 駁回了對話方塊中時調用的回檔。*(函數)*
  58.102 +
  58.103 +*   **標題**: 標題對話方塊。*(字串)*(可選,預設值為`Confirm`)
  58.104 +
  58.105 +*   **buttonLabels**: 指定按鈕標籤的字串陣列。*(陣列)*(可選,預設值為 [ `OK,Cancel` ])
  58.106 +
  58.107 +### confirmCallback
  58.108 +
  58.109 +`confirmCallback`當使用者按下確認對話方塊中的按鈕之一的時候執行。
  58.110 +
  58.111 +回檔將參數 `buttonIndex` *(編號)*,它是按下的按鈕的索引。 請注意索引使用基於 1 的索引,所以值是 `1` , `2` , `3` ,等等。
  58.112 +
  58.113 +### 示例
  58.114 +
  58.115 +    function onConfirm(buttonIndex) {
  58.116 +        alert('You selected button ' + buttonIndex);
  58.117 +    }
  58.118 +    
  58.119 +    navigator.notification.confirm(
  58.120 +        'You are the winner!', // message
  58.121 +         onConfirm,            // callback to invoke with index of button pressed
  58.122 +        'Game Over',           // title
  58.123 +        ['Restart','Exit']     // buttonLabels
  58.124 +    );
  58.125 +    
  58.126 +
  58.127 +### 支援的平臺
  58.128 +
  58.129 +*   亞馬遜火 OS
  58.130 +*   Android 系統
  58.131 +*   黑莓 10
  58.132 +*   火狐瀏覽器作業系統
  58.133 +*   iOS
  58.134 +*   Tizen
  58.135 +*   Windows Phone 7 和 8
  58.136 +*   Windows 8
  58.137 +
  58.138 +### Windows Phone 7 和 8 怪癖
  58.139 +
  58.140 +*   有沒有內置的瀏覽器功能的 `window.confirm` ,但你可以將它綁定通過分配:
  58.141 +    
  58.142 +        window.confirm = navigator.notification.confirm;
  58.143 +        
  58.144 +
  58.145 +*   調用到 `alert` 和 `confirm` 的非阻塞,所以結果就是只可用以非同步方式。
  58.146 +
  58.147 +### 火狐瀏覽器作業系統怪癖:
  58.148 +
  58.149 +這兩個本機阻止 `window.confirm()` 和非阻塞 `navigator.notification.confirm()` 可用。
  58.150 +
  58.151 +## navigator.notification.prompt
  58.152 +
  58.153 +顯示本機的對話方塊,更可自訂的瀏覽器比 `prompt` 函數。
  58.154 +
  58.155 +    navigator.notification.prompt(message, promptCallback, [title], [buttonLabels], [defaultText])
  58.156 +    
  58.157 +
  58.158 +*   **消息**: 消息對話方塊。*(字串)*
  58.159 +
  58.160 +*   **promptCallback**: 要用索引 (1、 2 或 3) 按下的按鈕,或者在沒有按下按鈕 (0) 駁回了對話方塊中時調用的回檔。*(函數)*
  58.161 +
  58.162 +*   **標題**: 對話方塊的標題*(字串)* (可選,預設值為`Prompt`)
  58.163 +
  58.164 +*   **buttonLabels**: 陣列,這些字串指定按鈕標籤*(陣列)* (可選,預設值為`["OK","Cancel"]`)
  58.165 +
  58.166 +*   **defaultText**: 預設文字方塊中輸入值 ( `String` ) (可選,預設值: 空字串)
  58.167 +
  58.168 +### promptCallback
  58.169 +
  58.170 +`promptCallback`當使用者按下一個提示對話方塊中的按鈕時執行。`results`物件傳遞給回檔的包含以下屬性:
  58.171 +
  58.172 +*   **buttonIndex**: 按下的按鈕的索引。*(人數)*請注意索引使用基於 1 的索引,所以值是 `1` , `2` , `3` ,等等。
  58.173 +
  58.174 +*   **輸入 1**: 在提示對話方塊中輸入的文本。*(字串)*
  58.175 +
  58.176 +### 示例
  58.177 +
  58.178 +    function onPrompt(results) {
  58.179 +        alert("You selected button number " + results.buttonIndex + " and entered " + results.input1);
  58.180 +    }
  58.181 +    
  58.182 +    navigator.notification.prompt(
  58.183 +        'Please enter your name',  // message
  58.184 +        onPrompt,                  // callback to invoke
  58.185 +        'Registration',            // title
  58.186 +        ['Ok','Exit'],             // buttonLabels
  58.187 +        'Jane Doe'                 // defaultText
  58.188 +    );
  58.189 +    
  58.190 +
  58.191 +### 支援的平臺
  58.192 +
  58.193 +*   亞馬遜火 OS
  58.194 +*   Android 系統
  58.195 +*   火狐瀏覽器作業系統
  58.196 +*   iOS
  58.197 +*   Windows Phone 7 和 8
  58.198 +
  58.199 +### Android 的怪癖
  58.200 +
  58.201 +*   Android 支援最多的三個按鈕,並忽略任何更多。
  58.202 +
  58.203 +*   關於 Android 3.0 及更高版本,使用全息主題的設備按相反的順序顯示按鈕。
  58.204 +
  58.205 +### 火狐瀏覽器作業系統怪癖:
  58.206 +
  58.207 +這兩個本機阻止 `window.prompt()` 和非阻塞 `navigator.notification.prompt()` 可用。
  58.208 +
  58.209 +## navigator.notification.beep
  58.210 +
  58.211 +該設備播放提示音聲音。
  58.212 +
  58.213 +    navigator.notification.beep(times);
  58.214 +    
  58.215 +
  58.216 +*   **時間**: 的次數重複發出蜂鳴音。*(人數)*
  58.217 +
  58.218 +### 示例
  58.219 +
  58.220 +    // Beep twice!
  58.221 +    navigator.notification.beep(2);
  58.222 +    
  58.223 +
  58.224 +### 支援的平臺
  58.225 +
  58.226 +*   亞馬遜火 OS
  58.227 +*   Android 系統
  58.228 +*   黑莓 10
  58.229 +*   iOS
  58.230 +*   Tizen
  58.231 +*   Windows Phone 7 和 8
  58.232 +*   Windows 8
  58.233 +
  58.234 +### 亞馬遜火 OS 怪癖
  58.235 +
  58.236 +*   亞馬遜火 OS 播放預設**設置/顯示 & 聲音**面板下指定的**通知聲音**。
  58.237 +
  58.238 +### Android 的怪癖
  58.239 +
  58.240 +*   Android 系統播放的預設**通知鈴聲****設置/聲音和顯示**面板下指定。
  58.241 +
  58.242 +### Windows Phone 7 和 8 怪癖
  58.243 +
  58.244 +*   依賴泛型蜂鳴音檔從科爾多瓦分佈。
  58.245 +
  58.246 +### Tizen 怪癖
  58.247 +
  58.248 +*   Tizen 通過播放音訊檔通過媒體 API 實現會發出蜂鳴聲。
  58.249 +
  58.250 +*   蜂鳴音檔必須很短,必須設在 `sounds` 子目錄中的應用程式的根目錄中,並且必須命名`beep.wav`.
  58.251 \ No newline at end of file
    59.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    59.2 +++ b/Touchgui/plugins/org.apache.cordova.dialogs/plugin.xml	Thu Jun 04 14:50:33 2015 +0200
    59.3 @@ -0,0 +1,157 @@
    59.4 +<?xml version="1.0" encoding="UTF-8"?>
    59.5 +<!--
    59.6 +  Licensed to the Apache Software Foundation (ASF) under one
    59.7 +  or more contributor license agreements.  See the NOTICE file
    59.8 +  distributed with this work for additional information
    59.9 +  regarding copyright ownership.  The ASF licenses this file
   59.10 +  to you under the Apache License, Version 2.0 (the
   59.11 +  "License"); you may not use this file except in compliance
   59.12 +  with the License.  You may obtain a copy of the License at
   59.13 +
   59.14 +    http://www.apache.org/licenses/LICENSE-2.0
   59.15 +
   59.16 +  Unless required by applicable law or agreed to in writing,
   59.17 +  software distributed under the License is distributed on an
   59.18 +  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
   59.19 +  KIND, either express or implied.  See the License for the
   59.20 +  specific language governing permissions and limitations
   59.21 +  under the License.
   59.22 +-->
   59.23 +
   59.24 +<plugin xmlns="http://apache.org/cordova/ns/plugins/1.0"
   59.25 +           id="org.apache.cordova.dialogs"
   59.26 +      version="0.2.11">
   59.27 +
   59.28 +    <name>Notification</name>
   59.29 +    <description>Cordova Notification Plugin</description>
   59.30 +    <license>Apache 2.0</license>
   59.31 +    <keywords>cordova,notification</keywords>
   59.32 +    <repo>https://git-wip-us.apache.org/repos/asf/cordova-plugin-dialogs.git</repo>
   59.33 +    <issue>https://issues.apache.org/jira/browse/CB/component/12320642</issue>
   59.34 +
   59.35 +    <js-module src="www/notification.js" name="notification">
   59.36 +        <merges target="navigator.notification" />
   59.37 +    </js-module>
   59.38 +
   59.39 +    <!-- firefoxos -->
   59.40 +    <platform name="firefoxos">
   59.41 +        <config-file target="config.xml" parent="/*">
   59.42 +            <feature name="Notification">
   59.43 +                <param name="firefoxos-package" value="Notification" />
   59.44 +            </feature>
   59.45 +        </config-file>                                         
   59.46 +        
   59.47 +		<asset src="www/firefoxos/notification.css" target="css/notification.css" />
   59.48 +		<asset src="www/firefoxos/danger-press.png" target="img/danger-press.png" />
   59.49 +		<asset src="www/firefoxos/danger.png" target="img/danger.png" />
   59.50 +		<asset src="www/firefoxos/default.png" target="img/default.png" />
   59.51 +		<asset src="www/firefoxos/gradient.png" target="img/gradient.png" />
   59.52 +		<asset src="www/firefoxos/pattern.png" target="img/pattern.png" />
   59.53 +		<asset src="www/firefoxos/recommend.png" target="img/recommend.png" />
   59.54 +        <js-module src="src/firefoxos/notification.js" name="dialogs-impl">
   59.55 +          <runs />
   59.56 +        </js-module>
   59.57 +    </platform>
   59.58 +
   59.59 +    <!-- android -->
   59.60 +    <platform name="android">
   59.61 +        <config-file target="res/xml/config.xml" parent="/*">
   59.62 +            <feature name="Notification">
   59.63 +                <param name="android-package" value="org.apache.cordova.dialogs.Notification"/>
   59.64 +            </feature>
   59.65 +        </config-file>
   59.66 +
   59.67 +        <source-file src="src/android/Notification.java" target-dir="src/org/apache/cordova/dialogs" />
   59.68 +
   59.69 +        <!-- android specific notification apis -->
   59.70 +        <js-module src="www/android/notification.js" name="notification_android">
   59.71 +            <merges target="navigator.notification" />
   59.72 +        </js-module>
   59.73 +
   59.74 +    </platform>
   59.75 +    
   59.76 +     <!-- amazon-fireos -->
   59.77 +    <platform name="amazon-fireos">
   59.78 +        <config-file target="res/xml/config.xml" parent="/*">
   59.79 +            <feature name="Notification">
   59.80 +                <param name="android-package" value="org.apache.cordova.dialogs.Notification"/>
   59.81 +            </feature>
   59.82 +        </config-file>
   59.83 +
   59.84 +        <source-file src="src/android/Notification.java" target-dir="src/org/apache/cordova/dialogs" />
   59.85 +
   59.86 +        <!-- android specific notification apis -->
   59.87 +        <js-module src="www/android/notification.js" name="notification_android">
   59.88 +            <merges target="navigator.notification" />
   59.89 +        </js-module>
   59.90 +
   59.91 +    </platform>
   59.92 +
   59.93 +    <!-- ubuntu -->
   59.94 +    <platform name="ubuntu">
   59.95 +        <header-file src="src/ubuntu/notification.h" />
   59.96 +        <source-file src="src/ubuntu/notification.cpp" />
   59.97 +        <resource-file src="src/ubuntu/notification.qml" />
   59.98 +    </platform>
   59.99 +
  59.100 +    <!-- ios -->
  59.101 +    <platform name="ios">
  59.102 +        <config-file target="config.xml" parent="/*">
  59.103 +            <feature name="Notification">
  59.104 +                <param name="ios-package" value="CDVNotification"/>
  59.105 +            </feature>
  59.106 +        </config-file>
  59.107 +        <header-file src="src/ios/CDVNotification.h" />
  59.108 +	    <source-file src="src/ios/CDVNotification.m" />
  59.109 +	    <resource-file src="src/ios/CDVNotification.bundle" />
  59.110 +		<framework src="AudioToolbox.framework" weak="true" />
  59.111 +    </platform>
  59.112 +
  59.113 +    <!-- blackberry10 -->
  59.114 +    <platform name="blackberry10">
  59.115 +        <source-file src="src/blackberry10/index.js" target-dir="Notification" />
  59.116 +        <config-file target="www/config.xml" parent="/widget">
  59.117 +            <feature name="Notification" value="Notification"/>
  59.118 +        </config-file>
  59.119 +        <js-module src="www/blackberry10/beep.js" name="beep">
  59.120 +            <clobbers target="window.navigator.notification.beep" />
  59.121 +        </js-module>
  59.122 +        <source-file src="www/blackberry10/notification-beep.wav" />
  59.123 +    </platform>
  59.124 +
  59.125 +    <!-- wp7 -->
  59.126 +    <platform name="wp7">
  59.127 +        <config-file target="config.xml" parent="/*">
  59.128 +            <feature name="Notification">
  59.129 +                <param name="wp-package" value="Notification"/>
  59.130 +            </feature>
  59.131 +        </config-file>
  59.132 +
  59.133 +        <source-file src="src/wp/Notification.cs" />
  59.134 +        <source-file src="src/wp/NotificationBox.xaml.cs" />
  59.135 +        <source-file src="src/wp/NotificationBox.xaml" />
  59.136 +        <source-file src="src/wp/notification-beep.wav" />
  59.137 +    </platform>
  59.138 +
  59.139 +    <!-- wp8 -->
  59.140 +    <platform name="wp8">
  59.141 +        <config-file target="config.xml" parent="/*">
  59.142 +            <feature name="Notification">
  59.143 +                <param name="wp-package" value="Notification"/>
  59.144 +            </feature>
  59.145 +        </config-file>
  59.146 +
  59.147 +        <source-file src="src/wp/Notification.cs" />
  59.148 +        <source-file src="src/wp/NotificationBox.xaml.cs" />
  59.149 +        <source-file src="src/wp/NotificationBox.xaml" />
  59.150 +        <source-file src="src/wp/notification-beep.wav" />
  59.151 +    </platform>
  59.152 +
  59.153 +    <!-- windows8 -->
  59.154 +    <platform name="windows8">
  59.155 +        <js-module src="src/windows8/NotificationProxy.js" name="NotificationProxy">
  59.156 +            <merges target="" />
  59.157 +        </js-module>
  59.158 +    </platform>
  59.159 +
  59.160 +</plugin>
    60.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    60.2 +++ b/Touchgui/plugins/org.apache.cordova.dialogs/src/android/Notification.java	Thu Jun 04 14:50:33 2015 +0200
    60.3 @@ -0,0 +1,483 @@
    60.4 +/*
    60.5 +       Licensed to the Apache Software Foundation (ASF) under one
    60.6 +       or more contributor license agreements.  See the NOTICE file
    60.7 +       distributed with this work for additional information
    60.8 +       regarding copyright ownership.  The ASF licenses this file
    60.9 +       to you under the Apache License, Version 2.0 (the
   60.10 +       "License"); you may not use this file except in compliance
   60.11 +       with the License.  You may obtain a copy of the License at
   60.12 +
   60.13 +         http://www.apache.org/licenses/LICENSE-2.0
   60.14 +
   60.15 +       Unless required by applicable law or agreed to in writing,
   60.16 +       software distributed under the License is distributed on an
   60.17 +       "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
   60.18 +       KIND, either express or implied.  See the License for the
   60.19 +       specific language governing permissions and limitations
   60.20 +       under the License.
   60.21 +*/
   60.22 +package org.apache.cordova.dialogs;
   60.23 +
   60.24 +import org.apache.cordova.CallbackContext;
   60.25 +import org.apache.cordova.CordovaInterface;
   60.26 +import org.apache.cordova.CordovaPlugin;
   60.27 +import org.apache.cordova.PluginResult;
   60.28 +import org.json.JSONArray;
   60.29 +import org.json.JSONException;
   60.30 +import org.json.JSONObject;
   60.31 +
   60.32 +import android.annotation.SuppressLint;
   60.33 +import android.app.AlertDialog;
   60.34 +import android.app.AlertDialog.Builder;
   60.35 +import android.app.ProgressDialog;
   60.36 +import android.content.DialogInterface;
   60.37 +import android.media.Ringtone;
   60.38 +import android.media.RingtoneManager;
   60.39 +import android.net.Uri;
   60.40 +import android.widget.EditText;
   60.41 +import android.widget.TextView;
   60.42 +
   60.43 +
   60.44 +/**
   60.45 + * This class provides access to notifications on the device.
   60.46 + *
   60.47 + * Be aware that this implementation gets called on 
   60.48 + * navigator.notification.{alert|confirm|prompt}, and that there is a separate
   60.49 + * implementation in org.apache.cordova.CordovaChromeClient that gets
   60.50 + * called on a simple window.{alert|confirm|prompt}.
   60.51 + */
   60.52 +public class Notification extends CordovaPlugin {
   60.53 +
   60.54 +    public int confirmResult = -1;
   60.55 +    public ProgressDialog spinnerDialog = null;
   60.56 +    public ProgressDialog progressDialog = null;
   60.57 +
   60.58 +    /**
   60.59 +     * Constructor.
   60.60 +     */
   60.61 +    public Notification() {
   60.62 +    }
   60.63 +
   60.64 +    /**
   60.65 +     * Executes the request and returns PluginResult.
   60.66 +     *
   60.67 +     * @param action            The action to execute.
   60.68 +     * @param args              JSONArray of arguments for the plugin.
   60.69 +     * @param callbackContext   The callback context used when calling back into JavaScript.
   60.70 +     * @return                  True when the action was valid, false otherwise.
   60.71 +     */
   60.72 +    public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException {
   60.73 +    	/*
   60.74 +    	 * Don't run any of these if the current activity is finishing
   60.75 +    	 * in order to avoid android.view.WindowManager$BadTokenException
   60.76 +    	 * crashing the app. Just return true here since false should only
   60.77 +    	 * be returned in the event of an invalid action.
   60.78 +    	 */
   60.79 +    	if(this.cordova.getActivity().isFinishing()) return true;
   60.80 +    	
   60.81 +        if (action.equals("beep")) {
   60.82 +            this.beep(args.getLong(0));
   60.83 +        }
   60.84 +        else if (action.equals("alert")) {
   60.85 +            this.alert(args.getString(0), args.getString(1), args.getString(2), callbackContext);
   60.86 +            return true;
   60.87 +        }
   60.88 +        else if (action.equals("confirm")) {
   60.89 +            this.confirm(args.getString(0), args.getString(1), args.getJSONArray(2), callbackContext);
   60.90 +            return true;
   60.91 +        }
   60.92 +        else if (action.equals("prompt")) {
   60.93 +            this.prompt(args.getString(0), args.getString(1), args.getJSONArray(2), args.getString(3), callbackContext);
   60.94 +            return true;
   60.95 +        }
   60.96 +        else if (action.equals("activityStart")) {
   60.97 +            this.activityStart(args.getString(0), args.getString(1));
   60.98 +        }
   60.99 +        else if (action.equals("activityStop")) {
  60.100 +            this.activityStop();
  60.101 +        }
  60.102 +        else if (action.equals("progressStart")) {
  60.103 +            this.progressStart(args.getString(0), args.getString(1));
  60.104 +        }
  60.105 +        else if (action.equals("progressValue")) {
  60.106 +            this.progressValue(args.getInt(0));
  60.107 +        }
  60.108 +        else if (action.equals("progressStop")) {
  60.109 +            this.progressStop();
  60.110 +        }
  60.111 +        else {
  60.112 +            return false;
  60.113 +        }
  60.114 +
  60.115 +        // Only alert and confirm are async.
  60.116 +        callbackContext.success();
  60.117 +        return true;
  60.118 +    }
  60.119 +
  60.120 +    //--------------------------------------------------------------------------
  60.121 +    // LOCAL METHODS
  60.122 +    //--------------------------------------------------------------------------
  60.123 +
  60.124 +    /**
  60.125 +     * Beep plays the default notification ringtone.
  60.126 +     *
  60.127 +     * @param count     Number of times to play notification
  60.128 +     */
  60.129 +    public void beep(final long count) {
  60.130 +        cordova.getThreadPool().execute(new Runnable() {
  60.131 +            public void run() {
  60.132 +                Uri ringtone = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
  60.133 +                Ringtone notification = RingtoneManager.getRingtone(cordova.getActivity().getBaseContext(), ringtone);
  60.134 +
  60.135 +                // If phone is not set to silent mode
  60.136 +                if (notification != null) {
  60.137 +                    for (long i = 0; i < count; ++i) {
  60.138 +                        notification.play();
  60.139 +                        long timeout = 5000;
  60.140 +                        while (notification.isPlaying() && (timeout > 0)) {
  60.141 +                            timeout = timeout - 100;
  60.142 +                            try {
  60.143 +                                Thread.sleep(100);
  60.144 +                            } catch (InterruptedException e) {
  60.145 +                            }
  60.146 +                        }
  60.147 +                    }
  60.148 +                }
  60.149 +            }
  60.150 +        });
  60.151 +    }
  60.152 +
  60.153 +    /**
  60.154 +     * Builds and shows a native Android alert with given Strings
  60.155 +     * @param message           The message the alert should display
  60.156 +     * @param title             The title of the alert
  60.157 +     * @param buttonLabel       The label of the button
  60.158 +     * @param callbackContext   The callback context
  60.159 +     */
  60.160 +    public synchronized void alert(final String message, final String title, final String buttonLabel, final CallbackContext callbackContext) {
  60.161 +    	final CordovaInterface cordova = this.cordova;
  60.162 +
  60.163 +        Runnable runnable = new Runnable() {
  60.164 +            public void run() {
  60.165 +
  60.166 +                AlertDialog.Builder dlg = createDialog(cordova); // new AlertDialog.Builder(cordova.getActivity(), AlertDialog.THEME_DEVICE_DEFAULT_LIGHT);
  60.167 +                dlg.setMessage(message);
  60.168 +                dlg.setTitle(title);
  60.169 +                dlg.setCancelable(true);
  60.170 +                dlg.setPositiveButton(buttonLabel,
  60.171 +                        new AlertDialog.OnClickListener() {
  60.172 +                            public void onClick(DialogInterface dialog, int which) {
  60.173 +                                dialog.dismiss();
  60.174 +                                callbackContext.sendPluginResult(new PluginResult(PluginResult.Status.OK, 0));
  60.175 +                            }
  60.176 +                        });
  60.177 +                dlg.setOnCancelListener(new AlertDialog.OnCancelListener() {
  60.178 +                    public void onCancel(DialogInterface dialog)
  60.179 +                    {
  60.180 +                        dialog.dismiss();
  60.181 +                        callbackContext.sendPluginResult(new PluginResult(PluginResult.Status.OK, 0));
  60.182 +                    }
  60.183 +                });
  60.184 +
  60.185 +                changeTextDirection(dlg);
  60.186 +            };
  60.187 +        };
  60.188 +        this.cordova.getActivity().runOnUiThread(runnable);
  60.189 +    }
  60.190 +
  60.191 +    /**
  60.192 +     * Builds and shows a native Android confirm dialog with given title, message, buttons.
  60.193 +     * This dialog only shows up to 3 buttons.  Any labels after that will be ignored.
  60.194 +     * The index of the button pressed will be returned to the JavaScript callback identified by callbackId.
  60.195 +     *
  60.196 +     * @param message           The message the dialog should display
  60.197 +     * @param title             The title of the dialog
  60.198 +     * @param buttonLabels      A comma separated list of button labels (Up to 3 buttons)
  60.199 +     * @param callbackContext   The callback context.
  60.200 +     */
  60.201 +    public synchronized void confirm(final String message, final String title, final JSONArray buttonLabels, final CallbackContext callbackContext) {
  60.202 +    	final CordovaInterface cordova = this.cordova;
  60.203 +
  60.204 +        Runnable runnable = new Runnable() {
  60.205 +            public void run() {
  60.206 +                AlertDialog.Builder dlg = createDialog(cordova); // new AlertDialog.Builder(cordova.getActivity(), AlertDialog.THEME_DEVICE_DEFAULT_LIGHT);
  60.207 +                dlg.setMessage(message);
  60.208 +                dlg.setTitle(title);
  60.209 +                dlg.setCancelable(true);
  60.210 +
  60.211 +                // First button
  60.212 +                if (buttonLabels.length() > 0) {
  60.213 +                    try {
  60.214 +                        dlg.setNegativeButton(buttonLabels.getString(0),
  60.215 +                            new AlertDialog.OnClickListener() {
  60.216 +                                public void onClick(DialogInterface dialog, int which) {
  60.217 +                                    dialog.dismiss();
  60.218 +                                    callbackContext.sendPluginResult(new PluginResult(PluginResult.Status.OK, 1));
  60.219 +                                }
  60.220 +                            });
  60.221 +                    } catch (JSONException e) { }
  60.222 +                }
  60.223 +
  60.224 +                // Second button
  60.225 +                if (buttonLabels.length() > 1) {
  60.226 +                    try {
  60.227 +                        dlg.setNeutralButton(buttonLabels.getString(1),
  60.228 +                            new AlertDialog.OnClickListener() {
  60.229 +                                public void onClick(DialogInterface dialog, int which) {
  60.230 +                                    dialog.dismiss();
  60.231 +                                    callbackContext.sendPluginResult(new PluginResult(PluginResult.Status.OK, 2));
  60.232 +                                }
  60.233 +                            });
  60.234 +                    } catch (JSONException e) { }
  60.235 +                }
  60.236 +
  60.237 +                // Third button
  60.238 +                if (buttonLabels.length() > 2) {
  60.239 +                    try {
  60.240 +                        dlg.setPositiveButton(buttonLabels.getString(2),
  60.241 +                            new AlertDialog.OnClickListener() {
  60.242 +                                public void onClick(DialogInterface dialog, int which) {
  60.243 +                                  dialog.dismiss();
  60.244 +                                  callbackContext.sendPluginResult(new PluginResult(PluginResult.Status.OK, 3));
  60.245 +                                }
  60.246 +                            });
  60.247 +                    } catch (JSONException e) { }
  60.248 +                }
  60.249 +                dlg.setOnCancelListener(new AlertDialog.OnCancelListener() {
  60.250 +                    public void onCancel(DialogInterface dialog)
  60.251 +                    {
  60.252 +                        dialog.dismiss();
  60.253 +                        callbackContext.sendPluginResult(new PluginResult(PluginResult.Status.OK, 0));
  60.254 +                    }
  60.255 +                });
  60.256 +
  60.257 +                changeTextDirection(dlg);
  60.258 +            };
  60.259 +        };
  60.260 +        this.cordova.getActivity().runOnUiThread(runnable);
  60.261 +    }
  60.262 +
  60.263 +    /**
  60.264 +     * Builds and shows a native Android prompt dialog with given title, message, buttons.
  60.265 +     * This dialog only shows up to 3 buttons.  Any labels after that will be ignored.
  60.266 +     * The following results are returned to the JavaScript callback identified by callbackId:
  60.267 +     *     buttonIndex			Index number of the button selected
  60.268 +     *     input1				The text entered in the prompt dialog box
  60.269 +     *
  60.270 +     * @param message           The message the dialog should display
  60.271 +     * @param title             The title of the dialog
  60.272 +     * @param buttonLabels      A comma separated list of button labels (Up to 3 buttons)
  60.273 +     * @param callbackContext   The callback context.
  60.274 +     */
  60.275 +    public synchronized void prompt(final String message, final String title, final JSONArray buttonLabels, final String defaultText, final CallbackContext callbackContext) {
  60.276 +  	
  60.277 +        final CordovaInterface cordova = this.cordova;
  60.278 +       
  60.279 +        Runnable runnable = new Runnable() {
  60.280 +            public void run() {
  60.281 +                final EditText promptInput =  new EditText(cordova.getActivity());
  60.282 +                promptInput.setHint(defaultText);
  60.283 +                AlertDialog.Builder dlg = createDialog(cordova); // new AlertDialog.Builder(cordova.getActivity(), AlertDialog.THEME_DEVICE_DEFAULT_LIGHT);
  60.284 +                dlg.setMessage(message);
  60.285 +                dlg.setTitle(title);
  60.286 +                dlg.setCancelable(true);
  60.287 +                
  60.288 +                dlg.setView(promptInput);
  60.289 +                
  60.290 +                final JSONObject result = new JSONObject();
  60.291 +                
  60.292 +                // First button
  60.293 +                if (buttonLabels.length() > 0) {
  60.294 +                    try {
  60.295 +                        dlg.setNegativeButton(buttonLabels.getString(0),
  60.296 +                            new AlertDialog.OnClickListener() {
  60.297 +                                public void onClick(DialogInterface dialog, int which) {
  60.298 +                                    dialog.dismiss();
  60.299 +                                    try {
  60.300 +                                        result.put("buttonIndex",1);
  60.301 +                                        result.put("input1", promptInput.getText().toString().trim().length()==0 ? defaultText : promptInput.getText());											
  60.302 +                                    } catch (JSONException e) { e.printStackTrace(); }
  60.303 +                                    callbackContext.sendPluginResult(new PluginResult(PluginResult.Status.OK, result));
  60.304 +                                }
  60.305 +                            });
  60.306 +                    } catch (JSONException e) { }
  60.307 +                }
  60.308 +
  60.309 +                // Second button
  60.310 +                if (buttonLabels.length() > 1) {
  60.311 +                    try {
  60.312 +                        dlg.setNeutralButton(buttonLabels.getString(1),
  60.313 +                            new AlertDialog.OnClickListener() {
  60.314 +                                public void onClick(DialogInterface dialog, int which) {
  60.315 +                                    dialog.dismiss();
  60.316 +                                    try {
  60.317 +                                        result.put("buttonIndex",2);
  60.318 +                                        result.put("input1", promptInput.getText().toString().trim().length()==0 ? defaultText : promptInput.getText());
  60.319 +                                    } catch (JSONException e) { e.printStackTrace(); }
  60.320 +                                    callbackContext.sendPluginResult(new PluginResult(PluginResult.Status.OK, result));
  60.321 +                                }
  60.322 +                            });
  60.323 +                    } catch (JSONException e) { }
  60.324 +                }
  60.325 +
  60.326 +                // Third button
  60.327 +                if (buttonLabels.length() > 2) {
  60.328 +                    try {
  60.329 +                        dlg.setPositiveButton(buttonLabels.getString(2),
  60.330 +                            new AlertDialog.OnClickListener() {
  60.331 +                                public void onClick(DialogInterface dialog, int which) {
  60.332 +                                    dialog.dismiss();
  60.333 +                                    try {
  60.334 +                                        result.put("buttonIndex",3);
  60.335 +                                        result.put("input1", promptInput.getText().toString().trim().length()==0 ? defaultText : promptInput.getText());
  60.336 +                                    } catch (JSONException e) { e.printStackTrace(); }
  60.337 +                                    callbackContext.sendPluginResult(new PluginResult(PluginResult.Status.OK, result));
  60.338 +                                }
  60.339 +                            });
  60.340 +                    } catch (JSONException e) { }
  60.341 +                }
  60.342 +                dlg.setOnCancelListener(new AlertDialog.OnCancelListener() {
  60.343 +                    public void onCancel(DialogInterface dialog){
  60.344 +                        dialog.dismiss();
  60.345 +                        try {
  60.346 +                            result.put("buttonIndex",0);
  60.347 +                            result.put("input1", promptInput.getText().toString().trim().length()==0 ? defaultText : promptInput.getText());
  60.348 +                        } catch (JSONException e) { e.printStackTrace(); }
  60.349 +                        callbackContext.sendPluginResult(new PluginResult(PluginResult.Status.OK, result));
  60.350 +                    }
  60.351 +                });
  60.352 +
  60.353 +                changeTextDirection(dlg);
  60.354 +            };
  60.355 +        };
  60.356 +        this.cordova.getActivity().runOnUiThread(runnable);
  60.357 +    }
  60.358 +
  60.359 +    /**
  60.360 +     * Show the spinner.
  60.361 +     *
  60.362 +     * @param title     Title of the dialog
  60.363 +     * @param message   The message of the dialog
  60.364 +     */
  60.365 +    public synchronized void activityStart(final String title, final String message) {
  60.366 +        if (this.spinnerDialog != null) {
  60.367 +            this.spinnerDialog.dismiss();
  60.368 +            this.spinnerDialog = null;
  60.369 +        }
  60.370 +        final Notification notification = this;
  60.371 +        final CordovaInterface cordova = this.cordova;
  60.372 +        Runnable runnable = new Runnable() {
  60.373 +            public void run() {
  60.374 +                notification.spinnerDialog = createProgressDialog(cordova); // new ProgressDialog(cordova.getActivity(), AlertDialog.THEME_DEVICE_DEFAULT_LIGHT);
  60.375 +                notification.spinnerDialog.setTitle(title);
  60.376 +                notification.spinnerDialog.setMessage(message);
  60.377 +                notification.spinnerDialog.setCancelable(true);
  60.378 +                notification.spinnerDialog.setIndeterminate(true);
  60.379 +                notification.spinnerDialog.setOnCancelListener(
  60.380 +                        new DialogInterface.OnCancelListener() {
  60.381 +                            public void onCancel(DialogInterface dialog) {
  60.382 +                                notification.spinnerDialog = null;
  60.383 +                            }
  60.384 +                        });
  60.385 +                notification.spinnerDialog.show();
  60.386 +            }
  60.387 +        };
  60.388 +        this.cordova.getActivity().runOnUiThread(runnable);
  60.389 +    }
  60.390 +
  60.391 +    /**
  60.392 +     * Stop spinner.
  60.393 +     */
  60.394 +    public synchronized void activityStop() {
  60.395 +        if (this.spinnerDialog != null) {
  60.396 +            this.spinnerDialog.dismiss();
  60.397 +            this.spinnerDialog = null;
  60.398 +        }
  60.399 +    }
  60.400 +
  60.401 +    /**
  60.402 +     * Show the progress dialog.
  60.403 +     *
  60.404 +     * @param title     Title of the dialog
  60.405 +     * @param message   The message of the dialog
  60.406 +     */
  60.407 +    public synchronized void progressStart(final String title, final String message) {
  60.408 +        if (this.progressDialog != null) {
  60.409 +            this.progressDialog.dismiss();
  60.410 +            this.progressDialog = null;
  60.411 +        }
  60.412 +        final Notification notification = this;
  60.413 +        final CordovaInterface cordova = this.cordova;
  60.414 +        Runnable runnable = new Runnable() {
  60.415 +            public void run() {
  60.416 +                notification.progressDialog = createProgressDialog(cordova); // new ProgressDialog(cordova.getActivity(), AlertDialog.THEME_DEVICE_DEFAULT_LIGHT);
  60.417 +                notification.progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
  60.418 +                notification.progressDialog.setTitle(title);
  60.419 +                notification.progressDialog.setMessage(message);
  60.420 +                notification.progressDialog.setCancelable(true);
  60.421 +                notification.progressDialog.setMax(100);
  60.422 +                notification.progressDialog.setProgress(0);
  60.423 +                notification.progressDialog.setOnCancelListener(
  60.424 +                        new DialogInterface.OnCancelListener() {
  60.425 +                            public void onCancel(DialogInterface dialog) {
  60.426 +                                notification.progressDialog = null;
  60.427 +                            }
  60.428 +                        });
  60.429 +                notification.progressDialog.show();
  60.430 +            }
  60.431 +        };
  60.432 +        this.cordova.getActivity().runOnUiThread(runnable);
  60.433 +    }
  60.434 +
  60.435 +    /**
  60.436 +     * Set value of progress bar.
  60.437 +     *
  60.438 +     * @param value     0-100
  60.439 +     */
  60.440 +    public synchronized void progressValue(int value) {
  60.441 +        if (this.progressDialog != null) {
  60.442 +            this.progressDialog.setProgress(value);
  60.443 +        }
  60.444 +    }
  60.445 +
  60.446 +    /**
  60.447 +     * Stop progress dialog.
  60.448 +     */
  60.449 +    public synchronized void progressStop() {
  60.450 +        if (this.progressDialog != null) {
  60.451 +            this.progressDialog.dismiss();
  60.452 +            this.progressDialog = null;
  60.453 +        }
  60.454 +    }
  60.455 +    
  60.456 +    @SuppressLint("NewApi")
  60.457 +    private AlertDialog.Builder createDialog(CordovaInterface cordova) {
  60.458 +        int currentapiVersion = android.os.Build.VERSION.SDK_INT;
  60.459 +        if (currentapiVersion >= android.os.Build.VERSION_CODES.HONEYCOMB) {
  60.460 +            return new AlertDialog.Builder(cordova.getActivity(), AlertDialog.THEME_DEVICE_DEFAULT_LIGHT);
  60.461 +        } else {
  60.462 +            return new AlertDialog.Builder(cordova.getActivity());
  60.463 +        }
  60.464 +    }
  60.465 +
  60.466 +    @SuppressLint("InlinedApi")
  60.467 +    private ProgressDialog createProgressDialog(CordovaInterface cordova) {
  60.468 +        int currentapiVersion = android.os.Build.VERSION.SDK_INT;
  60.469 +        if (currentapiVersion >= android.os.Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
  60.470 +            return new ProgressDialog(cordova.getActivity(), AlertDialog.THEME_DEVICE_DEFAULT_LIGHT);
  60.471 +        } else {
  60.472 +            return new ProgressDialog(cordova.getActivity());
  60.473 +        }
  60.474 +    }
  60.475 +    
  60.476 +    @SuppressLint("NewApi")
  60.477 +    private void changeTextDirection(Builder dlg){
  60.478 +        int currentapiVersion = android.os.Build.VERSION.SDK_INT;
  60.479 +        dlg.create();
  60.480 +        AlertDialog dialog =  dlg.show();
  60.481 +        if (currentapiVersion >= android.os.Build.VERSION_CODES.JELLY_BEAN_MR1) {
  60.482 +            TextView messageview = (TextView)dialog.findViewById(android.R.id.message);
  60.483 +            messageview.setTextDirection(android.view.View.TEXT_DIRECTION_LOCALE);
  60.484 +        }
  60.485 +    }
  60.486 +}
    61.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    61.2 +++ b/Touchgui/plugins/org.apache.cordova.dialogs/src/blackberry10/index.js	Thu Jun 04 14:50:33 2015 +0200
    61.3 @@ -0,0 +1,87 @@
    61.4 +/*
    61.5 +* Copyright 2013 Research In Motion Limited.
    61.6 +*
    61.7 +* Licensed under the Apache License, Version 2.0 (the "License");
    61.8 +* you may not use this file except in compliance with the License.
    61.9 +* You may obtain a copy of the License at
   61.10 +*
   61.11 +* http://www.apache.org/licenses/LICENSE-2.0
   61.12 +*
   61.13 +* Unless required by applicable law or agreed to in writing, software
   61.14 +* distributed under the License is distributed on an "AS IS" BASIS,
   61.15 +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   61.16 +* See the License for the specific language governing permissions and
   61.17 +* limitations under the License.
   61.18 +*/
   61.19 +
   61.20 +function showDialog(args, dialogType, result) {
   61.21 +    //Unpack and map the args
   61.22 +    var msg = JSON.parse(decodeURIComponent(args[0])),
   61.23 +    title = JSON.parse(decodeURIComponent(args[1])),
   61.24 +    btnLabel = JSON.parse(decodeURIComponent(args[2]));
   61.25 +
   61.26 +    if (!Array.isArray(btnLabel)) {
   61.27 +        //Converts to array for (string) and (string,string, ...) cases
   61.28 +        btnLabel = btnLabel.split(",");
   61.29 +    }
   61.30 +
   61.31 +    if (msg && typeof msg === "string") {
   61.32 +        msg = msg.replace(/^"|"$/g, "").replace(/\\"/g, '"');
   61.33 +    } else {
   61.34 +        result.error("message is undefined");
   61.35 +        return;
   61.36 +    }
   61.37 +
   61.38 +    var messageObj = {
   61.39 +        title : title,
   61.40 +        htmlmessage :  msg,
   61.41 +        dialogType : dialogType,
   61.42 +        optionalButtons : btnLabel
   61.43 +    };
   61.44 +
   61.45 +    //TODO replace with getOverlayWebview() when available in webplatform
   61.46 +    qnx.webplatform.getWebViews()[2].dialog.show(messageObj, function (data) {
   61.47 +        if (typeof data === "number") {
   61.48 +            //Confirm dialog call back needs to be called with one-based indexing [1,2,3 etc]
   61.49 +            result.callbackOk(++data, false);
   61.50 +        } else {
   61.51 +            //Prompt dialog callback expects object
   61.52 +            result.callbackOk({
   61.53 +                buttonIndex: data.ok ? 1 : 0,
   61.54 +                input1: (data.oktext) ? decodeURIComponent(data.oktext) : ""
   61.55 +            }, false);
   61.56 +        }
   61.57 +    });
   61.58 +
   61.59 +    result.noResult(true);
   61.60 +}
   61.61 +
   61.62 +module.exports = {
   61.63 +    alert: function (success, fail, args, env) {
   61.64 +        var result = new PluginResult(args, env);
   61.65 +
   61.66 +        if (Object.keys(args).length < 3) {
   61.67 +            result.error("Notification action - alert arguments not found.");
   61.68 +        } else {
   61.69 +            showDialog(args, "CustomAsk", result);
   61.70 +        }
   61.71 +    },
   61.72 +    confirm: function (success, fail, args, env) {
   61.73 +        var result = new PluginResult(args, env);
   61.74 +
   61.75 +        if (Object.keys(args).length < 3) {
   61.76 +            result.error("Notification action - confirm arguments not found.");
   61.77 +        } else {
   61.78 +            showDialog(args, "CustomAsk", result);
   61.79 +        }
   61.80 +    },
   61.81 +    prompt: function (success, fail, args, env) {
   61.82 +        var result = new PluginResult(args, env);
   61.83 +
   61.84 +        if (Object.keys(args).length < 3) {
   61.85 +            result.error("Notification action - prompt arguments not found.");
   61.86 +        } else {
   61.87 +            showDialog(args, "JavaScriptPrompt", result);
   61.88 +        }
   61.89 +    }
   61.90 +};
    62.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    62.2 +++ b/Touchgui/plugins/org.apache.cordova.dialogs/src/firefoxos/notification.js	Thu Jun 04 14:50:33 2015 +0200
    62.3 @@ -0,0 +1,154 @@
    62.4 +/*
    62.5 + *
    62.6 + * Licensed to the Apache Software Foundation (ASF) under one
    62.7 + * or more contributor license agreements.  See the NOTICE file
    62.8 + * distributed with this work for additional information
    62.9 + * regarding copyright ownership.  The ASF licenses this file
   62.10 + * to you under the Apache License, Version 2.0 (the
   62.11 + * "License"); you may not use this file except in compliance
   62.12 + * with the License.  You may obtain a copy of the License at
   62.13 + *
   62.14 + *   http://www.apache.org/licenses/LICENSE-2.0
   62.15 + *
   62.16 + * Unless required by applicable law or agreed to in writing,
   62.17 + * software distributed under the License is distributed on an
   62.18 + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
   62.19 + * KIND, either express or implied.  See the License for the
   62.20 + * specific language governing permissions and limitations
   62.21 + * under the License.
   62.22 + *
   62.23 +*/
   62.24 +
   62.25 +var modulemapper = require('cordova/modulemapper');
   62.26 +
   62.27 +
   62.28 +var origOpenFunc = modulemapper.getOriginalSymbol(window, 'window.open');
   62.29 +
   62.30 +
   62.31 +function _empty() {}
   62.32 +
   62.33 +
   62.34 +function modal(message, callback, title, buttonLabels, domObjects) {
   62.35 +    var mainWindow = window;
   62.36 +    var modalWindow = origOpenFunc();
   62.37 +    var modalDocument = modalWindow.document;
   62.38 +
   62.39 +    modalDocument.write(
   62.40 +        '<html><head>' +
   62.41 +        '<link rel="stylesheet" type="text/css" href="/css/index.css" />' +
   62.42 +        '<link rel="stylesheet" type="text/css" href="/css/notification.css" />' +
   62.43 +        '</head><body></body></html>');
   62.44 +
   62.45 +    var box = modalDocument.createElement('form');
   62.46 +    box.setAttribute('role', 'dialog');
   62.47 +    // prepare and append empty section
   62.48 +    var section = modalDocument.createElement('section');
   62.49 +    box.appendChild(section);
   62.50 +    // add title
   62.51 +    var boxtitle = modalDocument.createElement('h1');
   62.52 +    boxtitle.appendChild(modalDocument.createTextNode(title));
   62.53 +    section.appendChild(boxtitle);
   62.54 +    // add message
   62.55 +    var boxMessage = modalDocument.createElement('p');
   62.56 +    boxMessage.appendChild(modalDocument.createTextNode(message));
   62.57 +    section.appendChild(boxMessage);
   62.58 +    // inject what's needed
   62.59 +    if (domObjects) {
   62.60 +        section.appendChild(domObjects);
   62.61 +    }
   62.62 +    // add buttons and assign callbackButton on click
   62.63 +    var menu = modalDocument.createElement('menu');
   62.64 +    box.appendChild(menu);
   62.65 +    for (var index = 0; index < buttonLabels.length; index++) {
   62.66 +        addButton(buttonLabels[index], index, (index === 0));
   62.67 +    }
   62.68 +    modalDocument.body.appendChild(box);
   62.69 +
   62.70 +    function addButton(label, index, recommended) {
   62.71 +        var thisButtonCallback = makeCallbackButton(index + 1);
   62.72 +        var button = modalDocument.createElement('button');
   62.73 +        button.appendChild(modalDocument.createTextNode(label));
   62.74 +        button.addEventListener('click', thisButtonCallback, false);
   62.75 +        if (recommended) {
   62.76 +          // TODO: default one listens to Enter key
   62.77 +          button.classList.add('recommend');
   62.78 +        }
   62.79 +        menu.appendChild(button);
   62.80 +    }
   62.81 +
   62.82 +    // TODO: onUnload listens to the cancel key
   62.83 +    function onUnload() {
   62.84 +        var result = 0;
   62.85 +        if (modalDocument.getElementById('prompt-input')) {
   62.86 +            result = {
   62.87 +                input1: '',
   62.88 +                buttonIndex: 0
   62.89 +            }
   62.90 +        }
   62.91 +        mainWindow.setTimeout(function() {
   62.92 +            callback(result);
   62.93 +        }, 10);
   62.94 +    };
   62.95 +    modalWindow.addEventListener('unload', onUnload, false);
   62.96 +
   62.97 +    // call callback and destroy modal
   62.98 +    function makeCallbackButton(labelIndex) {
   62.99 +        return function() {
  62.100 +          if (modalWindow) {
  62.101 +              modalWindow.removeEventListener('unload', onUnload, false);
  62.102 +              modalWindow.close();
  62.103 +          }
  62.104 +          // checking if prompt
  62.105 +          var promptInput = modalDocument.getElementById('prompt-input');
  62.106 +          var response;
  62.107 +          if (promptInput) {
  62.108 +              response = {
  62.109 +                input1: promptInput.value,
  62.110 +                buttonIndex: labelIndex
  62.111 +              };
  62.112 +          }
  62.113 +          response = response || labelIndex;
  62.114 +          callback(response);
  62.115 +        }
  62.116 +    }
  62.117 +}
  62.118 +
  62.119 +var Notification = {
  62.120 +    vibrate: function(milliseconds) {
  62.121 +        navigator.vibrate(milliseconds);
  62.122 +    },
  62.123 +    alert: function(successCallback, errorCallback, args) {
  62.124 +        var message = args[0];
  62.125 +        var title = args[1];
  62.126 +        var _buttonLabels = [args[2]];
  62.127 +        var _callback = (successCallback || _empty);
  62.128 +        modal(message, _callback, title, _buttonLabels);
  62.129 +    },
  62.130 +    confirm: function(successCallback, errorCallback, args) {
  62.131 +        var message = args[0];
  62.132 +        var title = args[1];
  62.133 +        var buttonLabels = args[2];
  62.134 +        var _callback = (successCallback || _empty);
  62.135 +        modal(message, _callback, title, buttonLabels);
  62.136 +    },
  62.137 +    prompt: function(successCallback, errorCallback, args) {
  62.138 +        var message = args[0];
  62.139 +        var title = args[1];
  62.140 +        var buttonLabels = args[2];
  62.141 +        var defaultText = args[3];
  62.142 +        var inputParagraph = document.createElement('p');
  62.143 +        inputParagraph.classList.add('input');
  62.144 +        var inputElement = document.createElement('input');
  62.145 +        inputElement.setAttribute('type', 'text');
  62.146 +        inputElement.id = 'prompt-input';
  62.147 +        if (defaultText) {
  62.148 +            inputElement.setAttribute('placeholder', defaultText);
  62.149 +        }
  62.150 +        inputParagraph.appendChild(inputElement);
  62.151 +        modal(message, successCallback, title, buttonLabels, inputParagraph);
  62.152 +    }
  62.153 +};
  62.154 +
  62.155 +
  62.156 +module.exports = Notification;
  62.157 +require('cordova/exec/proxy').add('Notification', Notification);
    63.1 Binary file Touchgui/plugins/org.apache.cordova.dialogs/src/ios/CDVNotification.bundle/beep.wav has changed
    64.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    64.2 +++ b/Touchgui/plugins/org.apache.cordova.dialogs/src/ios/CDVNotification.h	Thu Jun 04 14:50:33 2015 +0200
    64.3 @@ -0,0 +1,37 @@
    64.4 +/*
    64.5 + Licensed to the Apache Software Foundation (ASF) under one
    64.6 + or more contributor license agreements.  See the NOTICE file
    64.7 + distributed with this work for additional information
    64.8 + regarding copyright ownership.  The ASF licenses this file
    64.9 + to you under the Apache License, Version 2.0 (the
   64.10 + "License"); you may not use this file except in compliance
   64.11 + with the License.  You may obtain a copy of the License at
   64.12 +
   64.13 + http://www.apache.org/licenses/LICENSE-2.0
   64.14 +
   64.15 + Unless required by applicable law or agreed to in writing,
   64.16 + software distributed under the License is distributed on an
   64.17 + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
   64.18 + KIND, either express or implied.  See the License for the
   64.19 + specific language governing permissions and limitations
   64.20 + under the License.
   64.21 + */
   64.22 +
   64.23 +#import <Foundation/Foundation.h>
   64.24 +#import <UIKit/UIKit.h>
   64.25 +#import <AudioToolbox/AudioServices.h>
   64.26 +#import <Cordova/CDVPlugin.h>
   64.27 +
   64.28 +@interface CDVNotification : CDVPlugin <UIAlertViewDelegate>{}
   64.29 +
   64.30 +- (void)alert:(CDVInvokedUrlCommand*)command;
   64.31 +- (void)confirm:(CDVInvokedUrlCommand*)command;
   64.32 +- (void)prompt:(CDVInvokedUrlCommand*)command;
   64.33 +- (void)beep:(CDVInvokedUrlCommand*)command;
   64.34 +
   64.35 +@end
   64.36 +
   64.37 +@interface CDVAlertView : UIAlertView {}
   64.38 +@property (nonatomic, copy) NSString* callbackId;
   64.39 +
   64.40 +@end
    65.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    65.2 +++ b/Touchgui/plugins/org.apache.cordova.dialogs/src/ios/CDVNotification.m	Thu Jun 04 14:50:33 2015 +0200
    65.3 @@ -0,0 +1,157 @@
    65.4 +/*
    65.5 + Licensed to the Apache Software Foundation (ASF) under one
    65.6 + or more contributor license agreements.  See the NOTICE file
    65.7 + distributed with this work for additional information
    65.8 + regarding copyright ownership.  The ASF licenses this file
    65.9 + to you under the Apache License, Version 2.0 (the
   65.10 + "License"); you may not use this file except in compliance
   65.11 + with the License.  You may obtain a copy of the License at
   65.12 +
   65.13 + http://www.apache.org/licenses/LICENSE-2.0
   65.14 +
   65.15 + Unless required by applicable law or agreed to in writing,
   65.16 + software distributed under the License is distributed on an
   65.17 + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
   65.18 + KIND, either express or implied.  See the License for the
   65.19 + specific language governing permissions and limitations
   65.20 + under the License.
   65.21 + */
   65.22 +
   65.23 +#import "CDVNotification.h"
   65.24 +#import <Cordova/NSDictionary+Extensions.h>
   65.25 +#import <Cordova/NSArray+Comparisons.h>
   65.26 +
   65.27 +#define DIALOG_TYPE_ALERT @"alert"
   65.28 +#define DIALOG_TYPE_PROMPT @"prompt"
   65.29 +
   65.30 +static void soundCompletionCallback(SystemSoundID ssid, void* data);
   65.31 +
   65.32 +@implementation CDVNotification
   65.33 +
   65.34 +/*
   65.35 + * showDialogWithMessage - Common method to instantiate the alert view for alert, confirm, and prompt notifications.
   65.36 + * Parameters:
   65.37 + *  message       The alert view message.
   65.38 + *  title         The alert view title.
   65.39 + *  buttons       The array of customized strings for the buttons.
   65.40 + *  defaultText   The input text for the textbox (if textbox exists).
   65.41 + *  callbackId    The commmand callback id.
   65.42 + *  dialogType    The type of alert view [alert | prompt].
   65.43 + */
   65.44 +- (void)showDialogWithMessage:(NSString*)message title:(NSString*)title buttons:(NSArray*)buttons defaultText:(NSString*)defaultText callbackId:(NSString*)callbackId dialogType:(NSString*)dialogType
   65.45 +{
   65.46 +    CDVAlertView* alertView = [[CDVAlertView alloc]
   65.47 +        initWithTitle:title
   65.48 +                  message:message
   65.49 +                 delegate:self
   65.50 +        cancelButtonTitle:nil
   65.51 +        otherButtonTitles:nil];
   65.52 +
   65.53 +    alertView.callbackId = callbackId;
   65.54 +
   65.55 +    NSUInteger count = [buttons count];
   65.56 +
   65.57 +    for (int n = 0; n < count; n++) {
   65.58 +        [alertView addButtonWithTitle:[buttons objectAtIndex:n]];
   65.59 +    }
   65.60 +
   65.61 +    if ([dialogType isEqualToString:DIALOG_TYPE_PROMPT]) {
   65.62 +        alertView.alertViewStyle = UIAlertViewStylePlainTextInput;
   65.63 +        UITextField* textField = [alertView textFieldAtIndex:0];
   65.64 +        textField.text = defaultText;
   65.65 +    }
   65.66 +
   65.67 +    [alertView show];
   65.68 +}
   65.69 +
   65.70 +- (void)alert:(CDVInvokedUrlCommand*)command
   65.71 +{
   65.72 +    NSString* callbackId = command.callbackId;
   65.73 +    NSString* message = [command argumentAtIndex:0];
   65.74 +    NSString* title = [command argumentAtIndex:1];
   65.75 +    NSString* buttons = [command argumentAtIndex:2];
   65.76 +
   65.77 +    [self showDialogWithMessage:message title:title buttons:@[buttons] defaultText:nil callbackId:callbackId dialogType:DIALOG_TYPE_ALERT];
   65.78 +}
   65.79 +
   65.80 +- (void)confirm:(CDVInvokedUrlCommand*)command
   65.81 +{
   65.82 +    NSString* callbackId = command.callbackId;
   65.83 +    NSString* message = [command argumentAtIndex:0];
   65.84 +    NSString* title = [command argumentAtIndex:1];
   65.85 +    NSArray* buttons = [command argumentAtIndex:2];
   65.86 +
   65.87 +    [self showDialogWithMessage:message title:title buttons:buttons defaultText:nil callbackId:callbackId dialogType:DIALOG_TYPE_ALERT];
   65.88 +}
   65.89 +
   65.90 +- (void)prompt:(CDVInvokedUrlCommand*)command
   65.91 +{
   65.92 +    NSString* callbackId = command.callbackId;
   65.93 +    NSString* message = [command argumentAtIndex:0];
   65.94 +    NSString* title = [command argumentAtIndex:1];
   65.95 +    NSArray* buttons = [command argumentAtIndex:2];
   65.96 +    NSString* defaultText = [command argumentAtIndex:3];
   65.97 +
   65.98 +    [self showDialogWithMessage:message title:title buttons:buttons defaultText:defaultText callbackId:callbackId dialogType:DIALOG_TYPE_PROMPT];
   65.99 +}
  65.100 +
  65.101 +/**
  65.102 +  * Callback invoked when an alert dialog's buttons are clicked.
  65.103 +  */
  65.104 +- (void)alertView:(UIAlertView*)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
  65.105 +{
  65.106 +    CDVAlertView* cdvAlertView = (CDVAlertView*)alertView;
  65.107 +    CDVPluginResult* result;
  65.108 +
  65.109 +    // Determine what gets returned to JS based on the alert view type.
  65.110 +    if (alertView.alertViewStyle == UIAlertViewStyleDefault) {
  65.111 +        // For alert and confirm, return button index as int back to JS.
  65.112 +        result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsInt:(int)(buttonIndex + 1)];
  65.113 +    } else {
  65.114 +        // For prompt, return button index and input text back to JS.
  65.115 +        NSString* value0 = [[alertView textFieldAtIndex:0] text];
  65.116 +        NSDictionary* info = @{
  65.117 +            @"buttonIndex":@(buttonIndex + 1),
  65.118 +            @"input1":(value0 ? value0 : [NSNull null])
  65.119 +        };
  65.120 +        result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsDictionary:info];
  65.121 +    }
  65.122 +    [self.commandDelegate sendPluginResult:result callbackId:cdvAlertView.callbackId];
  65.123 +}
  65.124 +
  65.125 +static void playBeep(int count) {
  65.126 +    SystemSoundID completeSound;
  65.127 +    NSInteger cbDataCount = count;
  65.128 +    NSURL* audioPath = [[NSBundle mainBundle] URLForResource:@"CDVNotification.bundle/beep" withExtension:@"wav"];
  65.129 +    #if __has_feature(objc_arc)
  65.130 +        AudioServicesCreateSystemSoundID((__bridge CFURLRef)audioPath, &completeSound);
  65.131 +    #else
  65.132 +        AudioServicesCreateSystemSoundID((CFURLRef)audioPath, &completeSound);
  65.133 +    #endif
  65.134 +    AudioServicesAddSystemSoundCompletion(completeSound, NULL, NULL, soundCompletionCallback, (void*)(cbDataCount-1));
  65.135 +    AudioServicesPlaySystemSound(completeSound);
  65.136 +}
  65.137 +
  65.138 +static void soundCompletionCallback(SystemSoundID  ssid, void* data) {
  65.139 +    int count = (int)data;
  65.140 +    AudioServicesRemoveSystemSoundCompletion (ssid);
  65.141 +    AudioServicesDisposeSystemSoundID(ssid);
  65.142 +    if (count > 0) {
  65.143 +        playBeep(count);
  65.144 +    }
  65.145 +}
  65.146 +
  65.147 +- (void)beep:(CDVInvokedUrlCommand*)command
  65.148 +{
  65.149 +    NSNumber* count = [command.arguments objectAtIndex:0 withDefault:[NSNumber numberWithInt:1]];
  65.150 +    playBeep([count intValue]);
  65.151 +}
  65.152 +
  65.153 +
  65.154 +@end
  65.155 +
  65.156 +@implementation CDVAlertView
  65.157 +
  65.158 +@synthesize callbackId;
  65.159 +
  65.160 +@end
    66.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    66.2 +++ b/Touchgui/plugins/org.apache.cordova.dialogs/src/ubuntu/notification.cpp	Thu Jun 04 14:50:33 2015 +0200
    66.3 @@ -0,0 +1,85 @@
    66.4 +/*
    66.5 + *
    66.6 + *  Licensed under the Apache License, Version 2.0 (the "License");
    66.7 + *  you may not use this file except in compliance with the License.
    66.8 + *  You may obtain a copy of the License at
    66.9 + *
   66.10 + *      http://www.apache.org/licenses/LICENSE-2.0
   66.11 + *
   66.12 + *  Unless required by applicable law or agreed to in writing, software
   66.13 + *  distributed under the License is distributed on an "AS IS" BASIS,
   66.14 + *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   66.15 + *  See the License for the specific language governing permissions and
   66.16 + *  limitations under the License.
   66.17 + */
   66.18 +
   66.19 +#include "notification.h"
   66.20 +
   66.21 +#include <QApplication>
   66.22 +
   66.23 +void Dialogs::beep(int scId, int ecId, int times) {
   66.24 +    Q_UNUSED(scId)
   66.25 +    Q_UNUSED(ecId)
   66.26 +    Q_UNUSED(times)
   66.27 +
   66.28 +    _player.setVolume(100);
   66.29 +    _player.setMedia(QUrl::fromLocalFile("/usr/share/sounds/ubuntu/stereo/bell.ogg"));
   66.30 +    _player.play();
   66.31 +}
   66.32 +
   66.33 +void Dialogs::alert(int scId, int ecId, const QString &message, const QString &title, const QString &buttonLabel) {
   66.34 +    QStringList list;
   66.35 +    list.append(buttonLabel);
   66.36 +
   66.37 +    confirm(scId, ecId, message, title, list);
   66.38 +}
   66.39 +
   66.40 +void Dialogs::confirm(int scId, int ecId, const QString &message, const QString &title, const QStringList &buttonLabels) {
   66.41 +    Q_UNUSED(ecId);
   66.42 +
   66.43 +    if (_alertCallback) {
   66.44 +        qCritical() << "can't open second dialog";
   66.45 +        return;
   66.46 +    }
   66.47 +    _alertCallback = scId;
   66.48 +
   66.49 +    QString s1, s2, s3;
   66.50 +    if (buttonLabels.size() > 0)
   66.51 +        s1 = buttonLabels[0];
   66.52 +    if (buttonLabels.size() > 1)
   66.53 +        s2 = buttonLabels[1];
   66.54 +    if (buttonLabels.size() > 2)
   66.55 +        s3 = buttonLabels[2];
   66.56 +
   66.57 +    QString path = m_cordova->get_app_dir() + "/../qml/notification.qml";
   66.58 +    QString qml = QString("PopupUtils.open(%1, root, { root: root, cordova: cordova, title: %2, text: %3, promptVisible: false, button1Text: %4, button2Text: %5, button3Text: %6 })")
   66.59 +        .arg(CordovaInternal::format(path)).arg(CordovaInternal::format(title)).arg(CordovaInternal::format(message))
   66.60 +        .arg(CordovaInternal::format(s1)).arg(CordovaInternal::format(s2)).arg(CordovaInternal::format(s3));
   66.61 +
   66.62 +    m_cordova->execQML(qml);
   66.63 +}
   66.64 +
   66.65 +void Dialogs::prompt(int scId, int ecId, const QString &message, const QString &title, const QStringList &buttonLabels, const QString &defaultText) {
   66.66 +    Q_UNUSED(ecId);
   66.67 +
   66.68 +    if (_alertCallback) {
   66.69 +        qCritical() << "can't open second dialog";
   66.70 +        return;
   66.71 +    }
   66.72 +    _alertCallback = scId;
   66.73 +
   66.74 +    QString s1, s2, s3;
   66.75 +    if (buttonLabels.size() > 0)
   66.76 +        s1 = buttonLabels[0];
   66.77 +    if (buttonLabels.size() > 1)
   66.78 +        s2 = buttonLabels[1];
   66.79 +    if (buttonLabels.size() > 2)
   66.80 +        s3 = buttonLabels[2];
   66.81 +    QString path = m_cordova->get_app_dir() + "/../qml/notification.qml";
   66.82 +    QString qml = QString("PopupUtils.open(%1, root, { root: root, cordova: cordova, title: %2, text: %3, promptVisible: true, defaultPromptText: %7, button1Text: %4, button2Text: %5, button3Text: %6 })")
   66.83 +        .arg(CordovaInternal::format(path)).arg(CordovaInternal::format(title)).arg(CordovaInternal::format(message))
   66.84 +        .arg(CordovaInternal::format(s1)).arg(CordovaInternal::format(s2))
   66.85 +        .arg(CordovaInternal::format(s3)).arg(CordovaInternal::format(defaultText));
   66.86 +
   66.87 +    m_cordova->execQML(qml);
   66.88 +}
    67.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    67.2 +++ b/Touchgui/plugins/org.apache.cordova.dialogs/src/ubuntu/notification.h	Thu Jun 04 14:50:33 2015 +0200
    67.3 @@ -0,0 +1,64 @@
    67.4 +/*
    67.5 + *
    67.6 + *  Licensed under the Apache License, Version 2.0 (the "License");
    67.7 + *  you may not use this file except in compliance with the License.
    67.8 + *  You may obtain a copy of the License at
    67.9 + *
   67.10 + *      http://www.apache.org/licenses/LICENSE-2.0
   67.11 + *
   67.12 + *  Unless required by applicable law or agreed to in writing, software
   67.13 + *  distributed under the License is distributed on an "AS IS" BASIS,
   67.14 + *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   67.15 + *  See the License for the specific language governing permissions and
   67.16 + *  limitations under the License.
   67.17 + */
   67.18 +
   67.19 +#ifndef NOTIFICATION_H
   67.20 +#define NOTIFICATION_H
   67.21 +
   67.22 +#include <QtQuick>
   67.23 +#include <QMediaPlayer>
   67.24 +#include <cplugin.h>
   67.25 +#include <cordova.h>
   67.26 +
   67.27 +class Dialogs: public CPlugin {
   67.28 +    Q_OBJECT
   67.29 +public:
   67.30 +    explicit Dialogs(Cordova *cordova): CPlugin(cordova), _alertCallback(0) {
   67.31 +    }
   67.32 +
   67.33 +    virtual const QString fullName() override {
   67.34 +        return Dialogs::fullID();
   67.35 +    }
   67.36 +
   67.37 +    virtual const QString shortName() override {
   67.38 +        return "Notification";
   67.39 +    }
   67.40 +
   67.41 +    static const QString fullID() {
   67.42 +        return "Notification";
   67.43 +    }
   67.44 +public slots:
   67.45 +    void beep(int scId, int ecId, int times);
   67.46 +    void alert(int scId, int ecId, const QString &message, const QString &title, const QString &buttonLabel);
   67.47 +    void confirm(int scId, int ecId, const QString &message, const QString &title, const QStringList &buttonLabels);
   67.48 +    void prompt(int scId, int ecId, const QString &message, const QString &title, const QStringList &buttonLabels, const QString &defaultText);
   67.49 +
   67.50 +    void notificationDialogButtonPressed(int buttonId, const QString &text, bool prompt) {
   67.51 +        if (prompt) {
   67.52 +            QVariantMap res;
   67.53 +            res.insert("buttonIndex", buttonId);
   67.54 +            res.insert("input1", text);
   67.55 +            this->cb(_alertCallback, res);
   67.56 +        } else {
   67.57 +            this->cb(_alertCallback, buttonId);
   67.58 +        }
   67.59 +        _alertCallback = 0;
   67.60 +    }
   67.61 +
   67.62 +private:
   67.63 +    int _alertCallback;
   67.64 +    QMediaPlayer _player;
   67.65 +};
   67.66 +
   67.67 +#endif
    68.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    68.2 +++ b/Touchgui/plugins/org.apache.cordova.dialogs/src/ubuntu/notification.qml	Thu Jun 04 14:50:33 2015 +0200
    68.3 @@ -0,0 +1,65 @@
    68.4 +/*
    68.5 + *
    68.6 + * Licensed to the Apache Software Foundation (ASF) under one
    68.7 + * or more contributor license agreements.  See the NOTICE file
    68.8 + * distributed with this work for additional information
    68.9 + * regarding copyright ownership.  The ASF licenses this file
   68.10 + * to you under the Apache License, Version 2.0 (the
   68.11 + * "License"); you may not use this file except in compliance
   68.12 + * with the License.  You may obtain a copy of the License at
   68.13 + *
   68.14 + *   http://www.apache.org/licenses/LICENSE-2.0
   68.15 + *
   68.16 + * Unless required by applicable law or agreed to in writing,
   68.17 + * software distributed under the License is distributed on an
   68.18 + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
   68.19 + * KIND, either express or implied.  See the License for the
   68.20 + * specific language governing permissions and limitations
   68.21 + * under the License.
   68.22 + *
   68.23 +*/
   68.24 +
   68.25 +import QtQuick 2.0
   68.26 +import Ubuntu.Components.Popups 0.1
   68.27 +import Ubuntu.Components 0.1
   68.28 +
   68.29 +Dialog {
   68.30 +    id: dialogue
   68.31 +    property string button1Text
   68.32 +    property string button2Text
   68.33 +    property string button3Text
   68.34 +    property bool promptVisible
   68.35 +    property string defaultPromptText
   68.36 +
   68.37 +    TextField {
   68.38 +        id: prompt
   68.39 +        text: defaultPromptText
   68.40 +        visible: promptVisible
   68.41 +        focus: true
   68.42 +    }
   68.43 +    Button {
   68.44 +        text: button1Text
   68.45 +        color: "orange"
   68.46 +        onClicked: {
   68.47 +            root.exec("Notification", "notificationDialogButtonPressed", [1, prompt.text, promptVisible]);
   68.48 +            PopupUtils.close(dialogue)
   68.49 +        }
   68.50 +    }
   68.51 +    Button {
   68.52 +        text: button2Text
   68.53 +        visible: button2Text.length > 0
   68.54 +        color: "orange"
   68.55 +        onClicked: {
   68.56 +            root.exec("Notification", "notificationDialogButtonPressed", [2, prompt.text, promptVisible]);
   68.57 +            PopupUtils.close(dialogue)
   68.58 +        }
   68.59 +    }
   68.60 +    Button {
   68.61 +        text: button3Text
   68.62 +        visible: button3Text.length > 0
   68.63 +        onClicked: {
   68.64 +            root.exec("Notification", "notificationDialogButtonPressed", [3, prompt.text, promptVisible]);
   68.65 +            PopupUtils.close(dialogue)
   68.66 +        }
   68.67 +    }
   68.68 +}
    69.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    69.2 +++ b/Touchgui/plugins/org.apache.cordova.dialogs/src/windows8/NotificationProxy.js	Thu Jun 04 14:50:33 2015 +0200
    69.3 @@ -0,0 +1,126 @@
    69.4 +/*
    69.5 + *
    69.6 + * Licensed to the Apache Software Foundation (ASF) under one
    69.7 + * or more contributor license agreements.  See the NOTICE file
    69.8 + * distributed with this work for additional information
    69.9 + * regarding copyright ownership.  The ASF licenses this file
   69.10 + * to you under the Apache License, Version 2.0 (the
   69.11 + * "License"); you may not use this file except in compliance
   69.12 + * with the License.  You may obtain a copy of the License at
   69.13 + *
   69.14 + *   http://www.apache.org/licenses/LICENSE-2.0
   69.15 + *
   69.16 + * Unless required by applicable law or agreed to in writing,
   69.17 + * software distributed under the License is distributed on an
   69.18 + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
   69.19 + * KIND, either express or implied.  See the License for the
   69.20 + * specific language governing permissions and limitations
   69.21 + * under the License.
   69.22 + *
   69.23 +*/
   69.24 +
   69.25 +/*global Windows:true */
   69.26 +
   69.27 +var cordova = require('cordova');
   69.28 +
   69.29 +var isAlertShowing = false;
   69.30 +var alertStack = [];
   69.31 +
   69.32 +module.exports = {
   69.33 +    alert:function(win, loseX, args) {
   69.34 +
   69.35 +        if (isAlertShowing) {
   69.36 +            var later = function () {
   69.37 +                module.exports.alert(win, loseX, args);
   69.38 +            };
   69.39 +            alertStack.push(later);
   69.40 +            return;
   69.41 +        }
   69.42 +        isAlertShowing = true;
   69.43 +
   69.44 +        var message = args[0];
   69.45 +        var _title = args[1];
   69.46 +        var _buttonLabel = args[2];
   69.47 +
   69.48 +        var md = new Windows.UI.Popups.MessageDialog(message, _title);
   69.49 +        md.commands.append(new Windows.UI.Popups.UICommand(_buttonLabel));
   69.50 +        md.showAsync().then(function() {
   69.51 +            isAlertShowing = false;
   69.52 +            win && win();
   69.53 +
   69.54 +            if (alertStack.length) {
   69.55 +                setTimeout(alertStack.shift(), 0);
   69.56 +            }
   69.57 +
   69.58 +        });
   69.59 +    },
   69.60 +
   69.61 +    confirm:function(win, loseX, args) {
   69.62 +
   69.63 +        if (isAlertShowing) {
   69.64 +            var later = function () {
   69.65 +                module.exports.confirm(win, loseX, args);
   69.66 +            };
   69.67 +            alertStack.push(later);
   69.68 +            return;
   69.69 +        }
   69.70 +
   69.71 +        isAlertShowing = true;
   69.72 +
   69.73 +        try {
   69.74 +            var message = args[0];
   69.75 +            var _title = args[1];
   69.76 +            var buttons = args[2];
   69.77 +
   69.78 +            var md = new Windows.UI.Popups.MessageDialog(message, _title);
   69.79 +
   69.80 +            buttons.forEach(function(buttonLabel) {
   69.81 +                md.commands.append(new Windows.UI.Popups.UICommand(buttonLabel));
   69.82 +            });
   69.83 +
   69.84 +            md.showAsync().then(function(res) {
   69.85 +                isAlertShowing = false;
   69.86 +                var result = res ? buttons.indexOf(res.label) + 1 : 0;
   69.87 +                win && win(result);
   69.88 +                if (alertStack.length) {
   69.89 +                    setTimeout(alertStack.shift(), 0);
   69.90 +                }
   69.91 +
   69.92 +            });
   69.93 +        } catch (e) {
   69.94 +            // set isAlertShowing flag back to false in case of exception
   69.95 +            isAlertShowing = false;
   69.96 +            if (alertStack.length) {
   69.97 +                setTimeout(alertStack.shift(), 0);
   69.98 +            }
   69.99 +            // rethrow exception
  69.100 +            throw e;
  69.101 +        }
  69.102 +    },
  69.103 +
  69.104 +    beep:function(winX, loseX, args) {
  69.105 +
  69.106 +        // set a default args if it is not set
  69.107 +        args = args && args.length ? args : ["1"];
  69.108 +
  69.109 +        var snd = new Audio('ms-winsoundevent:Notification.Default');
  69.110 +        var count = parseInt(args[0]) || 1;
  69.111 +        snd.msAudioCategory = "Alerts";
  69.112 +
  69.113 +        var onEvent = function () {
  69.114 +            if (count > 0) {
  69.115 +                snd.play();
  69.116 +            } else {
  69.117 +                snd.removeEventListener("ended", onEvent);
  69.118 +                snd = null;
  69.119 +                winX && winX(); // notification.js just sends null, but this is future friendly
  69.120 +            }
  69.121 +            count--;
  69.122 +        };
  69.123 +        snd.addEventListener("ended", onEvent);
  69.124 +        onEvent();
  69.125 +
  69.126 +    }
  69.127 +};
  69.128 +
  69.129 +require("cordova/exec/proxy").add("Notification",module.exports);
    70.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    70.2 +++ b/Touchgui/plugins/org.apache.cordova.dialogs/src/wp/Notification.cs	Thu Jun 04 14:50:33 2015 +0200
    70.3 @@ -0,0 +1,482 @@
    70.4 +/*  
    70.5 +	Licensed under the Apache License, Version 2.0 (the "License");
    70.6 +	you may not use this file except in compliance with the License.
    70.7 +	You may obtain a copy of the License at
    70.8 +	
    70.9 +	http://www.apache.org/licenses/LICENSE-2.0
   70.10 +	
   70.11 +	Unless required by applicable law or agreed to in writing, software
   70.12 +	distributed under the License is distributed on an "AS IS" BASIS,
   70.13 +	WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   70.14 +	See the License for the specific language governing permissions and
   70.15 +	limitations under the License.
   70.16 +*/
   70.17 +
   70.18 +using System;
   70.19 +using System.Windows;
   70.20 +using System.Windows.Controls;
   70.21 +using Microsoft.Devices;
   70.22 +using System.Runtime.Serialization;
   70.23 +using System.Threading;
   70.24 +using System.Windows.Resources;
   70.25 +using Microsoft.Phone.Controls;
   70.26 +using Microsoft.Xna.Framework.Audio;
   70.27 +using WPCordovaClassLib.Cordova.UI;
   70.28 +using System.Diagnostics;
   70.29 +
   70.30 +
   70.31 +namespace WPCordovaClassLib.Cordova.Commands
   70.32 +{
   70.33 +    public class Notification : BaseCommand
   70.34 +    {
   70.35 +        static ProgressBar progressBar = null;
   70.36 +        const int DEFAULT_DURATION = 5;
   70.37 +
   70.38 +        private NotificationBox notifyBox;
   70.39 +
   70.40 +        private class NotifBoxData
   70.41 +        {
   70.42 +            public NotificationBox previous {get;set;}
   70.43 +            public string callbackId { get; set; }
   70.44 +        }
   70.45 +
   70.46 +        private PhoneApplicationPage Page
   70.47 +        {
   70.48 +            get
   70.49 +            {
   70.50 +                PhoneApplicationPage page = null;
   70.51 +                PhoneApplicationFrame frame = Application.Current.RootVisual as PhoneApplicationFrame;
   70.52 +                if (frame != null)
   70.53 +                {
   70.54 +                    page = frame.Content as PhoneApplicationPage;
   70.55 +                }
   70.56 +                return page;
   70.57 +            }
   70.58 +        }
   70.59 +
   70.60 +        // blink api - doesn't look like there is an equivalent api we can use...
   70.61 +
   70.62 +        [DataContract]
   70.63 +        public class AlertOptions
   70.64 +        {
   70.65 +            [OnDeserializing]
   70.66 +            public void OnDeserializing(StreamingContext context)
   70.67 +            {
   70.68 +                // set defaults
   70.69 +                this.message = "message";
   70.70 +                this.title = "Alert";
   70.71 +                this.buttonLabel = "ok";
   70.72 +            }
   70.73 +
   70.74 +            /// <summary>
   70.75 +            /// message to display in the alert box
   70.76 +            /// </summary>
   70.77 +            [DataMember]
   70.78 +            public string message;
   70.79 +
   70.80 +            /// <summary>
   70.81 +            /// title displayed on the alert window
   70.82 +            /// </summary>
   70.83 +            [DataMember]
   70.84 +            public string title;
   70.85 +
   70.86 +            /// <summary>
   70.87 +            /// text to display on the button
   70.88 +            /// </summary>
   70.89 +            [DataMember]
   70.90 +            public string buttonLabel;
   70.91 +        }
   70.92 +
   70.93 +        [DataContract]
   70.94 +        public class PromptResult
   70.95 +        {
   70.96 +            [DataMember]
   70.97 +            public int buttonIndex;
   70.98 +
   70.99 +            [DataMember]
  70.100 +            public string input1;
  70.101 +
  70.102 +            public PromptResult(int index, string text)
  70.103 +            {
  70.104 +                this.buttonIndex = index;
  70.105 +                this.input1 = text;
  70.106 +            }
  70.107 +        }
  70.108 +
  70.109 +        public void alert(string options)
  70.110 +        {
  70.111 +            string[] args = JSON.JsonHelper.Deserialize<string[]>(options);
  70.112 +            AlertOptions alertOpts = new AlertOptions();
  70.113 +            alertOpts.message = args[0];
  70.114 +            alertOpts.title = args[1];
  70.115 +            alertOpts.buttonLabel = args[2];
  70.116 +            string aliasCurrentCommandCallbackId = args[3];
  70.117 +
  70.118 +            Deployment.Current.Dispatcher.BeginInvoke(() =>
  70.119 +            {
  70.120 +                PhoneApplicationPage page = Page;
  70.121 +                if (page != null)
  70.122 +                {
  70.123 +                    Grid grid = page.FindName("LayoutRoot") as Grid;
  70.124 +                    if (grid != null)
  70.125 +                    {
  70.126 +                        var previous = notifyBox;
  70.127 +                        notifyBox = new NotificationBox();
  70.128 +                        notifyBox.Tag = new NotifBoxData { previous = previous, callbackId = aliasCurrentCommandCallbackId };
  70.129 +                        notifyBox.PageTitle.Text = alertOpts.title;
  70.130 +                        notifyBox.SubTitle.Text = alertOpts.message;
  70.131 +                        Button btnOK = new Button();
  70.132 +                        btnOK.Content = alertOpts.buttonLabel;
  70.133 +                        btnOK.Click += new RoutedEventHandler(btnOK_Click);
  70.134 +                        btnOK.Tag = 1;
  70.135 +                        notifyBox.ButtonPanel.Children.Add(btnOK);
  70.136 +                        grid.Children.Add(notifyBox);
  70.137 +
  70.138 +                        if (previous == null)
  70.139 +                        {
  70.140 +                            page.BackKeyPress += page_BackKeyPress;
  70.141 +                        }
  70.142 +                    }
  70.143 +                }
  70.144 +                else
  70.145 +                {
  70.146 +                    DispatchCommandResult(new PluginResult(PluginResult.Status.INSTANTIATION_EXCEPTION));
  70.147 +                }
  70.148 +            });
  70.149 +        }
  70.150 +
  70.151 +        public void prompt(string options)
  70.152 +        {
  70.153 +            string[] args = JSON.JsonHelper.Deserialize<string[]>(options);
  70.154 +            string message = args[0];
  70.155 +            string title = args[1];
  70.156 +            string buttonLabelsArray = args[2];
  70.157 +            string[] buttonLabels = JSON.JsonHelper.Deserialize<string[]>(buttonLabelsArray);
  70.158 +            string defaultText = args[3];
  70.159 +            string aliasCurrentCommandCallbackId = args[4];
  70.160 +
  70.161 +            Deployment.Current.Dispatcher.BeginInvoke(() =>
  70.162 +            {
  70.163 +                PhoneApplicationPage page = Page;
  70.164 +                if (page != null)
  70.165 +                {
  70.166 +                    Grid grid = page.FindName("LayoutRoot") as Grid;
  70.167 +                    if (grid != null)
  70.168 +                    {
  70.169 +                        var previous = notifyBox;
  70.170 +                        notifyBox = new NotificationBox();
  70.171 +                        notifyBox.Tag = new NotifBoxData { previous = previous, callbackId = aliasCurrentCommandCallbackId };
  70.172 +                        notifyBox.PageTitle.Text = title;
  70.173 +                        notifyBox.SubTitle.Text = message;
  70.174 +
  70.175 +                        //TextBox textBox = new TextBox();
  70.176 +                        //textBox.Text = defaultText;
  70.177 +                        //textBox.AcceptsReturn = true;
  70.178 +                        //notifyBox.ContentScroller.Content = textBox;
  70.179 +
  70.180 +                        notifyBox.InputText.Text = defaultText;
  70.181 +                        notifyBox.InputText.Visibility = Visibility.Visible;
  70.182 +
  70.183 +                        for (int i = 0; i < buttonLabels.Length; ++i)
  70.184 +                        {
  70.185 +                            Button button = new Button();
  70.186 +                            button.Content = buttonLabels[i];
  70.187 +                            button.Tag = i + 1;
  70.188 +                            button.Click += promptBoxbutton_Click;
  70.189 +                            notifyBox.ButtonPanel.Orientation = Orientation.Vertical;
  70.190 +                            notifyBox.ButtonPanel.Children.Add(button);
  70.191 +                        }
  70.192 +
  70.193 +                        grid.Children.Add(notifyBox);
  70.194 +                        if (previous != null)
  70.195 +                        {
  70.196 +                            page.BackKeyPress += page_BackKeyPress;
  70.197 +                        }
  70.198 +                    }
  70.199 +                }
  70.200 +                else
  70.201 +                {
  70.202 +                    DispatchCommandResult(new PluginResult(PluginResult.Status.INSTANTIATION_EXCEPTION));
  70.203 +                }
  70.204 +            });
  70.205 +        }
  70.206 +
  70.207 +        public void confirm(string options)
  70.208 +        {
  70.209 +            string[] args = JSON.JsonHelper.Deserialize<string[]>(options);
  70.210 +            AlertOptions alertOpts = new AlertOptions();
  70.211 +            alertOpts.message = args[0];
  70.212 +            alertOpts.title = args[1];
  70.213 +            alertOpts.buttonLabel = args[2];
  70.214 +            string aliasCurrentCommandCallbackId = args[3];
  70.215 +
  70.216 +            Deployment.Current.Dispatcher.BeginInvoke(() =>
  70.217 +            {
  70.218 +                PhoneApplicationPage page = Page;
  70.219 +                if (page != null)
  70.220 +                {
  70.221 +                    Grid grid = page.FindName("LayoutRoot") as Grid;
  70.222 +                    if (grid != null)
  70.223 +                    {
  70.224 +                        var previous = notifyBox;
  70.225 +                        notifyBox = new NotificationBox();
  70.226 +                        notifyBox.Tag = new NotifBoxData { previous = previous, callbackId = aliasCurrentCommandCallbackId };
  70.227 +                        notifyBox.PageTitle.Text = alertOpts.title;
  70.228 +                        notifyBox.SubTitle.Text = alertOpts.message;
  70.229 +
  70.230 +                        string[] labels = JSON.JsonHelper.Deserialize<string[]>(alertOpts.buttonLabel);
  70.231 +
  70.232 +                        if (labels == null)
  70.233 +                        {
  70.234 +                            labels = alertOpts.buttonLabel.Split(',');
  70.235 +                        }
  70.236 +
  70.237 +                        for (int n = 0; n < labels.Length; n++)
  70.238 +                        {
  70.239 +                            Button btn = new Button();
  70.240 +                            btn.Content = labels[n];
  70.241 +                            btn.Tag = n;
  70.242 +                            btn.Click += new RoutedEventHandler(btnOK_Click);
  70.243 +                            notifyBox.ButtonPanel.Children.Add(btn);
  70.244 +                        }
  70.245 +
  70.246 +                        grid.Children.Add(notifyBox);
  70.247 +                        if (previous == null)
  70.248 +                        {
  70.249 +                            page.BackKeyPress += page_BackKeyPress;
  70.250 +                        }
  70.251 +                    }
  70.252 +                }
  70.253 +                else
  70.254 +                {
  70.255 +                    DispatchCommandResult(new PluginResult(PluginResult.Status.INSTANTIATION_EXCEPTION));
  70.256 +                }
  70.257 +            });
  70.258 +        }
  70.259 +
  70.260 +        void promptBoxbutton_Click(object sender, RoutedEventArgs e)
  70.261 +        {
  70.262 +            Button button = sender as Button;
  70.263 +            FrameworkElement promptBox = null;
  70.264 +            int buttonIndex = 0;
  70.265 +            string callbackId = string.Empty;
  70.266 +            string text = string.Empty;
  70.267 +            if (button != null)
  70.268 +            {
  70.269 +                buttonIndex = (int)button.Tag;
  70.270 +                promptBox = button.Parent as FrameworkElement;
  70.271 +                while ((promptBox = promptBox.Parent as FrameworkElement) != null &&
  70.272 +                       !(promptBox is NotificationBox)) ;
  70.273 +            }
  70.274 +
  70.275 +            if (promptBox != null)
  70.276 +            {
  70.277 +                NotificationBox box = promptBox as NotificationBox;
  70.278 +
  70.279 +                text = box.InputText.Text;
  70.280 +
  70.281 +                PhoneApplicationPage page = Page;
  70.282 +                if (page != null)
  70.283 +                {
  70.284 +                    Grid grid = page.FindName("LayoutRoot") as Grid;
  70.285 +                    if (grid != null)
  70.286 +                    {
  70.287 +                        grid.Children.Remove(promptBox);
  70.288 +                    }
  70.289 +
  70.290 +                    NotifBoxData data = promptBox.Tag as NotifBoxData;
  70.291 +                    promptBox = data.previous as NotificationBox;
  70.292 +                    callbackId = data.callbackId as string;
  70.293 +
  70.294 +                    if (promptBox == null)
  70.295 +                    {
  70.296 +                        page.BackKeyPress -= page_BackKeyPress;
  70.297 +                    }
  70.298 +                }
  70.299 +            }
  70.300 +            DispatchCommandResult(new PluginResult(PluginResult.Status.OK, new PromptResult(buttonIndex, text)), callbackId);
  70.301 +        }
  70.302 +
  70.303 +        void page_BackKeyPress(object sender, System.ComponentModel.CancelEventArgs e)
  70.304 +        {
  70.305 +            PhoneApplicationPage page = sender as PhoneApplicationPage;
  70.306 +            string callbackId = "";
  70.307 +            if (page != null && notifyBox != null)
  70.308 +            {
  70.309 +                Grid grid = page.FindName("LayoutRoot") as Grid;
  70.310 +                if (grid != null)
  70.311 +                {
  70.312 +                    grid.Children.Remove(notifyBox);
  70.313 +                    NotifBoxData notifBoxData = notifyBox.Tag as NotifBoxData;
  70.314 +                    notifyBox = notifBoxData.previous as NotificationBox;
  70.315 +                    callbackId = notifBoxData.callbackId as string;
  70.316 +                }
  70.317 +                if (notifyBox == null)
  70.318 +                {
  70.319 +                    page.BackKeyPress -= page_BackKeyPress;
  70.320 +                }
  70.321 +                e.Cancel = true;
  70.322 +            }
  70.323 +
  70.324 +            DispatchCommandResult(new PluginResult(PluginResult.Status.OK, 0), callbackId);
  70.325 +        }
  70.326 +
  70.327 +        void btnOK_Click(object sender, RoutedEventArgs e)
  70.328 +        {
  70.329 +            Button btn = sender as Button;
  70.330 +            FrameworkElement notifBoxParent = null;
  70.331 +            int retVal = 0;
  70.332 +            string callbackId = "";
  70.333 +            if (btn != null)
  70.334 +            {
  70.335 +                retVal = (int)btn.Tag + 1;
  70.336 +
  70.337 +                notifBoxParent = btn.Parent as FrameworkElement;
  70.338 +                while ((notifBoxParent = notifBoxParent.Parent as FrameworkElement) != null &&
  70.339 +                       !(notifBoxParent is NotificationBox)) ;
  70.340 +            }
  70.341 +            if (notifBoxParent != null)
  70.342 +            {
  70.343 +                PhoneApplicationPage page = Page;
  70.344 +                if (page != null)
  70.345 +                {
  70.346 +                    Grid grid = page.FindName("LayoutRoot") as Grid;
  70.347 +                    if (grid != null)
  70.348 +                    {
  70.349 +                        grid.Children.Remove(notifBoxParent);
  70.350 +                    }
  70.351 +
  70.352 +                    NotifBoxData notifBoxData = notifBoxParent.Tag as NotifBoxData;
  70.353 +                    notifyBox = notifBoxData.previous as NotificationBox;
  70.354 +                    callbackId = notifBoxData.callbackId as string;
  70.355 +
  70.356 +                    if (notifyBox == null)
  70.357 +                    {
  70.358 +                        page.BackKeyPress -= page_BackKeyPress;
  70.359 +                    }
  70.360 +                }
  70.361 +
  70.362 +            }
  70.363 +            DispatchCommandResult(new PluginResult(PluginResult.Status.OK, retVal), callbackId);
  70.364 +        }
  70.365 +
  70.366 +
  70.367 +
  70.368 +        public void beep(string options)
  70.369 +        {
  70.370 +            string[] args = JSON.JsonHelper.Deserialize<string[]>(options);
  70.371 +            int times = int.Parse(args[0]);
  70.372 +
  70.373 +            string resourcePath = BaseCommand.GetBaseURL() + "Plugins/org.apache.cordova.dialogs/notification-beep.wav";
  70.374 +
  70.375 +            StreamResourceInfo sri = Application.GetResourceStream(new Uri(resourcePath, UriKind.Relative));
  70.376 +
  70.377 +            if (sri != null)
  70.378 +            {
  70.379 +                SoundEffect effect = SoundEffect.FromStream(sri.Stream);
  70.380 +                SoundEffectInstance inst = effect.CreateInstance();
  70.381 +                ThreadPool.QueueUserWorkItem((o) =>
  70.382 +                {
  70.383 +                    // cannot interact with UI !!
  70.384 +                    do
  70.385 +                    {
  70.386 +                        inst.Play();
  70.387 +                        Thread.Sleep(effect.Duration + TimeSpan.FromMilliseconds(100));
  70.388 +                    }
  70.389 +                    while (--times > 0);
  70.390 +
  70.391 +                });
  70.392 +
  70.393 +            }
  70.394 +
  70.395 +            // TODO: may need a listener to trigger DispatchCommandResult after the alarm has finished executing...
  70.396 +            DispatchCommandResult();
  70.397 +        }
  70.398 +
  70.399 +        // Display an indeterminate progress indicator
  70.400 +        public void activityStart(string unused)
  70.401 +        {
  70.402 +
  70.403 +            Deployment.Current.Dispatcher.BeginInvoke(() =>
  70.404 +            {
  70.405 +                PhoneApplicationFrame frame = Application.Current.RootVisual as PhoneApplicationFrame;
  70.406 +
  70.407 +                if (frame != null)
  70.408 +                {
  70.409 +                    PhoneApplicationPage page = frame.Content as PhoneApplicationPage;
  70.410 +
  70.411 +                    if (page != null)
  70.412 +                    {
  70.413 +                        var temp = page.FindName("LayoutRoot");
  70.414 +                        Grid grid = temp as Grid;
  70.415 +                        if (grid != null)
  70.416 +                        {
  70.417 +                            if (progressBar != null)
  70.418 +                            {
  70.419 +                                grid.Children.Remove(progressBar);
  70.420 +                            }
  70.421 +                            progressBar = new ProgressBar();
  70.422 +                            progressBar.IsIndeterminate = true;
  70.423 +                            progressBar.IsEnabled = true;
  70.424 +
  70.425 +                            grid.Children.Add(progressBar);
  70.426 +                        }
  70.427 +                    }
  70.428 +                }
  70.429 +            });
  70.430 +        }
  70.431 +
  70.432 +
  70.433 +        // Remove our indeterminate progress indicator
  70.434 +        public void activityStop(string unused)
  70.435 +        {
  70.436 +            Deployment.Current.Dispatcher.BeginInvoke(() =>
  70.437 +            {
  70.438 +                if (progressBar != null)
  70.439 +                {
  70.440 +                    progressBar.IsEnabled = false;
  70.441 +                    PhoneApplicationFrame frame = Application.Current.RootVisual as PhoneApplicationFrame;
  70.442 +                    if (frame != null)
  70.443 +                    {
  70.444 +                        PhoneApplicationPage page = frame.Content as PhoneApplicationPage;
  70.445 +                        if (page != null)
  70.446 +                        {
  70.447 +                            Grid grid = page.FindName("LayoutRoot") as Grid;
  70.448 +                            if (grid != null)
  70.449 +                            {
  70.450 +                                grid.Children.Remove(progressBar);
  70.451 +                            }
  70.452 +                        }
  70.453 +                    }
  70.454 +                    progressBar = null;
  70.455 +                }
  70.456 +            });
  70.457 +        }
  70.458 +
  70.459 +        public void vibrate(string vibrateDuration)
  70.460 +        {
  70.461 +
  70.462 +            int msecs = 200; // set default
  70.463 +
  70.464 +            try
  70.465 +            {
  70.466 +                string[] args = JSON.JsonHelper.Deserialize<string[]>(vibrateDuration);
  70.467 +
  70.468 +                msecs = int.Parse(args[0]);
  70.469 +                if (msecs < 1)
  70.470 +                {
  70.471 +                    msecs = 1;
  70.472 +                }
  70.473 +            }
  70.474 +            catch (FormatException)
  70.475 +            {
  70.476 +
  70.477 +            }
  70.478 +
  70.479 +            VibrateController.Default.Start(TimeSpan.FromMilliseconds(msecs));
  70.480 +
  70.481 +            // TODO: may need to add listener to trigger DispatchCommandResult when the vibration ends...
  70.482 +            DispatchCommandResult();
  70.483 +        }
  70.484 +    }
  70.485 +}
    71.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    71.2 +++ b/Touchgui/plugins/org.apache.cordova.dialogs/src/wp/NotificationBox.xaml	Thu Jun 04 14:50:33 2015 +0200
    71.3 @@ -0,0 +1,79 @@
    71.4 +<!--
    71.5 + Licensed to the Apache Software Foundation (ASF) under one
    71.6 + or more contributor license agreements.  See the NOTICE file
    71.7 + distributed with this work for additional information
    71.8 + regarding copyright ownership.  The ASF licenses this file
    71.9 + to you under the Apache License, Version 2.0 (the
   71.10 + "License"); you may not use this file except in compliance
   71.11 + with the License.  You may obtain a copy of the License at
   71.12 +
   71.13 +   http://www.apache.org/licenses/LICENSE-2.0
   71.14 +
   71.15 + Unless required by applicable law or agreed to in writing,
   71.16 + software distributed under the License is distributed on an
   71.17 + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
   71.18 + KIND, either express or implied.  See the License for the
   71.19 + specific language governing permissions and limitations
   71.20 + under the License. 
   71.21 +-->
   71.22 +<UserControl x:Class="WPCordovaClassLib.Cordova.UI.NotificationBox"
   71.23 +    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
   71.24 +    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
   71.25 +    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
   71.26 +    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
   71.27 +    mc:Ignorable="d"
   71.28 +    FontFamily="{StaticResource PhoneFontFamilyNormal}"
   71.29 +    FontSize="{StaticResource PhoneFontSizeNormal}"
   71.30 +    Foreground="{StaticResource PhoneForegroundBrush}"
   71.31 +    d:DesignHeight="800" d:DesignWidth="480" VerticalAlignment="Stretch">
   71.32 +
   71.33 +   <!--TitlePanel contains the name of the application and page title-->
   71.34 +    <Grid x:Name="LayoutRoot"
   71.35 +          Background="{StaticResource PhoneSemitransparentBrush}">
   71.36 +        <Grid.RowDefinitions>
   71.37 +            <RowDefinition Height="*"></RowDefinition>
   71.38 +        </Grid.RowDefinitions>
   71.39 +
   71.40 +        <Grid x:Name="TitlePanel" 
   71.41 +            Grid.Row="0"
   71.42 +            VerticalAlignment="Top"
   71.43 +            Background="{StaticResource PhoneSemitransparentBrush}">
   71.44 +            <Grid.RowDefinitions>
   71.45 +                <RowDefinition Height="Auto"></RowDefinition>
   71.46 +                <RowDefinition Height="*"></RowDefinition>
   71.47 +                <RowDefinition Height="Auto"></RowDefinition>
   71.48 +            </Grid.RowDefinitions>
   71.49 +
   71.50 +            <TextBlock x:Name="PageTitle" 
   71.51 +                       Text="Title" 
   71.52 +                       Margin="10,10" 
   71.53 +                       Grid.Row="0"
   71.54 +                       Style="{StaticResource PhoneTextTitle2Style}"/>
   71.55 +            
   71.56 +            <ScrollViewer x:Name="ContentScroller"
   71.57 +                          Grid.Row="1"
   71.58 +                          MinHeight="120"
   71.59 +                          Margin="10,10">
   71.60 +                <StackPanel Orientation="Vertical">
   71.61 +                    <TextBlock x:Name="SubTitle" 
   71.62 +                               Text="Subtitle" 
   71.63 +                               Width="Auto"
   71.64 +                               TextWrapping="Wrap"
   71.65 +                               Style="{StaticResource PhoneTextTitle3Style}"/>
   71.66 +                    <TextBox x:Name="InputText" 
   71.67 +                             Visibility="Collapsed"/>
   71.68 +                </StackPanel>
   71.69 +            </ScrollViewer>
   71.70 +
   71.71 +            <ScrollViewer HorizontalScrollBarVisibility="Auto" 
   71.72 +                          Grid.Row="2"
   71.73 +                          VerticalScrollBarVisibility="Disabled">       
   71.74 +                <StackPanel x:Name="ButtonPanel"
   71.75 +                            Margin="10,10"
   71.76 +                            Orientation="Horizontal"/>
   71.77 +            </ScrollViewer>
   71.78 +
   71.79 +    </Grid>
   71.80 +    </Grid>
   71.81 +
   71.82 +</UserControl>
    72.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    72.2 +++ b/Touchgui/plugins/org.apache.cordova.dialogs/src/wp/NotificationBox.xaml.cs	Thu Jun 04 14:50:33 2015 +0200
    72.3 @@ -0,0 +1,41 @@
    72.4 +/*
    72.5 + Licensed to the Apache Software Foundation (ASF) under one
    72.6 + or more contributor license agreements.  See the NOTICE file
    72.7 + distributed with this work for additional information
    72.8 + regarding copyright ownership.  The ASF licenses this file
    72.9 + to you under the Apache License, Version 2.0 (the
   72.10 + "License"); you may not use this file except in compliance
   72.11 + with the License.  You may obtain a copy of the License at
   72.12 +
   72.13 +   http://www.apache.org/licenses/LICENSE-2.0
   72.14 +
   72.15 + Unless required by applicable law or agreed to in writing,
   72.16 + software distributed under the License is distributed on an
   72.17 + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
   72.18 + KIND, either express or implied.  See the License for the
   72.19 + specific language governing permissions and limitations
   72.20 + under the License. 
   72.21 +*/
   72.22 +
   72.23 +using System;
   72.24 +using System.Collections.Generic;
   72.25 +using System.Linq;
   72.26 +using System.Net;
   72.27 +using System.Windows;
   72.28 +using System.Windows.Controls;
   72.29 +using System.Windows.Documents;
   72.30 +using System.Windows.Input;
   72.31 +using System.Windows.Media;
   72.32 +using System.Windows.Media.Animation;
   72.33 +using System.Windows.Shapes;
   72.34 +
   72.35 +namespace WPCordovaClassLib.Cordova.UI
   72.36 +{
   72.37 +    public partial class NotificationBox : UserControl
   72.38 +    {
   72.39 +        public NotificationBox()
   72.40 +        {
   72.41 +            InitializeComponent();
   72.42 +        }
   72.43 +    }
   72.44 +}
    73.1 Binary file Touchgui/plugins/org.apache.cordova.dialogs/src/wp/notification-beep.wav has changed
    74.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    74.2 +++ b/Touchgui/plugins/org.apache.cordova.dialogs/tests/plugin.xml	Thu Jun 04 14:50:33 2015 +0200
    74.3 @@ -0,0 +1,29 @@
    74.4 +<?xml version="1.0" encoding="UTF-8"?>
    74.5 +<!--
    74.6 +  Licensed to the Apache Software Foundation (ASF) under one
    74.7 +  or more contributor license agreements.  See the NOTICE file
    74.8 +  distributed with this work for additional information
    74.9 +  regarding copyright ownership.  The ASF licenses this file
   74.10 +  to you under the Apache License, Version 2.0 (the
   74.11 +  "License"); you may not use this file except in compliance
   74.12 +  with the License.  You may obtain a copy of the License at
   74.13 +
   74.14 +    http://www.apache.org/licenses/LICENSE-2.0
   74.15 +
   74.16 +  Unless required by applicable law or agreed to in writing,
   74.17 +  software distributed under the License is distributed on an
   74.18 +  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
   74.19 +  KIND, either express or implied.  See the License for the
   74.20 +  specific language governing permissions and limitations
   74.21 +  under the License.
   74.22 +-->
   74.23 +
   74.24 +<plugin xmlns="http://apache.org/cordova/ns/plugins/1.0"
   74.25 +    id="org.apache.cordova.dialogs.tests"
   74.26 +    version="0.2.11">
   74.27 +    <name>Cordova Notification Plugin Tests</name>
   74.28 +    <license>Apache 2.0</license>
   74.29 +
   74.30 +    <js-module src="tests.js" name="tests">
   74.31 +    </js-module>
   74.32 +</plugin>
    75.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    75.2 +++ b/Touchgui/plugins/org.apache.cordova.dialogs/tests/tests.js	Thu Jun 04 14:50:33 2015 +0200
    75.3 @@ -0,0 +1,194 @@
    75.4 +/*
    75.5 + *
    75.6 + * Licensed to the Apache Software Foundation (ASF) under one
    75.7 + * or more contributor license agreements.  See the NOTICE file
    75.8 + * distributed with this work for additional information
    75.9 + * regarding copyright ownership.  The ASF licenses this file
   75.10 + * to you under the Apache License, Version 2.0 (the
   75.11 + * "License"); you may not use this file except in compliance
   75.12 + * with the License.  You may obtain a copy of the License at
   75.13 + *
   75.14 + *   http://www.apache.org/licenses/LICENSE-2.0
   75.15 + *
   75.16 + * Unless required by applicable law or agreed to in writing,
   75.17 + * software distributed under the License is distributed on an
   75.18 + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
   75.19 + * KIND, either express or implied.  See the License for the
   75.20 + * specific language governing permissions and limitations
   75.21 + * under the License.
   75.22 + *
   75.23 +*/
   75.24 +
   75.25 +exports.defineAutoTests = function () {
   75.26 +    describe('Notification (navigator.notification)', function () {
   75.27 +        it("should exist", function () {
   75.28 +            expect(navigator.notification).toBeDefined();
   75.29 +        });
   75.30 +
   75.31 +        it("should contain a beep function", function () {
   75.32 +            expect(typeof navigator.notification.beep).toBeDefined();
   75.33 +            expect(typeof navigator.notification.beep).toBe("function");
   75.34 +        });
   75.35 +
   75.36 +        it("should contain an alert function", function () {
   75.37 +            expect(typeof navigator.notification.alert).toBeDefined();
   75.38 +            expect(typeof navigator.notification.alert).toBe("function");
   75.39 +        });
   75.40 +
   75.41 +        it("should contain a confirm function", function () {
   75.42 +            expect(typeof navigator.notification.confirm).toBeDefined();
   75.43 +            expect(typeof navigator.notification.confirm).toBe("function");
   75.44 +        });
   75.45 +
   75.46 +        it("should contain a prompt function", function () {
   75.47 +            expect(typeof navigator.notification.prompt).toBeDefined();
   75.48 +            expect(typeof navigator.notification.prompt).toBe("function");
   75.49 +        });
   75.50 +    });
   75.51 +};
   75.52 +
   75.53 +/******************************************************************************/
   75.54 +/******************************************************************************/
   75.55 +/******************************************************************************/
   75.56 +
   75.57 +exports.defineManualTests = function (contentEl, createActionButton) {
   75.58 +    var logMessage = function (message) {
   75.59 +        var log = document.getElementById('info');
   75.60 +        var logLine = document.createElement('div');
   75.61 +        logLine.innerHTML = message;
   75.62 +        log.appendChild(logLine);
   75.63 +    }
   75.64 +
   75.65 +    var clearLog = function () {
   75.66 +        var log = document.getElementById('info');
   75.67 +        log.innerHTML = '';
   75.68 +    }
   75.69 +
   75.70 +    var beep = function () {
   75.71 +        console.log("beep()");
   75.72 +        navigator.notification.beep(3);
   75.73 +    };
   75.74 +
   75.75 +    var alertDialog = function (message, title, button) {
   75.76 +        console.log("alertDialog()");
   75.77 +        navigator.notification.alert(message,
   75.78 +            function () {
   75.79 +                console.log("Alert dismissed.");
   75.80 +            },
   75.81 +            title, button);
   75.82 +        console.log("After alert");
   75.83 +    };
   75.84 +
   75.85 +    var confirmDialogA = function (message, title, buttons) {
   75.86 +        clearLog();
   75.87 +        navigator.notification.confirm(message,
   75.88 +            function (r) {
   75.89 +                if (r === 0) {
   75.90 +                    logMessage("Dismissed dialog without making a selection.");
   75.91 +                    console.log("Dismissed dialog without making a selection.");
   75.92 +                } else {
   75.93 +                    console.log("You selected " + r);
   75.94 +                    logMessage("You selected " + (buttons.split(","))[r - 1]);
   75.95 +                }
   75.96 +            },
   75.97 +            title,
   75.98 +            buttons);
   75.99 +    };
  75.100 +
  75.101 +    var confirmDialogB = function (message, title, buttons) {
  75.102 +        clearLog();
  75.103 +        navigator.notification.confirm(message,
  75.104 +            function (r) {
  75.105 +                if (r === 0) {
  75.106 +                    logMessage("Dismissed dialog without making a selection.");
  75.107 +                    console.log("Dismissed dialog without making a selection.");
  75.108 +                } else {
  75.109 +                    console.log("You selected " + r);
  75.110 +                    logMessage("You selected " + buttons[r - 1]);
  75.111 +                }
  75.112 +            },
  75.113 +            title,
  75.114 +            buttons);
  75.115 +    };
  75.116 +
  75.117 +    var promptDialog = function (message, title, buttons) {
  75.118 +        clearLog();
  75.119 +        navigator.notification.prompt(message,
  75.120 +            function (r) {
  75.121 +                if (r && r.buttonIndex === 0) {
  75.122 +                    var msg = "Dismissed dialog";
  75.123 +                    if (r.input1) {
  75.124 +                        msg += " with input: " + r.input1
  75.125 +                    }
  75.126 +                    logMessage(msg);
  75.127 +                    console.log(msg);
  75.128 +                } else {
  75.129 +                    console.log("You selected " + r.buttonIndex + " and entered: " + r.input1);
  75.130 +                    logMessage("You selected " + buttons[r.buttonIndex - 1] + " and entered: " + r.input1);
  75.131 +                }
  75.132 +            },
  75.133 +            title,
  75.134 +            buttons);
  75.135 +    };
  75.136 +
  75.137 +    /******************************************************************************/
  75.138 +
  75.139 +    var dialogs_tests = '<div id="beep"></div>' +
  75.140 +        'Expected result: Device will beep (unless device is on silent). Nothing will get updated in status box.' +
  75.141 +        '<h2>Dialog Tests</h2>' +
  75.142 +        '<h3>Dialog boxes will pop up for each of the following tests</h3>' +
  75.143 +        '<p/> <div id="alert"></div>' +
  75.144 +        'Expected result: Dialog will say "You pressed alert". Press continue to close dialog. Nothing will get updated in status box.' +
  75.145 +        '<p/> <div id="confirm_deprecated"></div>' +
  75.146 +        'Expected result: Dialog will say "You pressed confirm". Press Yes, No, or Maybe to close dialog. Status box will tell you what option you selected.' +
  75.147 +        '<p/> <div id="confirm"></div>' +
  75.148 +        'Expected result: Dialog will say "You pressed confirm". Press Yes, No, or Maybe, Not Sure to close dialog. Status box will tell you what option you selected, and should use 1-based indexing.' +
  75.149 +        '<p/> <div id="prompt"></div>' +
  75.150 +        'Expected result: Dialog will say "You pressed prompt". Enter any message and press Yes, No, or Maybe, Not Sure to close dialog. Status box will tell you what option you selected and message you entered, and should use 1-based indexing.' +
  75.151 +        '<p/> <div id="built_in_alert"></div>' +
  75.152 +        'Expected result: Dialog will have title "index.html" and say "You pressed alert" Press OK to close dialog. Nothing will get updated in status box.' +
  75.153 +        '<p/> <div id="built_in_confirm"></div>' +
  75.154 +        'Expected result: Dialog will have title "index.html" and say "You selected confirm". Press Cancel or OK to close dialog. Nothing will get updated in status box.' +
  75.155 +        '<p/> <div id="built_in_prompt"></div>' +
  75.156 +        'Expected result: Dialog will have title "index.html" and say "This is a prompt". "Default value" will be in text box. Press Cancel or OK to close dialog. Nothing will get updated in status box.';
  75.157 +
  75.158 +    contentEl.innerHTML = '<div id="info"></div>' +
  75.159 +        dialogs_tests;
  75.160 +
  75.161 +    createActionButton('Beep', function () {
  75.162 +        beep();
  75.163 +    }, 'beep');
  75.164 +
  75.165 +    createActionButton('Alert Dialog', function () {
  75.166 +        alertDialog('You pressed alert.', 'Alert Dialog', 'Continue');
  75.167 +    }, 'alert');
  75.168 +
  75.169 +    // WP8.1 detection is necessary since it doesn't support confirm dialogs with more than 2 buttons
  75.170 +    var isRunningOnWP81 = cordova.platformId == "windows" && navigator.userAgent.indexOf('Windows Phone') > -1;
  75.171 +
  75.172 +    createActionButton('Confirm Dialog - Deprecated', function () {
  75.173 +        var buttons = isRunningOnWP81 ? 'Yes,No' : 'Yes,No,Maybe';
  75.174 +        confirmDialogA('You pressed confirm.', 'Confirm Dialog', buttons);
  75.175 +    }, 'confirm_deprecated');
  75.176 +
  75.177 +    createActionButton('Confirm Dialog', function () {
  75.178 +        var buttons = isRunningOnWP81 ? ['Yes', 'Actually, No'] : ['Yes', 'No', 'Maybe, Not Sure'];
  75.179 +        confirmDialogB('You pressed confirm.', 'Confirm Dialog', buttons);
  75.180 +    }, 'confirm');
  75.181 +
  75.182 +    createActionButton('Prompt Dialog', function () {
  75.183 +        promptDialog('You pressed prompt.', 'Prompt Dialog', ['Yes', 'No', 'Maybe, Not Sure']);
  75.184 +    }, 'prompt');
  75.185 +
  75.186 +    createActionButton('Built-in Alert Dialog', function () {
  75.187 +        typeof alert === 'function' && alert('You pressed alert');
  75.188 +    }, 'built_in_alert');
  75.189 +
  75.190 +    createActionButton('Built-in Confirm Dialog', function () {
  75.191 +        typeof confirm === 'function' && confirm('You selected confirm');
  75.192 +    }, 'built_in_confirm');
  75.193 +
  75.194 +    createActionButton('Built-in Prompt Dialog', function () {
  75.195 +        typeof prompt === 'function' && prompt('This is a prompt', 'Default value');
  75.196 +    }, 'built_in_prompt');
  75.197 +};
    76.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    76.2 +++ b/Touchgui/plugins/org.apache.cordova.dialogs/www/android/notification.js	Thu Jun 04 14:50:33 2015 +0200
    76.3 @@ -0,0 +1,74 @@
    76.4 +/*
    76.5 + *
    76.6 + * Licensed to the Apache Software Foundation (ASF) under one
    76.7 + * or more contributor license agreements.  See the NOTICE file
    76.8 + * distributed with this work for additional information
    76.9 + * regarding copyright ownership.  The ASF licenses this file
   76.10 + * to you under the Apache License, Version 2.0 (the
   76.11 + * "License"); you may not use this file except in compliance
   76.12 + * with the License.  You may obtain a copy of the License at
   76.13 + *
   76.14 + *   http://www.apache.org/licenses/LICENSE-2.0
   76.15 + *
   76.16 + * Unless required by applicable law or agreed to in writing,
   76.17 + * software distributed under the License is distributed on an
   76.18 + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
   76.19 + * KIND, either express or implied.  See the License for the
   76.20 + * specific language governing permissions and limitations
   76.21 + * under the License.
   76.22 + *
   76.23 +*/
   76.24 +
   76.25 +var exec = require('cordova/exec');
   76.26 +
   76.27 +/**
   76.28 + * Provides Android enhanced notification API.
   76.29 + */
   76.30 +module.exports = {
   76.31 +    activityStart : function(title, message) {
   76.32 +        // If title and message not specified then mimic Android behavior of
   76.33 +        // using default strings.
   76.34 +        if (typeof title === "undefined" && typeof message == "undefined") {
   76.35 +            title = "Busy";
   76.36 +            message = 'Please wait...';
   76.37 +        }
   76.38 +
   76.39 +        exec(null, null, 'Notification', 'activityStart', [ title, message ]);
   76.40 +    },
   76.41 +
   76.42 +    /**
   76.43 +     * Close an activity dialog
   76.44 +     */
   76.45 +    activityStop : function() {
   76.46 +        exec(null, null, 'Notification', 'activityStop', []);
   76.47 +    },
   76.48 +
   76.49 +    /**
   76.50 +     * Display a progress dialog with progress bar that goes from 0 to 100.
   76.51 +     *
   76.52 +     * @param {String}
   76.53 +     *            title Title of the progress dialog.
   76.54 +     * @param {String}
   76.55 +     *            message Message to display in the dialog.
   76.56 +     */
   76.57 +    progressStart : function(title, message) {
   76.58 +        exec(null, null, 'Notification', 'progressStart', [ title, message ]);
   76.59 +    },
   76.60 +
   76.61 +    /**
   76.62 +     * Close the progress dialog.
   76.63 +     */
   76.64 +    progressStop : function() {
   76.65 +        exec(null, null, 'Notification', 'progressStop', []);
   76.66 +    },
   76.67 +
   76.68 +    /**
   76.69 +     * Set the progress dialog value.
   76.70 +     *
   76.71 +     * @param {Number}
   76.72 +     *            value 0-100
   76.73 +     */
   76.74 +    progressValue : function(value) {
   76.75 +        exec(null, null, 'Notification', 'progressValue', [ value ]);
   76.76 +    }
   76.77 +};
    77.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    77.2 +++ b/Touchgui/plugins/org.apache.cordova.dialogs/www/blackberry10/beep.js	Thu Jun 04 14:50:33 2015 +0200
    77.3 @@ -0,0 +1,42 @@
    77.4 +/*
    77.5 + *
    77.6 + * Licensed to the Apache Software Foundation (ASF) under one
    77.7 + * or more contributor license agreements.  See the NOTICE file
    77.8 + * distributed with this work for additional information
    77.9 + * regarding copyright ownership.  The ASF licenses this file
   77.10 + * to you under the Apache License, Version 2.0 (the
   77.11 + * "License"); you may not use this file except in compliance
   77.12 + * with the License.  You may obtain a copy of the License at
   77.13 + *
   77.14 + *   http://www.apache.org/licenses/LICENSE-2.0
   77.15 + *
   77.16 + * Unless required by applicable law or agreed to in writing,
   77.17 + * software distributed under the License is distributed on an
   77.18 + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
   77.19 + * KIND, either express or implied.  See the License for the
   77.20 + * specific language governing permissions and limitations
   77.21 + * under the License.
   77.22 + *
   77.23 +*/
   77.24 +
   77.25 +module.exports = function (quantity) {
   77.26 +    var count = 0,
   77.27 +        beepObj,
   77.28 +        play = function () { 
   77.29 +            //create new object every time due to strage playback behaviour
   77.30 +            beepObj = new Audio('local:///chrome/plugin/org.apache.cordova.dialogs/notification-beep.wav');
   77.31 +            beepObj.addEventListener("ended", callback);
   77.32 +            beepObj.play();
   77.33 +        },
   77.34 +        callback = function () {
   77.35 +            if (--count > 0) {
   77.36 +                play();
   77.37 +            } else {
   77.38 +                delete beepObj;
   77.39 +            }
   77.40 +        };
   77.41 +    count += quantity || 1;
   77.42 +    if (count > 0) {
   77.43 +        play();
   77.44 +    }
   77.45 +};
    78.1 Binary file Touchgui/plugins/org.apache.cordova.dialogs/www/blackberry10/notification-beep.wav has changed
    79.1 Binary file Touchgui/plugins/org.apache.cordova.dialogs/www/firefoxos/danger-press.png has changed
    80.1 Binary file Touchgui/plugins/org.apache.cordova.dialogs/www/firefoxos/danger.png has changed
    81.1 Binary file Touchgui/plugins/org.apache.cordova.dialogs/www/firefoxos/default.png has changed
    82.1 Binary file Touchgui/plugins/org.apache.cordova.dialogs/www/firefoxos/gradient.png has changed
    83.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    83.2 +++ b/Touchgui/plugins/org.apache.cordova.dialogs/www/firefoxos/notification.css	Thu Jun 04 14:50:33 2015 +0200
    83.3 @@ -0,0 +1,248 @@
    83.4 +/*
    83.5 + *
    83.6 + * Licensed to the Apache Software Foundation (ASF) under one
    83.7 + * or more contributor license agreements.  See the NOTICE file
    83.8 + * distributed with this work for additional information
    83.9 + * regarding copyright ownership.  The ASF licenses this file
   83.10 + * to you under the Apache License, Version 2.0 (the
   83.11 + * "License"); you may not use this file except in compliance
   83.12 + * with the License.  You may obtain a copy of the License at
   83.13 + *
   83.14 + *   http://www.apache.org/licenses/LICENSE-2.0
   83.15 + *
   83.16 + * Unless required by applicable law or agreed to in writing,
   83.17 + * software distributed under the License is distributed on an
   83.18 + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
   83.19 + * KIND, either express or implied.  See the License for the
   83.20 + * specific language governing permissions and limitations
   83.21 + * under the License.
   83.22 + *
   83.23 +*/
   83.24 +
   83.25 +/* Main dialog setup */
   83.26 +form[role="dialog"] {
   83.27 +  background:
   83.28 +    url(../img/pattern.png) repeat left top,
   83.29 +    url(../img/gradient.png) no-repeat left top / 100% 100%;
   83.30 +  overflow: hidden;
   83.31 +  position: absolute;
   83.32 +  z-index: 100;
   83.33 +  top: 0;
   83.34 +  left: 0;
   83.35 +  right: 0;
   83.36 +  bottom: 0;
   83.37 +  padding: 1.5rem 0 7rem;
   83.38 +  font-family: "MozTT", Sans-serif;
   83.39 +  font-size: 0;
   83.40 +  /* Using font-size: 0; we avoid the unwanted visual space (about 3px)
   83.41 +  created by white-spaces and break lines in the code betewen inline-block elements */
   83.42 +  color: #fff;
   83.43 +  text-align: left;
   83.44 +}
   83.45 +
   83.46 +form[role="dialog"]:before {
   83.47 +  content: "";
   83.48 +  display: inline-block;
   83.49 +  vertical-align: middle;
   83.50 +  width: 0.1rem;
   83.51 +  height: 100%;
   83.52 +  margin-left: -0.1rem;
   83.53 +}
   83.54 +
   83.55 +form[role="dialog"] > section {
   83.56 +  font-weight: lighter;
   83.57 +  font-size: 1.8rem;
   83.58 +  color: #FAFAFA;
   83.59 +  padding: 0 1.5rem;
   83.60 +  -moz-box-sizing: padding-box;
   83.61 +  width: 100%;
   83.62 +  display: inline-block;
   83.63 +  overflow-y: scroll;
   83.64 +  max-height: 100%;
   83.65 +  vertical-align: middle;
   83.66 +  white-space: normal;
   83.67 +}
   83.68 +
   83.69 +form[role="dialog"] h1 {
   83.70 +  font-weight: normal;
   83.71 +  font-size: 1.6rem;
   83.72 +  line-height: 1.5em;
   83.73 +  color: #fff;
   83.74 +  margin: 0;
   83.75 +  padding: 0 1.5rem 1rem;
   83.76 +  border-bottom: 0.1rem solid #686868;
   83.77 +}
   83.78 +
   83.79 +/* Menu & buttons setup */
   83.80 +form[role="dialog"] menu {
   83.81 +  margin: 0;
   83.82 +  padding: 1.5rem;
   83.83 +  padding-bottom: 0.5rem;
   83.84 +  border-top: solid 0.1rem rgba(255, 255, 255, 0.1);
   83.85 +  background: #2d2d2d url(../img/pattern.png) repeat left top;
   83.86 +  display: block;
   83.87 +  overflow: hidden;
   83.88 +  position: absolute;
   83.89 +  left: 0;
   83.90 +  right: 0;
   83.91 +  bottom: 0;
   83.92 +  text-align: center;
   83.93 +}
   83.94 +
   83.95 +form[role="dialog"] menu button::-moz-focus-inner {
   83.96 +  border: none;
   83.97 +  outline: none;
   83.98 +}
   83.99 +form[role="dialog"] menu button {
  83.100 +  width: 100%;
  83.101 +  height: 2.4rem;
  83.102 +  margin: 0 0 1rem;
  83.103 +  padding: 0 1.5rem;
  83.104 +  -moz-box-sizing: border-box;
  83.105 +  display: inline-block;
  83.106 +  vertical-align: middle;
  83.107 +  text-overflow: ellipsis;
  83.108 +  white-space: nowrap;
  83.109 +  overflow: hidden;
  83.110 +  background: #fafafa url(../img/default.png) repeat-x left bottom/ auto 100%;
  83.111 +  border: 0.1rem solid #a6a6a6;
  83.112 +  border-radius: 0.3rem;
  83.113 +  font: 500 1.2rem/2.4rem 'MozTT', Sans-serif;
  83.114 +  color: #333;
  83.115 +  text-align: center;
  83.116 +  text-shadow: 0.1rem 0.1rem 0 rgba(255,255,255,0.3);
  83.117 +  text-decoration: none;
  83.118 +  outline: none;
  83.119 +}
  83.120 +
  83.121 +/* Press (default & recommend) */
  83.122 +form[role="dialog"] menu button:active,
  83.123 +form[role="dialog"] menu button.recommend:active,
  83.124 +a.recommend[role="button"]:active  {
  83.125 +  border-color: #008aaa;
  83.126 +  color: #333;
  83.127 +}
  83.128 +
  83.129 +/* Recommend */
  83.130 +form[role="dialog"] menu button.recommend {
  83.131 +  background-image: url(../img/recommend.png);
  83.132 +  background-color: #00caf2;
  83.133 +  border-color: #008eab;
  83.134 +}
  83.135 +
  83.136 +/* Danger */
  83.137 +form[role="dialog"] menu button.danger,
  83.138 +a.danger[role="button"] {
  83.139 +  background-image: url(../img/danger.png);
  83.140 +  background-color: #b70404;
  83.141 +  color: #fff;
  83.142 +  text-shadow: none;
  83.143 +  border-color: #820000;
  83.144 +}
  83.145 +
  83.146 +/* Danger Press */
  83.147 +form[role="dialog"] menu button.danger:active {
  83.148 +  background-image: url(../img/danger-press.png);
  83.149 +  background-color: #890707;
  83.150 +}
  83.151 +
  83.152 +/* Disabled */
  83.153 +form[role="dialog"] > menu > button[disabled] {
  83.154 +  background: #5f5f5f;
  83.155 +  color: #4d4d4d;
  83.156 +  text-shadow: none;
  83.157 +  border-color: #4d4d4d;
  83.158 +  pointer-events: none;
  83.159 +}
  83.160 +
  83.161 +
  83.162 +form[role="dialog"] menu button:nth-child(even) {
  83.163 +  margin-left: 1rem;
  83.164 +}
  83.165 +
  83.166 +form[role="dialog"] menu button,
  83.167 +form[role="dialog"] menu button:nth-child(odd) {
  83.168 +  margin: 0 0 1rem 0;
  83.169 +}
  83.170 +
  83.171 +form[role="dialog"] menu button {
  83.172 +  width: calc((100% - 1rem) / 2);
  83.173 +}
  83.174 +
  83.175 +form[role="dialog"] menu button.full {
  83.176 +  width: 100%;
  83.177 +}
  83.178 +
  83.179 +/* Specific component code */
  83.180 +form[role="dialog"] p {
  83.181 +  word-wrap: break-word;
  83.182 +  margin: 1rem 0 0;
  83.183 +  padding: 0 1.5rem 1rem;
  83.184 +  line-height: 3rem;
  83.185 +}
  83.186 +
  83.187 +form[role="dialog"] p img {
  83.188 +  float: left;
  83.189 +  margin-right: 2rem;
  83.190 +}
  83.191 +
  83.192 +form[role="dialog"] p strong {
  83.193 +  font-weight: lighter;
  83.194 +}
  83.195 +
  83.196 +form[role="dialog"] p small {
  83.197 +  font-size: 1.4rem;
  83.198 +  font-weight: normal;
  83.199 +  color: #cbcbcb;
  83.200 +  display: block;
  83.201 +}
  83.202 +
  83.203 +form[role="dialog"] dl {
  83.204 +  border-top: 0.1rem solid #686868;
  83.205 +  margin: 1rem 0 0;
  83.206 +  overflow: hidden;
  83.207 +  padding-top: 1rem;
  83.208 +  font-size: 1.6rem;
  83.209 +  line-height: 2.2rem;
  83.210 +}
  83.211 +
  83.212 +form[role="dialog"] dl > dt {
  83.213 +  clear: both;
  83.214 +  float: left;
  83.215 +  width: 7rem;
  83.216 +  padding-left: 1.5rem;
  83.217 +  font-weight: 500;
  83.218 +  text-align: left;
  83.219 +}
  83.220 +
  83.221 +form[role="dialog"] dl > dd {
  83.222 +  padding-right: 1.5rem;
  83.223 +  font-weight: 300;
  83.224 +  text-overflow: ellipsis;
  83.225 +  vertical-align: top;
  83.226 +  overflow: hidden;
  83.227 +}
  83.228 +
  83.229 +/* input areas */
  83.230 +input[type="text"],
  83.231 +input[type="password"],
  83.232 +input[type="email"],
  83.233 +input[type="tel"],
  83.234 +input[type="search"],
  83.235 +input[type="url"],
  83.236 +input[type="number"],
  83.237 +textarea {
  83.238 +  -moz-box-sizing: border-box;
  83.239 +  display: block;
  83.240 +  overflow: hidden;
  83.241 +  width: 100%;
  83.242 +  height: 3rem;
  83.243 +  resize: none;
  83.244 +  padding: 0 1rem;
  83.245 +  font-size: 1.6rem;
  83.246 +  line-height: 3rem;
  83.247 +  border: 0.1rem solid #ccc;
  83.248 +  border-radius: 0.3rem;
  83.249 +  box-shadow: none; /* override the box-shadow from the system (performance issue) */
  83.250 +  background: #fff url(input_areas/images/ui/shadow.png) repeat-x;
  83.251 +}
    84.1 Binary file Touchgui/plugins/org.apache.cordova.dialogs/www/firefoxos/pattern.png has changed
    85.1 Binary file Touchgui/plugins/org.apache.cordova.dialogs/www/firefoxos/recommend.png has changed
    86.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    86.2 +++ b/Touchgui/plugins/org.apache.cordova.dialogs/www/notification.js	Thu Jun 04 14:50:33 2015 +0200
    86.3 @@ -0,0 +1,112 @@
    86.4 +/*
    86.5 + *
    86.6 + * Licensed to the Apache Software Foundation (ASF) under one
    86.7 + * or more contributor license agreements.  See the NOTICE file
    86.8 + * distributed with this work for additional information
    86.9 + * regarding copyright ownership.  The ASF licenses this file
   86.10 + * to you under the Apache License, Version 2.0 (the
   86.11 + * "License"); you may not use this file except in compliance
   86.12 + * with the License.  You may obtain a copy of the License at
   86.13 + *
   86.14 + *   http://www.apache.org/licenses/LICENSE-2.0
   86.15 + *
   86.16 + * Unless required by applicable law or agreed to in writing,
   86.17 + * software distributed under the License is distributed on an
   86.18 + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
   86.19 + * KIND, either express or implied.  See the License for the
   86.20 + * specific language governing permissions and limitations
   86.21 + * under the License.
   86.22 + *
   86.23 +*/
   86.24 +
   86.25 +var exec = require('cordova/exec');
   86.26 +var platform = require('cordova/platform');
   86.27 +
   86.28 +/**
   86.29 + * Provides access to notifications on the device.
   86.30 + */
   86.31 +
   86.32 +module.exports = {
   86.33 +
   86.34 +    /**
   86.35 +     * Open a native alert dialog, with a customizable title and button text.
   86.36 +     *
   86.37 +     * @param {String} message              Message to print in the body of the alert
   86.38 +     * @param {Function} completeCallback   The callback that is called when user clicks on a button.
   86.39 +     * @param {String} title                Title of the alert dialog (default: Alert)
   86.40 +     * @param {String} buttonLabel          Label of the close button (default: OK)
   86.41 +     */
   86.42 +    alert: function(message, completeCallback, title, buttonLabel) {
   86.43 +        var _title = (title || "Alert");
   86.44 +        var _buttonLabel = (buttonLabel || "OK");
   86.45 +        exec(completeCallback, null, "Notification", "alert", [message, _title, _buttonLabel]);
   86.46 +    },
   86.47 +
   86.48 +    /**
   86.49 +     * Open a native confirm dialog, with a customizable title and button text.
   86.50 +     * The result that the user selects is returned to the result callback.
   86.51 +     *
   86.52 +     * @param {String} message              Message to print in the body of the alert
   86.53 +     * @param {Function} resultCallback     The callback that is called when user clicks on a button.
   86.54 +     * @param {String} title                Title of the alert dialog (default: Confirm)
   86.55 +     * @param {Array} buttonLabels          Array of the labels of the buttons (default: ['OK', 'Cancel'])
   86.56 +     */
   86.57 +    confirm: function(message, resultCallback, title, buttonLabels) {
   86.58 +        var _title = (title || "Confirm");
   86.59 +        var _buttonLabels = (buttonLabels || ["OK", "Cancel"]);
   86.60 +
   86.61 +        // Strings are deprecated!
   86.62 +        if (typeof _buttonLabels === 'string') {
   86.63 +            console.log("Notification.confirm(string, function, string, string) is deprecated.  Use Notification.confirm(string, function, string, array).");
   86.64 +        }
   86.65 +
   86.66 +        // Some platforms take an array of button label names.
   86.67 +        // Other platforms take a comma separated list.
   86.68 +        // For compatibility, we convert to the desired type based on the platform.
   86.69 +        if (platform.id == "amazon-fireos" || platform.id == "android" || platform.id == "ios" ||
   86.70 +            platform.id == "windowsphone" || platform.id == "firefoxos" || platform.id == "ubuntu" ||
   86.71 +            platform.id == "windows8" || platform.id == "windows") {
   86.72 +
   86.73 +            if (typeof _buttonLabels === 'string') {
   86.74 +                _buttonLabels = _buttonLabels.split(","); // not crazy about changing the var type here
   86.75 +            }
   86.76 +        } else {
   86.77 +            if (Array.isArray(_buttonLabels)) {
   86.78 +                var buttonLabelArray = _buttonLabels;
   86.79 +                _buttonLabels = buttonLabelArray.toString();
   86.80 +            }
   86.81 +        }
   86.82 +        exec(resultCallback, null, "Notification", "confirm", [message, _title, _buttonLabels]);
   86.83 +    },
   86.84 +
   86.85 +    /**
   86.86 +     * Open a native prompt dialog, with a customizable title and button text.
   86.87 +     * The following results are returned to the result callback:
   86.88 +     *  buttonIndex     Index number of the button selected.
   86.89 +     *  input1          The text entered in the prompt dialog box.
   86.90 +     *
   86.91 +     * @param {String} message              Dialog message to display (default: "Prompt message")
   86.92 +     * @param {Function} resultCallback     The callback that is called when user clicks on a button.
   86.93 +     * @param {String} title                Title of the dialog (default: "Prompt")
   86.94 +     * @param {Array} buttonLabels          Array of strings for the button labels (default: ["OK","Cancel"])
   86.95 +     * @param {String} defaultText          Textbox input value (default: empty string)
   86.96 +     */
   86.97 +    prompt: function(message, resultCallback, title, buttonLabels, defaultText) {
   86.98 +        var _message = (message || "Prompt message");
   86.99 +        var _title = (title || "Prompt");
  86.100 +        var _buttonLabels = (buttonLabels || ["OK","Cancel"]);
  86.101 +        var _defaultText = (defaultText || "");
  86.102 +        exec(resultCallback, null, "Notification", "prompt", [_message, _title, _buttonLabels, _defaultText]);
  86.103 +    },
  86.104 +
  86.105 +    /**
  86.106 +     * Causes the device to beep.
  86.107 +     * On Android, the default notification ringtone is played "count" times.
  86.108 +     *
  86.109 +     * @param {Integer} count       The number of beeps.
  86.110 +     */
  86.111 +    beep: function(count) {
  86.112 +        var defaultedCount = count || 1;
  86.113 +        exec(null, null, "Notification", "beep", [ defaultedCount ]);
  86.114 +    }
  86.115 +};
    87.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    87.2 +++ b/Touchgui/plugins/org.apache.cordova.splashscreen/.fetch.json	Thu Jun 04 14:50:33 2015 +0200
    87.3 @@ -0,0 +1,1 @@
    87.4 +{"source":{"type":"local","path":"/opt/intel/XDK_IoT_Edition/xdk/components/server/cordova-plugins/org.apache.cordova.splashscreen"}}
    87.5 \ No newline at end of file
    88.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    88.2 +++ b/Touchgui/plugins/org.apache.cordova.splashscreen/CONTRIBUTING.md	Thu Jun 04 14:50:33 2015 +0200
    88.3 @@ -0,0 +1,37 @@
    88.4 +<!--
    88.5 +#
    88.6 +# Licensed to the Apache Software Foundation (ASF) under one
    88.7 +# or more contributor license agreements.  See the NOTICE file
    88.8 +# distributed with this work for additional information
    88.9 +# regarding copyright ownership.  The ASF licenses this file
   88.10 +# to you under the Apache License, Version 2.0 (the
   88.11 +# "License"); you may not use this file except in compliance
   88.12 +# with the License.  You may obtain a copy of the License at
   88.13 +#
   88.14 +# http://www.apache.org/licenses/LICENSE-2.0
   88.15 +#
   88.16 +# Unless required by applicable law or agreed to in writing,
   88.17 +# software distributed under the License is distributed on an
   88.18 +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
   88.19 +#  KIND, either express or implied.  See the License for the
   88.20 +# specific language governing permissions and limitations
   88.21 +# under the License.
   88.22 +#
   88.23 +-->
   88.24 +
   88.25 +# Contributing to Apache Cordova
   88.26 +
   88.27 +Anyone can contribute to Cordova. And we need your contributions.
   88.28 +
   88.29 +There are multiple ways to contribute: report bugs, improve the docs, and
   88.30 +contribute code.
   88.31 +
   88.32 +For instructions on this, start with the 
   88.33 +[contribution overview](http://cordova.apache.org/#contribute).
   88.34 +
   88.35 +The details are explained there, but the important items are:
   88.36 + - Sign and submit an Apache ICLA (Contributor License Agreement).
   88.37 + - Have a Jira issue open that corresponds to your contribution.
   88.38 + - Run the tests so your patch doesn't break existing functionality.
   88.39 +
   88.40 +We look forward to your contributions!
    89.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    89.2 +++ b/Touchgui/plugins/org.apache.cordova.splashscreen/LICENSE	Thu Jun 04 14:50:33 2015 +0200
    89.3 @@ -0,0 +1,202 @@
    89.4 +
    89.5 +                                 Apache License
    89.6 +                           Version 2.0, January 2004
    89.7 +                        http://www.apache.org/licenses/
    89.8 +
    89.9 +   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
   89.10 +
   89.11 +   1. Definitions.
   89.12 +
   89.13 +      "License" shall mean the terms and conditions for use, reproduction,
   89.14 +      and distribution as defined by Sections 1 through 9 of this document.
   89.15 +
   89.16 +      "Licensor" shall mean the copyright owner or entity authorized by
   89.17 +      the copyright owner that is granting the License.
   89.18 +
   89.19 +      "Legal Entity" shall mean the union of the acting entity and all
   89.20 +      other entities that control, are controlled by, or are under common
   89.21 +      control with that entity. For the purposes of this definition,
   89.22 +      "control" means (i) the power, direct or indirect, to cause the
   89.23 +      direction or management of such entity, whether by contract or
   89.24 +      otherwise, or (ii) ownership of fifty percent (50%) or more of the
   89.25 +      outstanding shares, or (iii) beneficial ownership of such entity.
   89.26 +
   89.27 +      "You" (or "Your") shall mean an individual or Legal Entity
   89.28 +      exercising permissions granted by this License.
   89.29 +
   89.30 +      "Source" form shall mean the preferred form for making modifications,
   89.31 +      including but not limited to software source code, documentation
   89.32 +      source, and configuration files.
   89.33 +
   89.34 +      "Object" form shall mean any form resulting from mechanical
   89.35 +      transformation or translation of a Source form, including but
   89.36 +      not limited to compiled object code, generated documentation,
   89.37 +      and conversions to other media types.
   89.38 +
   89.39 +      "Work" shall mean the work of authorship, whether in Source or
   89.40 +      Object form, made available under the License, as indicated by a
   89.41 +      copyright notice that is included in or attached to the work
   89.42 +      (an example is provided in the Appendix below).
   89.43 +
   89.44 +      "Derivative Works" shall mean any work, whether in Source or Object
   89.45 +      form, that is based on (or derived from) the Work and for which the
   89.46 +      editorial revisions, annotations, elaborations, or other modifications
   89.47 +      represent, as a whole, an original work of authorship. For the purposes
   89.48 +      of this License, Derivative Works shall not include works that remain
   89.49 +      separable from, or merely link (or bind by name) to the interfaces of,
   89.50 +      the Work and Derivative Works thereof.
   89.51 +
   89.52 +      "Contribution" shall mean any work of authorship, including
   89.53 +      the original version of the Work and any modifications or additions
   89.54 +      to that Work or Derivative Works thereof, that is intentionally
   89.55 +      submitted to Licensor for inclusion in the Work by the copyright owner
   89.56 +      or by an individual or Legal Entity authorized to submit on behalf of
   89.57 +      the copyright owner. For the purposes of this definition, "submitted"
   89.58 +      means any form of electronic, verbal, or written communication sent
   89.59 +      to the Licensor or its representatives, including but not limited to
   89.60 +      communication on electronic mailing lists, source code control systems,
   89.61 +      and issue tracking systems that are managed by, or on behalf of, the
   89.62 +      Licensor for the purpose of discussing and improving the Work, but
   89.63 +      excluding communication that is conspicuously marked or otherwise
   89.64 +      designated in writing by the copyright owner as "Not a Contribution."
   89.65 +
   89.66 +      "Contributor" shall mean Licensor and any individual or Legal Entity
   89.67 +      on behalf of whom a Contribution has been received by Licensor and
   89.68 +      subsequently incorporated within the Work.
   89.69 +
   89.70 +   2. Grant of Copyright License. Subject to the terms and conditions of
   89.71 +      this License, each Contributor hereby grants to You a perpetual,
   89.72 +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
   89.73 +      copyright license to reproduce, prepare Derivative Works of,
   89.74 +      publicly display, publicly perform, sublicense, and distribute the
   89.75 +      Work and such Derivative Works in Source or Object form.
   89.76 +
   89.77 +   3. Grant of Patent License. Subject to the terms and conditions of
   89.78 +      this License, each Contributor hereby grants to You a perpetual,
   89.79 +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
   89.80 +      (except as stated in this section) patent license to make, have made,
   89.81 +      use, offer to sell, sell, import, and otherwise transfer the Work,
   89.82 +      where such license applies only to those patent claims licensable
   89.83 +      by such Contributor that are necessarily infringed by their
   89.84 +      Contribution(s) alone or by combination of their Contribution(s)
   89.85 +      with the Work to which such Contribution(s) was submitted. If You
   89.86 +      institute patent litigation against any entity (including a
   89.87 +      cross-claim or counterclaim in a lawsuit) alleging that the Work
   89.88 +      or a Contribution incorporated within the Work constitutes direct
   89.89 +      or contributory patent infringement, then any patent licenses
   89.90 +      granted to You under this License for that Work shall terminate
   89.91 +      as of the date such litigation is filed.
   89.92 +
   89.93 +   4. Redistribution. You may reproduce and distribute copies of the
   89.94 +      Work or Derivative Works thereof in any medium, with or without
   89.95 +      modifications, and in Source or Object form, provided that You
   89.96 +      meet the following conditions:
   89.97 +
   89.98 +      (a) You must give any other recipients of the Work or
   89.99 +          Derivative Works a copy of this License; and
  89.100 +
  89.101 +      (b) You must cause any modified files to carry prominent notices
  89.102 +          stating that You changed the files; and
  89.103 +
  89.104 +      (c) You must retain, in the Source form of any Derivative Works
  89.105 +          that You distribute, all copyright, patent, trademark, and
  89.106 +          attribution notices from the Source form of the Work,
  89.107 +          excluding those notices that do not pertain to any part of
  89.108 +          the Derivative Works; and
  89.109 +
  89.110 +      (d) If the Work includes a "NOTICE" text file as part of its
  89.111 +          distribution, then any Derivative Works that You distribute must
  89.112 +          include a readable copy of the attribution notices contained
  89.113 +          within such NOTICE file, excluding those notices that do not
  89.114 +          pertain to any part of the Derivative Works, in at least one
  89.115 +          of the following places: within a NOTICE text file distributed
  89.116 +          as part of the Derivative Works; within the Source form or
  89.117 +          documentation, if provided along with the Derivative Works; or,
  89.118 +          within a display generated by the Derivative Works, if and
  89.119 +          wherever such third-party notices normally appear. The contents
  89.120 +          of the NOTICE file are for informational purposes only and
  89.121 +          do not modify the License. You may add Your own attribution
  89.122 +          notices within Derivative Works that You distribute, alongside
  89.123 +          or as an addendum to the NOTICE text from the Work, provided
  89.124 +          that such additional attribution notices cannot be construed
  89.125 +          as modifying the License.
  89.126 +
  89.127 +      You may add Your own copyright statement to Your modifications and
  89.128 +      may provide additional or different license terms and conditions
  89.129 +      for use, reproduction, or distribution of Your modifications, or
  89.130 +      for any such Derivative Works as a whole, provided Your use,
  89.131 +      reproduction, and distribution of the Work otherwise complies with
  89.132 +      the conditions stated in this License.
  89.133 +
  89.134 +   5. Submission of Contributions. Unless You explicitly state otherwise,
  89.135 +      any Contribution intentionally submitted for inclusion in the Work
  89.136 +      by You to the Licensor shall be under the terms and conditions of
  89.137 +      this License, without any additional terms or conditions.
  89.138 +      Notwithstanding the above, nothing herein shall supersede or modify
  89.139 +      the terms of any separate license agreement you may have executed
  89.140 +      with Licensor regarding such Contributions.
  89.141 +
  89.142 +   6. Trademarks. This License does not grant permission to use the trade
  89.143 +      names, trademarks, service marks, or product names of the Licensor,
  89.144 +      except as required for reasonable and customary use in describing the
  89.145 +      origin of the Work and reproducing the content of the NOTICE file.
  89.146 +
  89.147 +   7. Disclaimer of Warranty. Unless required by applicable law or
  89.148 +      agreed to in writing, Licensor provides the Work (and each
  89.149 +      Contributor provides its Contributions) on an "AS IS" BASIS,
  89.150 +      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
  89.151 +      implied, including, without limitation, any warranties or conditions
  89.152 +      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
  89.153 +      PARTICULAR PURPOSE. You are solely responsible for determining the
  89.154 +      appropriateness of using or redistributing the Work and assume any
  89.155 +      risks associated with Your exercise of permissions under this License.
  89.156 +
  89.157 +   8. Limitation of Liability. In no event and under no legal theory,
  89.158 +      whether in tort (including negligence), contract, or otherwise,
  89.159 +      unless required by applicable law (such as deliberate and grossly
  89.160 +      negligent acts) or agreed to in writing, shall any Contributor be
  89.161 +      liable to You for damages, including any direct, indirect, special,
  89.162 +      incidental, or consequential damages of any character arising as a
  89.163 +      result of this License or out of the use or inability to use the
  89.164 +      Work (including but not limited to damages for loss of goodwill,
  89.165 +      work stoppage, computer failure or malfunction, or any and all
  89.166 +      other commercial damages or losses), even if such Contributor
  89.167 +      has been advised of the possibility of such damages.
  89.168 +
  89.169 +   9. Accepting Warranty or Additional Liability. While redistributing
  89.170 +      the Work or Derivative Works thereof, You may choose to offer,
  89.171 +      and charge a fee for, acceptance of support, warranty, indemnity,
  89.172 +      or other liability obligations and/or rights consistent with this
  89.173 +      License. However, in accepting such obligations, You may act only
  89.174 +      on Your own behalf and on Your sole responsibility, not on behalf
  89.175 +      of any other Contributor, and only if You agree to indemnify,
  89.176 +      defend, and hold each Contributor harmless for any liability
  89.177 +      incurred by, or claims asserted against, such Contributor by reason
  89.178 +      of your accepting any such warranty or additional liability.
  89.179 +
  89.180 +   END OF TERMS AND CONDITIONS
  89.181 +
  89.182 +   APPENDIX: How to apply the Apache License to your work.
  89.183 +
  89.184 +      To apply the Apache License to your work, attach the following
  89.185 +      boilerplate notice, with the fields enclosed by brackets "[]"
  89.186 +      replaced with your own identifying information. (Don't include
  89.187 +      the brackets!)  The text should be enclosed in the appropriate
  89.188 +      comment syntax for the file format. We also recommend that a
  89.189 +      file or class name and description of purpose be included on the
  89.190 +      same "printed page" as the copyright notice for easier
  89.191 +      identification within third-party archives.
  89.192 +
  89.193 +   Copyright [yyyy] [name of copyright owner]
  89.194 +
  89.195 +   Licensed under the Apache License, Version 2.0 (the "License");
  89.196 +   you may not use this file except in compliance with the License.
  89.197 +   You may obtain a copy of the License at
  89.198 +
  89.199 +       http://www.apache.org/licenses/LICENSE-2.0
  89.200 +
  89.201 +   Unless required by applicable law or agreed to in writing, software
  89.202 +   distributed under the License is distributed on an "AS IS" BASIS,
  89.203 +   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  89.204 +   See the License for the specific language governing permissions and
  89.205 +   limitations under the License.
  89.206 \ No newline at end of file
    90.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    90.2 +++ b/Touchgui/plugins/org.apache.cordova.splashscreen/NOTICE	Thu Jun 04 14:50:33 2015 +0200
    90.3 @@ -0,0 +1,5 @@
    90.4 +Apache Cordova
    90.5 +Copyright 2012 The Apache Software Foundation
    90.6 +
    90.7 +This product includes software developed at
    90.8 +The Apache Software Foundation (http://www.apache.org/).
    91.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    91.2 +++ b/Touchgui/plugins/org.apache.cordova.splashscreen/README.md	Thu Jun 04 14:50:33 2015 +0200
    91.3 @@ -0,0 +1,22 @@
    91.4 +<!---
    91.5 + license: Licensed to the Apache Software Foundation (ASF) under one
    91.6 +         or more contributor license agreements.  See the NOTICE file
    91.7 +         distributed with this work for additional information
    91.8 +         regarding copyright ownership.  The ASF licenses this file
    91.9 +         to you under the Apache License, Version 2.0 (the
   91.10 +         "License"); you may not use this file except in compliance
   91.11 +         with the License.  You may obtain a copy of the License at
   91.12 +
   91.13 +           http://www.apache.org/licenses/LICENSE-2.0
   91.14 +
   91.15 +         Unless required by applicable law or agreed to in writing,
   91.16 +         software distributed under the License is distributed on an
   91.17 +         "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
   91.18 +         KIND, either express or implied.  See the License for the
   91.19 +         specific language governing permissions and limitations
   91.20 +         under the License.
   91.21 +-->
   91.22 +
   91.23 +# org.apache.cordova.splashscreen
   91.24 +
   91.25 +Plugin documentation: [doc/index.md](doc/index.md)
    92.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    92.2 +++ b/Touchgui/plugins/org.apache.cordova.splashscreen/RELEASENOTES.md	Thu Jun 04 14:50:33 2015 +0200
    92.3 @@ -0,0 +1,100 @@
    92.4 +<!--
    92.5 +#
    92.6 +# Licensed to the Apache Software Foundation (ASF) under one
    92.7 +# or more contributor license agreements.  See the NOTICE file
    92.8 +# distributed with this work for additional information
    92.9 +# regarding copyright ownership.  The ASF licenses this file
   92.10 +# to you under the Apache License, Version 2.0 (the
   92.11 +# "License"); you may not use this file except in compliance
   92.12 +# with the License.  You may obtain a copy of the License at
   92.13 +# 
   92.14 +# http://www.apache.org/licenses/LICENSE-2.0
   92.15 +# 
   92.16 +# Unless required by applicable law or agreed to in writing,
   92.17 +# software distributed under the License is distributed on an
   92.18 +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
   92.19 +#  KIND, either express or implied.  See the License for the
   92.20 +# specific language governing permissions and limitations
   92.21 +# under the License.
   92.22 +#
   92.23 +-->
   92.24 +# Release Notes
   92.25 +
   92.26 +### 0.2.2 (Sept 25, 2013)
   92.27 +* CB-4889 bumping&resetting version
   92.28 +* CB-4889 renaming org.apache.cordova.core.splashscreen to org.apache.cordova.splashscreen
   92.29 +* Rename CHANGELOG.md -> RELEASENOTES.md
   92.30 +* [CB-4806] Update splashscreen image bounds for iOS 7
   92.31 +* [CB-4752] Incremented plugin version on dev branch.
   92.32 +
   92.33 +### 0.2.3 (Oct 9, 2013)
   92.34 +* [CB-4806] Re-fix Update splashscreen image bounds for iOS 7
   92.35 +* [CB-4934] plugin-splashscreen should not show by default on Windows8
   92.36 +* [CB-4929] plugin-splashscreen not loading proxy windows8
   92.37 +* [CB-4915] Incremented plugin version on dev branch.
   92.38 +
   92.39 +### 0.2.4 (Oct 28, 2013)
   92.40 +* CB-5128: add repo + issue tag to plugin.xml for splashscreen plugin
   92.41 +* [CB-5010] Incremented plugin version on dev branch.
   92.42 +
   92.43 +### 0.2.5 (Dec 4, 2013)
   92.44 +* add ubuntu platform
   92.45 +* Added amazon-fireos platform. Change to use amazon-fireos as a platform if the user agent string contains 'cordova-amazon-fireos'
   92.46 +* CB-5124 - Remove splashscreen config.xml values from iOS Configuration Docs, move to plugin docs
   92.47 +
   92.48 +### 0.2.6 (Jan 02, 2014)
   92.49 +* CB-5658 Add doc/index.md for Splashscreen plugin
   92.50 +* Handle error when splash image is missing.
   92.51 +
   92.52 +### 0.2.7 (Feb 05, 2014)
   92.53 +* [CB-3562] Fix aspect ratio on landscape-only iPhone applications
   92.54 +* CB-4051 fix for splashscreen rotation problem
   92.55 +
   92.56 +### 0.3.0 (Apr 17, 2014)
   92.57 +* Add Tizen support to plugin
   92.58 +* CB-6422: [windows8] use cordova/exec/proxy
   92.59 +* CB-4051: [ios] - Re-fix - Splashscreen rotation problem (closes #13)
   92.60 +* CB-6460: Update license headers
   92.61 +* CB-6465: Add license headers to Tizen code
   92.62 +* Add NOTICE file
   92.63 +
   92.64 +### 0.3.1 (Jun 05, 2014)
   92.65 +* documentation translation: cordova-plugin-splashscreen
   92.66 +* Lisa testing pulling in plugins for plugin: cordova-plugin-splashscreen
   92.67 +* Lisa testing pulling in plugins for plugin: cordova-plugin-splashscreen
   92.68 +* Lisa testing pulling in plugins for plugin: cordova-plugin-splashscreen
   92.69 +* Lisa testing pulling in plugins for plugin: cordova-plugin-splashscreen
   92.70 +* CB-6810 Add license to CONTRIBUTING.md
   92.71 +* [wp8] updated quirk for  and combined iOS,WP8,BB10 quirks as they are all the same
   92.72 +* [wp] implemented OnInit so splash screen can be shown before cordova page is loaded
   92.73 +* [wp] plugin must be autoloaded for AutoHideSplashScreen preference to work
   92.74 +* CB-6483 Use splash screen image from manifest on Windows8
   92.75 +* CB-6491 add CONTRIBUTING.md
   92.76 +* Revert "Merge branch 'tizen' of http://github.com/siovene/cordova-plugin-splashscreen"
   92.77 +
   92.78 +### 0.3.2 (Aug 06, 2014)
   92.79 +* CB-6127 Updated translations for docs
   92.80 +* CB-7041 ios: Fix image filename logic when setting the iPad splash screen
   92.81 +* fixes Splashscreen crash on WP8
   92.82 +* Remove outdated doc
   92.83 +
   92.84 +### 0.3.3 (Sep 17, 2014)
   92.85 +* CB-7249 cordova-plugin-splashscreen documentation translation
   92.86 +* Renamed test dir, added nested plugin.xml
   92.87 +* added documentation for manual tests
   92.88 +* CB-7196 port splashscreen tests to framework
   92.89 +
   92.90 +### 0.3.4 (Oct 03, 2014)
   92.91 +* Finalized iOS splash screen (image name) tests. 176 tests in all, 44 for each type of device (iPad, iPhone, iPhone5, iPhone6, iPhone 6 Plus).
   92.92 +* CB-7633 - (Re-fix based on updated unit tests) iPhone 6 Plus support
   92.93 +* Updated iOS tests for locked orientations
   92.94 +* Added more iOS splash screen tests.
   92.95 +* CB-7633 - Add support for iPhone 6/6+
   92.96 +* Added failing iPhone 6/6 Plus tests.
   92.97 +* Added 'npm test'
   92.98 +* CB-7663 - iOS unit tests for splash screen
   92.99 +* Properly formatted splashscreen preference docs.
  92.100 +
  92.101 +### 0.3.5 (Dec 02, 2014)
  92.102 +* CB-7204 - Race condition when hiding and showing spinner (closes #21)
  92.103 +* CB-7700 cordova-plugin-splashscreen documentation translation: cordova-plugin-splashscreen
    93.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    93.2 +++ b/Touchgui/plugins/org.apache.cordova.splashscreen/doc/de/index.md	Thu Jun 04 14:50:33 2015 +0200
    93.3 @@ -0,0 +1,75 @@
    93.4 +<!---
    93.5 +    Licensed to the Apache Software Foundation (ASF) under one
    93.6 +    or more contributor license agreements.  See the NOTICE file
    93.7 +    distributed with this work for additional information
    93.8 +    regarding copyright ownership.  The ASF licenses this file
    93.9 +    to you under the Apache License, Version 2.0 (the
   93.10 +    "License"); you may not use this file except in compliance
   93.11 +    with the License.  You may obtain a copy of the License at
   93.12 +
   93.13 +      http://www.apache.org/licenses/LICENSE-2.0
   93.14 +
   93.15 +    Unless required by applicable law or agreed to in writing,
   93.16 +    software distributed under the License is distributed on an
   93.17 +    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
   93.18 +    KIND, either express or implied.  See the License for the
   93.19 +    specific language governing permissions and limitations
   93.20 +    under the License.
   93.21 +-->
   93.22 +
   93.23 +# org.apache.cordova.splashscreen
   93.24 +
   93.25 +Dieses Plugin zeigt und verbirgt einen Splash-Screen beim Start der Anwendung.
   93.26 +
   93.27 +## Installation
   93.28 +
   93.29 +    cordova plugin add org.apache.cordova.splashscreen
   93.30 +    
   93.31 +
   93.32 +## Unterstützte Plattformen
   93.33 +
   93.34 +*   Amazon Fire OS
   93.35 +*   Android
   93.36 +*   BlackBerry 10
   93.37 +*   iOS
   93.38 +*   Windows Phone 7 und 8
   93.39 +*   Windows 8
   93.40 +
   93.41 +## Methoden
   93.42 +
   93.43 +*   SplashScreen.Show
   93.44 +*   SplashScreen.Hide
   93.45 +
   93.46 +### Android Eigenarten
   93.47 +
   93.48 +Sie müssen in der config.xml folgende Einstellungen vornehmen:
   93.49 +
   93.50 +`<preference name="SplashScreen" value="foo" />` `<preference name="SplashScreenDelay" value="10000" />`
   93.51 +
   93.52 +Wo Foo ist der Name der Datei Splashscreen, vorzugsweise eine 9-Patch-Datei. Stellen Sie sicher, Splashcreen Dateien zu Ihrem Res/Xml-Verzeichnis unter den entsprechenden Ordnern hinzuzufügen. Der zweite Parameter stellt dar, wie lange das Splashscreen in Millisekunden angezeigt werden. Es wird standardmäßig auf 3000 ms. Weitere Informationen finden Sie unter [Symbole und Splash-Screens][1] .
   93.53 +
   93.54 + [1]: http://cordova.apache.org/docs/en/edge/config_ref_images.md.html
   93.55 +
   93.56 +## SplashScreen.Hide
   93.57 +
   93.58 +Schließen Sie den Splash-Screen.
   93.59 +
   93.60 +    Navigator.SplashScreen.Hide();
   93.61 +    
   93.62 +
   93.63 +### BlackBerry 10, WP8, iOS Eigenarten
   93.64 +
   93.65 +Die `config.xml` der Datei `AutoHideSplashScreen` muss `false` . Verstecken des Begrüßungsbildschirms für zwei Sekunden Verzögerung, fügen Sie einen Timer wie die folgende in der `deviceready` -Ereignishandler:
   93.66 +
   93.67 +        setTimeout(function() {navigator.splashscreen.hide();
   93.68 +        }, 2000);
   93.69 +    
   93.70 +
   93.71 +## SplashScreen.Show
   93.72 +
   93.73 +Zeigt den Begrüßungsbildschirm.
   93.74 +
   93.75 +    Navigator.SplashScreen.Show();
   93.76 +    
   93.77 +
   93.78 +Ihre Anwendung kann nicht aufgerufen werden `navigator.splashscreen.show()` bis die app gestartet hat und das `deviceready` -Ereignis ausgelöst hat. Aber da in der Regel der Splash-Screen soll sichtbar sein, bevor die Anwendung gestartet wurde, scheint die Niederlage der Zweck des Begrüßungsbildschirms. Somit einige Konfiguration in `config.xml` wird automatisch `show` den Splash-Screen unmittelbar nach Ihrer app starten und bevor es voll gestartet und hat das `deviceready` Ereignis. Weitere Informationen zu dieser Konfiguration finden Sie unter [Symbole und Splash-Screens][1] . Aus diesem Grund ist es unwahrscheinlich, dass Sie aufrufen müssen `navigator.splashscreen.show()` den Splash-Screen beim Starten der app sichtbar zu machen.
   93.79 \ No newline at end of file
    94.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    94.2 +++ b/Touchgui/plugins/org.apache.cordova.splashscreen/doc/es/index.md	Thu Jun 04 14:50:33 2015 +0200
    94.3 @@ -0,0 +1,75 @@
    94.4 +<!---
    94.5 +    Licensed to the Apache Software Foundation (ASF) under one
    94.6 +    or more contributor license agreements.  See the NOTICE file
    94.7 +    distributed with this work for additional information
    94.8 +    regarding copyright ownership.  The ASF licenses this file
    94.9 +    to you under the Apache License, Version 2.0 (the
   94.10 +    "License"); you may not use this file except in compliance
   94.11 +    with the License.  You may obtain a copy of the License at
   94.12 +
   94.13 +      http://www.apache.org/licenses/LICENSE-2.0
   94.14 +
   94.15 +    Unless required by applicable law or agreed to in writing,
   94.16 +    software distributed under the License is distributed on an
   94.17 +    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
   94.18 +    KIND, either express or implied.  See the License for the
   94.19 +    specific language governing permissions and limitations
   94.20 +    under the License.
   94.21 +-->
   94.22 +
   94.23 +# org.apache.cordova.splashscreen
   94.24 +
   94.25 +Este plugin muestra y esconde una pantalla de bienvenida durante el inicio de la aplicación.
   94.26 +
   94.27 +## Instalación
   94.28 +
   94.29 +    cordova plugin add org.apache.cordova.splashscreen
   94.30 +    
   94.31 +
   94.32 +## Plataformas soportadas
   94.33 +
   94.34 +*   Amazon fire OS
   94.35 +*   Android
   94.36 +*   BlackBerry 10
   94.37 +*   iOS
   94.38 +*   Windows Phone 7 y 8
   94.39 +*   Windows 8
   94.40 +
   94.41 +## Métodos
   94.42 +
   94.43 +*   splashscreen.show
   94.44 +*   splashscreen.hide
   94.45 +
   94.46 +### Rarezas Android
   94.47 +
   94.48 +En el archivo config.xml, tienes que añadir las siguientes preferencias:
   94.49 +
   94.50 +`<preference name="SplashScreen" value="foo" />` `<preference name="SplashScreenDelay" value="10000" />`
   94.51 +
   94.52 +Donde foo es el nombre del archivo splashscreen, preferiblemente un archivo de 9 parche. Asegúrese de agregar tus archivos splashcreen en tu directorio res/xml bajo las carpetas apropiadas. El segundo parámetro representa cuánto aparecerán el splashscreen en milisegundos. Valor predeterminado es ms 3000. Ver [los iconos y salpicadura pantallas][1] para obtener más información.
   94.53 +
   94.54 + [1]: http://cordova.apache.org/docs/en/edge/config_ref_images.md.html
   94.55 +
   94.56 +## splashscreen.hide
   94.57 +
   94.58 +Despedir a la pantalla de bienvenida.
   94.59 +
   94.60 +    Navigator.SplashScreen.Hide();
   94.61 +    
   94.62 +
   94.63 +### BlackBerry 10, WP8, iOS Quirk
   94.64 +
   94.65 +El `config.xml` del archivo `AutoHideSplashScreen` la configuración debe ser `false` . Para retrasar oculta la pantalla splash durante dos segundos, agregue un temporizador como la siguiente en el `deviceready` controlador de eventos:
   94.66 +
   94.67 +        setTimeout(function() {navigator.splashscreen.hide();
   94.68 +        }, 2000);
   94.69 +    
   94.70 +
   94.71 +## splashscreen.show
   94.72 +
   94.73 +Muestra la pantalla de bienvenida.
   94.74 +
   94.75 +    Navigator.SplashScreen.Show();
   94.76 +    
   94.77 +
   94.78 +La aplicación no se puede llamar `navigator.splashscreen.show()` hasta que haya iniciado la aplicación y el `deviceready` evento ha despedido. Pero puesto que normalmente la pantalla está destinada a ser visible antes de que comience su aplicación, que parecería que el propósito de la pantalla de bienvenida. Proporcionar cierta configuración en `config.xml` automáticamente `show` la pantalla de presentación inmediatamente después de su lanzamiento de la aplicación y antes de ser completamente ha iniciado y recibió el `deviceready` evento. Ver [los iconos y salpicadura pantallas][1] para obtener más información sobre haciendo esta configuración. Por esta razón, es poco probable que necesitas llamar a `navigator.splashscreen.show()` para hacer la pantalla visible para el inicio de la aplicación.
   94.79 \ No newline at end of file
    95.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    95.2 +++ b/Touchgui/plugins/org.apache.cordova.splashscreen/doc/fr/index.md	Thu Jun 04 14:50:33 2015 +0200
    95.3 @@ -0,0 +1,75 @@
    95.4 +<!---
    95.5 +    Licensed to the Apache Software Foundation (ASF) under one
    95.6 +    or more contributor license agreements.  See the NOTICE file
    95.7 +    distributed with this work for additional information
    95.8 +    regarding copyright ownership.  The ASF licenses this file
    95.9 +    to you under the Apache License, Version 2.0 (the
   95.10 +    "License"); you may not use this file except in compliance
   95.11 +    with the License.  You may obtain a copy of the License at
   95.12 +
   95.13 +      http://www.apache.org/licenses/LICENSE-2.0
   95.14 +
   95.15 +    Unless required by applicable law or agreed to in writing,
   95.16 +    software distributed under the License is distributed on an
   95.17 +    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
   95.18 +    KIND, either express or implied.  See the License for the
   95.19 +    specific language governing permissions and limitations
   95.20 +    under the License.
   95.21 +-->
   95.22 +
   95.23 +# org.apache.cordova.splashscreen
   95.24 +
   95.25 +Ce plugin affiche et masque un écran de démarrage lors du lancement de l'application.
   95.26 +
   95.27 +## Installation
   95.28 +
   95.29 +    cordova plugin add org.apache.cordova.splashscreen
   95.30 +    
   95.31 +
   95.32 +## Plates-formes prises en charge
   95.33 +
   95.34 +*   Amazon Fire OS
   95.35 +*   Android
   95.36 +*   BlackBerry 10
   95.37 +*   iOS
   95.38 +*   Windows Phone 7 et 8
   95.39 +*   Windows 8
   95.40 +
   95.41 +## Méthodes
   95.42 +
   95.43 +*   splashscreen.Show
   95.44 +*   splashscreen.Hide
   95.45 +
   95.46 +### Quirks Android
   95.47 +
   95.48 +Dans votre fichier config.xml, vous devez ajouter les préférences suivantes :
   95.49 +
   95.50 +`<preference name="SplashScreen" value="foo" />` `<preference name="SplashScreenDelay" value="10000" />`
   95.51 +
   95.52 +Où foo est le nom du fichier splashscreen, préférablement un fichier de 9 correctif. Assurez-vous d'ajouter vos fichiers splashcreen dans votre répertoire res/xml dans les dossiers appropriés. Le deuxième paramètre représente combien de temps le splashscreen apparaîtra en millisecondes. Il est par défaut à 3000 ms. Pour plus d'informations, consultez [icônes et écrans de démarrage][1] .
   95.53 +
   95.54 + [1]: http://cordova.apache.org/docs/en/edge/config_ref_images.md.html
   95.55 +
   95.56 +## splashscreen.Hide
   95.57 +
   95.58 +Faire disparaître de l'écran de démarrage.
   95.59 +
   95.60 +    Navigator.SplashScreen.Hide() ;
   95.61 +    
   95.62 +
   95.63 +### BlackBerry 10, WP8, iOS Quirk
   95.64 +
   95.65 +La `config.xml` du fichier `AutoHideSplashScreen` doit être `false` . Pour retarder la cacher l'écran de démarrage pendant deux secondes, ajouter un minuteur comme suit dans la `deviceready` gestionnaire d'événements :
   95.66 +
   95.67 +        setTimeout(function() {navigator.splashscreen.hide() ;
   95.68 +        }, 2000) ;
   95.69 +    
   95.70 +
   95.71 +## splashscreen.Show
   95.72 +
   95.73 +Affiche l'écran de démarrage.
   95.74 +
   95.75 +    Navigator.SplashScreen.Show() ;
   95.76 +    
   95.77 +
   95.78 +Votre application ne peut pas appeler `navigator.splashscreen.show()` jusqu'à ce que l'application a commencé et le `deviceready` événement a été déclenché. Mais puisqu'en général, l'écran de démarrage est destiné à être visible avant que votre application a commencé, qui semblerait à l'encontre des objectifs de l'écran de démarrage. Fournir une configuration en `config.xml` sera automatiquement `show` l'écran de démarrage immédiatement après votre lancement de l'app et avant qu'il a complètement démarré et a reçu le `deviceready` événement. Voir les [icônes et les écrans de démarrage][1] pour plus d'informations sur la conduite de cette configuration. Pour cette raison, il est peu probable que vous devez appeler `navigator.splashscreen.show()` pour rendre l'écran de démarrage visible pour le démarrage de l'application.
   95.79 \ No newline at end of file
    96.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    96.2 +++ b/Touchgui/plugins/org.apache.cordova.splashscreen/doc/index.md	Thu Jun 04 14:50:33 2015 +0200
    96.3 @@ -0,0 +1,88 @@
    96.4 +<!---
    96.5 +    Licensed to the Apache Software Foundation (ASF) under one
    96.6 +    or more contributor license agreements.  See the NOTICE file
    96.7 +    distributed with this work for additional information
    96.8 +    regarding copyright ownership.  The ASF licenses this file
    96.9 +    to you under the Apache License, Version 2.0 (the
   96.10 +    "License"); you may not use this file except in compliance
   96.11 +    with the License.  You may obtain a copy of the License at
   96.12 +
   96.13 +      http://www.apache.org/licenses/LICENSE-2.0
   96.14 +
   96.15 +    Unless required by applicable law or agreed to in writing,
   96.16 +    software distributed under the License is distributed on an
   96.17 +    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
   96.18 +    KIND, either express or implied.  See the License for the
   96.19 +    specific language governing permissions and limitations
   96.20 +    under the License.
   96.21 +-->
   96.22 +
   96.23 +# org.apache.cordova.splashscreen
   96.24 +
   96.25 +This plugin displays and hides a splash screen during application launch.
   96.26 +
   96.27 +## Installation
   96.28 +
   96.29 +    cordova plugin add org.apache.cordova.splashscreen
   96.30 +
   96.31 +
   96.32 +## Supported Platforms
   96.33 +
   96.34 +- Amazon Fire OS
   96.35 +- Android
   96.36 +- BlackBerry 10
   96.37 +- iOS
   96.38 +- Windows Phone 7 and 8
   96.39 +- Windows 8
   96.40 +
   96.41 +
   96.42 +## Methods
   96.43 +
   96.44 +- splashscreen.show
   96.45 +- splashscreen.hide
   96.46 +
   96.47 +### Android Quirks
   96.48 +
   96.49 +In your config.xml, you need to add the following preferences:
   96.50 +
   96.51 +    <preference name="SplashScreen" value="foo" />
   96.52 +    <preference name="SplashScreenDelay" value="10000" />
   96.53 +
   96.54 +Where foo is the name of the splashscreen file, preferably a 9 patch file. Make sure to add your splashcreen files to your res/xml directory under the appropriate folders. The second parameter represents how long the splashscreen will appear in milliseconds. It defaults to 3000 ms. See [Icons and Splash Screens](http://cordova.apache.org/docs/en/edge/config_ref_images.md.html)
   96.55 +for more information.
   96.56 +
   96.57 +## splashscreen.hide
   96.58 +
   96.59 +Dismiss the splash screen.
   96.60 +
   96.61 +    navigator.splashscreen.hide();
   96.62 +
   96.63 +
   96.64 +### BlackBerry 10, WP8, iOS Quirk
   96.65 +
   96.66 +The `config.xml` file's `AutoHideSplashScreen` setting must be
   96.67 +`false`. To delay hiding the splash screen for two seconds, add a
   96.68 +timer such as the following in the `deviceready` event handler:
   96.69 +
   96.70 +        setTimeout(function() {
   96.71 +            navigator.splashscreen.hide();
   96.72 +        }, 2000);
   96.73 +
   96.74 +## splashscreen.show
   96.75 +
   96.76 +Displays the splash screen.
   96.77 +
   96.78 +    navigator.splashscreen.show();
   96.79 +
   96.80 +
   96.81 +Your application cannot call `navigator.splashscreen.show()` until the app has
   96.82 +started and the `deviceready` event has fired. But since typically the splash
   96.83 +screen is meant to be visible before your app has started, that would seem to
   96.84 +defeat the purpose of the splash screen.  Providing some configuration in
   96.85 +`config.xml` will automatically `show` the splash screen immediately after your
   96.86 +app launch and before it has fully started and received the `deviceready`
   96.87 +event. See [Icons and Splash Screens](http://cordova.apache.org/docs/en/edge/config_ref_images.md.html)
   96.88 +for more information on doing this configuration. For this reason, it is
   96.89 +unlikely you need to call `navigator.splashscreen.show()` to make the splash
   96.90 +screen visible for app startup.
   96.91 +
    97.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    97.2 +++ b/Touchgui/plugins/org.apache.cordova.splashscreen/doc/it/index.md	Thu Jun 04 14:50:33 2015 +0200
    97.3 @@ -0,0 +1,75 @@
    97.4 +<!---
    97.5 +    Licensed to the Apache Software Foundation (ASF) under one
    97.6 +    or more contributor license agreements.  See the NOTICE file
    97.7 +    distributed with this work for additional information
    97.8 +    regarding copyright ownership.  The ASF licenses this file
    97.9 +    to you under the Apache License, Version 2.0 (the
   97.10 +    "License"); you may not use this file except in compliance
   97.11 +    with the License.  You may obtain a copy of the License at
   97.12 +
   97.13 +      http://www.apache.org/licenses/LICENSE-2.0
   97.14 +
   97.15 +    Unless required by applicable law or agreed to in writing,
   97.16 +    software distributed under the License is distributed on an
   97.17 +    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
   97.18 +    KIND, either express or implied.  See the License for the
   97.19 +    specific language governing permissions and limitations
   97.20 +    under the License.
   97.21 +-->
   97.22 +
   97.23 +# org.apache.cordova.splashscreen
   97.24 +
   97.25 +Questo plugin Visualizza e nasconde una schermata iniziale durante l'avvio dell'applicazione.
   97.26 +
   97.27 +## Installazione
   97.28 +
   97.29 +    cordova plugin add org.apache.cordova.splashscreen
   97.30 +    
   97.31 +
   97.32 +## Piattaforme supportate
   97.33 +
   97.34 +*   Amazon fuoco OS
   97.35 +*   Android
   97.36 +*   BlackBerry 10
   97.37 +*   iOS
   97.38 +*   Windows Phone 7 e 8
   97.39 +*   Windows 8
   97.40 +
   97.41 +## Metodi
   97.42 +
   97.43 +*   splashscreen
   97.44 +*   splashscreen.Hide
   97.45 +
   97.46 +### Stranezze Android
   97.47 +
   97.48 +Nel vostro config. xml, è necessario aggiungere le seguenti preferenze:
   97.49 +
   97.50 +`<preference name="SplashScreen" value="foo" />` `<preference name="SplashScreenDelay" value="10000" />`
   97.51 +
   97.52 +Dove foo è il nome del file splashscreen, preferibilmente un file 9 patch. Assicurati di aggiungere i tuoi file splashcreen res/xml nella directory sotto cartelle appropriate. Il secondo parametro rappresenta quanto tempo lo splashscreen apparirà in millisecondi. Il valore predefinito è 3000 ms. Per ulteriori informazioni, vedere [icone e schermate iniziali][1] .
   97.53 +
   97.54 + [1]: http://cordova.apache.org/docs/en/edge/config_ref_images.md.html
   97.55 +
   97.56 +## splashscreen.Hide
   97.57 +
   97.58 +Respingere la schermata iniziale.
   97.59 +
   97.60 +    Navigator.SplashScreen.Hide();
   97.61 +    
   97.62 +
   97.63 +### BlackBerry 10, WP8, iOS Quirk
   97.64 +
   97.65 +Il `config.xml` di file `AutoHideSplashScreen` impostazione deve essere `false` . Per ritardare nascondendo la schermata iniziale per due secondi, aggiungere un timer ad esempio nel `deviceready` gestore di evento:
   97.66 +
   97.67 +        setTimeout(function() {navigator.splashscreen.hide();
   97.68 +        }, 2000);
   97.69 +    
   97.70 +
   97.71 +## splashscreen
   97.72 +
   97.73 +Visualizza la schermata iniziale.
   97.74 +
   97.75 +    Navigator.SplashScreen.Show();
   97.76 +    
   97.77 +
   97.78 +L'applicazione non può chiamare `navigator.splashscreen.show()` fino a quando ha iniziato l'app e il `deviceready` ha generato l'evento. Ma poiché in genere la schermata iniziale è destinata ad essere visibile prima app ha iniziato, che sembrerebbe per sconfiggere lo scopo della schermata iniziale. Fornendo qualche configurazione in `config.xml` verrà automaticamente `show` la schermata iniziale subito dopo il lancio dell'app e prima che completamente ha iniziato e ha ricevuto il `deviceready` evento. Per ulteriori informazioni su facendo questa configurazione, vedere [icone e schermate iniziali][1] . Per questo motivo, è improbabile che dovete chiamare `navigator.splashscreen.show()` per rendere la schermata visibile per avvio di app.
   97.79 \ No newline at end of file
    98.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    98.2 +++ b/Touchgui/plugins/org.apache.cordova.splashscreen/doc/ja/index.md	Thu Jun 04 14:50:33 2015 +0200
    98.3 @@ -0,0 +1,74 @@
    98.4 +<!---
    98.5 +    Licensed to the Apache Software Foundation (ASF) under one
    98.6 +    or more contributor license agreements.  See the NOTICE file
    98.7 +    distributed with this work for additional information
    98.8 +    regarding copyright ownership.  The ASF licenses this file
    98.9 +    to you under the Apache License, Version 2.0 (the
   98.10 +    "License"); you may not use this file except in compliance
   98.11 +    with the License.  You may obtain a copy of the License at
   98.12 +
   98.13 +      http://www.apache.org/licenses/LICENSE-2.0
   98.14 +
   98.15 +    Unless required by applicable law or agreed to in writing,
   98.16 +    software distributed under the License is distributed on an
   98.17 +    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
   98.18 +    KIND, either express or implied.  See the License for the
   98.19 +    specific language governing permissions and limitations
   98.20 +    under the License.
   98.21 +-->
   98.22 +
   98.23 +# org.apache.cordova.splashscreen
   98.24 +
   98.25 +このプラグインが表示され、アプリケーションの起動中にスプラッシュ スクリーンを非表示にします。
   98.26 +
   98.27 +## インストール
   98.28 +
   98.29 +    cordova plugin add org.apache.cordova.splashscreen
   98.30 +    
   98.31 +
   98.32 +## サポートされているプラットフォーム
   98.33 +
   98.34 +*   アマゾン火 OS
   98.35 +*   アンドロイド
   98.36 +*   ブラックベリー 10
   98.37 +*   iOS
   98.38 +*   Windows Phone 7 と 8
   98.39 +*   Windows 8
   98.40 +
   98.41 +## メソッド
   98.42 +
   98.43 +*   splashscreen.show
   98.44 +*   splashscreen.hide
   98.45 +
   98.46 +### Android の癖
   98.47 +
   98.48 +あなたの config.xml を以下の設定を追加する必要があります。
   98.49 +
   98.50 +`<preference name="SplashScreen" value="foo" />` `<preference name="SplashScreenDelay" value="10000" />`
   98.51 +
   98.52 +Foo ができれば 9 パッチファイル splashscreen ファイルの名前です。 解像度/xml ディレクトリの適切なフォルダーの下に splashcreen ファイルを追加することを確認します。 2 番目のパラメーターは、スプラッシュ ・ スクリーンがの表示時間 (ミリ秒単位) を表します。 デフォルトでは 3000 ミリ秒です。 詳細については、[アイコンとスプラッシュ画面][1]を参照してください。
   98.53 +
   98.54 + [1]: http://cordova.apache.org/docs/en/edge/config_ref_images.md.html
   98.55 +
   98.56 +## splashscreen.hide
   98.57 +
   98.58 +スプラッシュ スクリーンを閉じます。
   98.59 +
   98.60 +    navigator.splashscreen.hide();
   98.61 +    
   98.62 +
   98.63 +### ブラックベリー 10、WP8、iOS の気まぐれ
   98.64 +
   98.65 +`config.xml`ファイルの `AutoHideSplashScreen` 設定する必要があります `false` 。 遅延を 2 秒間スプラッシュ スクリーンを非表示、タイマーを追加しますで次のように `deviceready` イベント ハンドラー。
   98.66 +
   98.67 +        setTimeout(function() {navigator.splashscreen.hide();}, 2000年);
   98.68 +    
   98.69 +
   98.70 +## splashscreen.show
   98.71 +
   98.72 +スプラッシュ画面が表示されます。
   98.73 +
   98.74 +    navigator.splashscreen.show();
   98.75 +    
   98.76 +
   98.77 +アプリケーションを呼び出すことはできません `navigator.splashscreen.show()` 、アプリが開始されるまで、 `deviceready` イベントが発生します。 しかし、以来、通常スプラッシュ画面アプリ開始前に表示するものですと思われる、スプラッシュ スクリーンの目的の敗北します。 いくつかの構成を提供する `config.xml` は自動的に `show` スプラッシュ画面、アプリを起動後すぐに、それが完全に起動し、受信する前に、 `deviceready` イベント。 詳細についてはこの構成を行うには、[アイコンとスプラッシュ画面][1]を参照してください。 このような理由から、それは可能性を呼び出す必要があります `navigator.splashscreen.show()` アプリ起動時のスプラッシュ画面を見やすくします。
   98.78 \ No newline at end of file
    99.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    99.2 +++ b/Touchgui/plugins/org.apache.cordova.splashscreen/doc/ko/index.md	Thu Jun 04 14:50:33 2015 +0200
    99.3 @@ -0,0 +1,75 @@
    99.4 +<!---
    99.5 +    Licensed to the Apache Software Foundation (ASF) under one
    99.6 +    or more contributor license agreements.  See the NOTICE file
    99.7 +    distributed with this work for additional information
    99.8 +    regarding copyright ownership.  The ASF licenses this file
    99.9 +    to you under the Apache License, Version 2.0 (the
   99.10 +    "License"); you may not use this file except in compliance
   99.11 +    with the License.  You may obtain a copy of the License at
   99.12 +
   99.13 +      http://www.apache.org/licenses/LICENSE-2.0
   99.14 +
   99.15 +    Unless required by applicable law or agreed to in writing,
   99.16 +    software distributed under the License is distributed on an
   99.17 +    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
   99.18 +    KIND, either express or implied.  See the License for the
   99.19 +    specific language governing permissions and limitations
   99.20 +    under the License.
   99.21 +-->
   99.22 +
   99.23 +# org.apache.cordova.splashscreen
   99.24 +
   99.25 +이 플러그인은 표시 하 고 응용 프로그램 실행 하는 동안 시작 화면을 숨깁니다.
   99.26 +
   99.27 +## 설치
   99.28 +
   99.29 +    cordova plugin add org.apache.cordova.splashscreen
   99.30 +    
   99.31 +
   99.32 +## 지원 되는 플랫폼
   99.33 +
   99.34 +*   아마존 화재 운영 체제
   99.35 +*   안 드 로이드
   99.36 +*   블랙베리 10
   99.37 +*   iOS
   99.38 +*   Windows Phone 7과 8
   99.39 +*   윈도우 8
   99.40 +
   99.41 +## 메서드
   99.42 +
   99.43 +*   splashscreen.show
   99.44 +*   splashscreen.hide
   99.45 +
   99.46 +### 안 드 로이드 단점
   99.47 +
   99.48 +당신의 config.xml에 다음 환경 설정에 추가 해야 합니다.
   99.49 +
   99.50 +`<preference name="SplashScreen" value="foo" />` `<preference name="SplashScreenDelay" value="10000" />`
   99.51 +
   99.52 +여기서 foo splashscreen 파일, 선호 9 패치 파일의 이름입니다. 적절 한 폴더 아래 res/xml 디렉토리에 splashcreen 파일을 추가 해야 합니다. 두 번째 매개 변수는 splashscreen 얼마나 밀리초 단위로 표시 됩니다 나타냅니다. 3000 ms 기본값으로 사용 됩니다. 자세한 내용은 [아이콘 및 시작 화면을][1] 참조 하십시오.
   99.53 +
   99.54 + [1]: http://cordova.apache.org/docs/en/edge/config_ref_images.md.html
   99.55 +
   99.56 +## splashscreen.hide
   99.57 +
   99.58 +시작 화면을 닫습니다.
   99.59 +
   99.60 +    navigator.splashscreen.hide();
   99.61 +    
   99.62 +
   99.63 +### 블랙베리 10, WP8, iOS 특질
   99.64 +
   99.65 +`config.xml`파일의 `AutoHideSplashScreen` 설정을 해야 합니다 `false` . 2 초 동안 시작 화면을 숨기고 지연에 다음과 같이 타이머 추가 `deviceready` 이벤트 처리기:
   99.66 +
   99.67 +        setTimeout(function() {navigator.splashscreen.hide();
   99.68 +        }, 2000);
   99.69 +    
   99.70 +
   99.71 +## splashscreen.show
   99.72 +
   99.73 +시작 화면을 표시합니다.
   99.74 +
   99.75 +    navigator.splashscreen.show();
   99.76 +    
   99.77 +
   99.78 +응용 프로그램 호출할 수 없습니다 `navigator.splashscreen.show()` 응용 프로그램은 시작 될 때까지 및 `deviceready` 이벤트를 해 고 했다. 하지만 그 스플래시 스크린의 목적 것 같다 일반적으로 시작 화면이 당신의 애플 리 케이 션 시작 하기 전에 표시 될 운명이 다, 이후. 몇 가지 구성을 제공 `config.xml` 자동으로 `show` 시작 화면 응용 프로그램 실행 후 즉시 및 그것은 완벽 하 게 시작 하 고 받은 전에 `deviceready` 이벤트. 이 구성 하 고 자세한 내용은 [아이콘 및 시작 화면을][1] 참조 하십시오. 이러한 이유로, 그것은 가능성이 호출 해야 `navigator.splashscreen.show()` 시작 화면은 응용 프로그램 시작에 대 한 표시 되도록 합니다.
   99.79 \ No newline at end of file
   100.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   100.2 +++ b/Touchgui/plugins/org.apache.cordova.splashscreen/doc/pl/index.md	Thu Jun 04 14:50:33 2015 +0200
   100.3 @@ -0,0 +1,75 @@
   100.4 +<!---
   100.5 +    Licensed to the Apache Software Foundation (ASF) under one
   100.6 +    or more contributor license agreements.  See the NOTICE file
   100.7 +    distributed with this work for additional information
   100.8 +    regarding copyright ownership.  The ASF licenses this file
   100.9 +    to you under the Apache License, Version 2.0 (the
  100.10 +    "License"); you may not use this file except in compliance
  100.11 +    with the License.  You may obtain a copy of the License at
  100.12 +
  100.13 +      http://www.apache.org/licenses/LICENSE-2.0
  100.14 +
  100.15 +    Unless required by applicable law or agreed to in writing,
  100.16 +    software distributed under the License is distributed on an
  100.17 +    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
  100.18 +    KIND, either express or implied.  See the License for the
  100.19 +    specific language governing permissions and limitations
  100.20 +    under the License.
  100.21 +-->
  100.22 +
  100.23 +# org.apache.cordova.splashscreen
  100.24 +
  100.25 +Ten plugin wyświetla i ukrywa ekran powitalny podczas uruchamiania aplikacji.
  100.26 +
  100.27 +## Instalacja
  100.28 +
  100.29 +    cordova plugin add org.apache.cordova.splashscreen
  100.30 +    
  100.31 +
  100.32 +## Obsługiwane platformy
  100.33 +
  100.34 +*   Amazon Fire OS
  100.35 +*   Android
  100.36 +*   BlackBerry 10
  100.37 +*   iOS
  100.38 +*   Windows Phone 7 i 8
  100.39 +*   Windows 8
  100.40 +
  100.41 +## Metody
  100.42 +
  100.43 +*   splashscreen.show
  100.44 +*   splashscreen.Hide
  100.45 +
  100.46 +### Dziwactwa Androida
  100.47 +
  100.48 +W pliku config.xml musisz dodać następujące preferencje:
  100.49 +
  100.50 +`<preference name="SplashScreen" value="foo" />` `<preference name="SplashScreenDelay" value="10000" />`
  100.51 +
  100.52 +Gdzie foo jest nazwą pliku ekranu powitalnego, najlepiej 9 łatce. Upewnij się dodać pliki splashcreen do katalogu res/xml w odpowiednich folderach. Drugi parametr reprezentuje, jak długo ekranu powitalnego pojawi się w milisekundach. Domyślnie 3000 ms. Aby uzyskać więcej informacji, zobacz [ikony i ekrany powitalne w aplikacjach][1] .
  100.53 +
  100.54 + [1]: http://cordova.apache.org/docs/en/edge/config_ref_images.md.html
  100.55 +
  100.56 +## splashscreen.Hide
  100.57 +
  100.58 +Odrzucić ten opryskaæ têcza.
  100.59 +
  100.60 +    Navigator.splashscreen.Hide();
  100.61 +    
  100.62 +
  100.63 +### Jeżyna 10, WP8, iOS dziwactwo
  100.64 +
  100.65 +`config.xml`Pliku `AutoHideSplashScreen` ustawienie musi być `false` . Opóźnienia, ukrywanie ekranu powitalnego przez dwie sekundy, dodać timer następujących w `deviceready` obsługa zdarzeń:
  100.66 +
  100.67 +        setTimeout(function() {navigator.splashscreen.hide();
  100.68 +        }, 2000);
  100.69 +    
  100.70 +
  100.71 +## splashscreen.show
  100.72 +
  100.73 +Wyświetla ekran powitalny.
  100.74 +
  100.75 +    Navigator.splashscreen.show();
  100.76 +    
  100.77 +
  100.78 +Aplikacja nie może wywołać `navigator.splashscreen.show()` aż aplikacja została uruchomiona i `deviceready` imprezy został zwolniony. Ale ponieważ zazwyczaj opryskać tęcza ma być widoczne przed rozpoczęciem aplikacji, wydaje się sprzeczne z celem ekranu powitalnego. Dostarczanie niektórych konfiguracji w `config.xml` będzie automatycznie `show` ekran powitalny, natychmiast po uruchomienie aplikacji i przed pełni rozpoczął i otrzymał `deviceready` zdarzenie. Aby uzyskać więcej informacji na robienie tej konfiguracji, zobacz [ikony i ekrany powitalne w aplikacjach][1] . Z tego powodu, jest mało prawdopodobne, należy zadzwonić `navigator.splashscreen.show()` Aby wyświetlić ekran powitalny dla uruchamiania aplikacji.
  100.79 \ No newline at end of file
   101.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   101.2 +++ b/Touchgui/plugins/org.apache.cordova.splashscreen/doc/ru/index.md	Thu Jun 04 14:50:33 2015 +0200
   101.3 @@ -0,0 +1,75 @@
   101.4 +<!---
   101.5 +    Licensed to the Apache Software Foundation (ASF) under one
   101.6 +    or more contributor license agreements.  See the NOTICE file
   101.7 +    distributed with this work for additional information
   101.8 +    regarding copyright ownership.  The ASF licenses this file
   101.9 +    to you under the Apache License, Version 2.0 (the
  101.10 +    "License"); you may not use this file except in compliance
  101.11 +    with the License.  You may obtain a copy of the License at
  101.12 +
  101.13 +      http://www.apache.org/licenses/LICENSE-2.0
  101.14 +
  101.15 +    Unless required by applicable law or agreed to in writing,
  101.16 +    software distributed under the License is distributed on an
  101.17 +    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
  101.18 +    KIND, either express or implied.  See the License for the
  101.19 +    specific language governing permissions and limitations
  101.20 +    under the License.
  101.21 +-->
  101.22 +
  101.23 +# org.apache.cordova.splashscreen
  101.24 +
  101.25 +Этот плагин отображает и скрывает экран-заставку при запуске приложения.
  101.26 +
  101.27 +## Установка
  101.28 +
  101.29 +    cordova plugin add org.apache.cordova.splashscreen
  101.30 +    
  101.31 +
  101.32 +## Поддерживаемые платформы
  101.33 +
  101.34 +*   Amazon Fire OS
  101.35 +*   Android
  101.36 +*   BlackBerry 10
  101.37 +*   iOS
  101.38 +*   Windows Phone 7 и 8
  101.39 +*   Windows 8
  101.40 +
  101.41 +## Методы
  101.42 +
  101.43 +*   splashscreen.show
  101.44 +*   splashscreen.hide
  101.45 +
  101.46 +### Особенности Android
  101.47 +
  101.48 +В вашем файле config.xml необходимо добавить следующие настройки:
  101.49 +
  101.50 +`<preference name="SplashScreen" value="foo" />` `<preference name="SplashScreenDelay" value="10000" />`
  101.51 +
  101.52 +Где foo это имя файла splashscreen, желательно 9 заплатку. Убедитесь в том добавить ваши splashcreen файлы в папку res/xml в соответствующие папки. Второй параметр представляет, как долго splashscreen появится в миллисекундах. По умолчанию он 3000 МС. Увидеть [иконки и заставки][1] для получения дополнительной информации.
  101.53 +
  101.54 + [1]: http://cordova.apache.org/docs/en/edge/config_ref_images.md.html
  101.55 +
  101.56 +## splashscreen.hide
  101.57 +
  101.58 +Закройте экран-заставка.
  101.59 +
  101.60 +    Navigator.SplashScreen.Hide();
  101.61 +    
  101.62 +
  101.63 +### Особенности BlackBerry 10, WP8, iOS
  101.64 +
  101.65 +`config.xml`Файла `AutoHideSplashScreen` должен быть `false` . Для задержки скрытия заставки на две секунды, добавить таймер, например в `deviceready` обработчик событий:
  101.66 +
  101.67 +        setTimeout(function() {navigator.splashscreen.hide();
  101.68 +        }, 2000);
  101.69 +    
  101.70 +
  101.71 +## splashscreen.show
  101.72 +
  101.73 +Отображает экран-заставку.
  101.74 +
  101.75 +    Navigator.SplashScreen.Show();
  101.76 +    
  101.77 +
  101.78 +Ваше приложение не может вызвать `navigator.splashscreen.show()` до тех пор, пока приложение началась и `deviceready` событие инициировано. Но поскольку обычно экран-заставка должен быть видимым до начала вашего приложения, что казалось бы поражение цели экрана-заставки. Предоставление некоторых конфигурации в `config.xml` будет автоматически `show` экран-заставку сразу же после запуска вашего приложения и перед его полностью запущен и получил `deviceready` событие. Увидеть [иконки и заставки][1] для получения дополнительной информации на делать этой конфигурации. По этой причине маловероятно, вам нужно вызвать `navigator.splashscreen.show()` для отображения экрана-заставки для запуска приложения.
  101.79 \ No newline at end of file
   102.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   102.2 +++ b/Touchgui/plugins/org.apache.cordova.splashscreen/doc/zh/index.md	Thu Jun 04 14:50:33 2015 +0200
   102.3 @@ -0,0 +1,74 @@
   102.4 +<!---
   102.5 +    Licensed to the Apache Software Foundation (ASF) under one
   102.6 +    or more contributor license agreements.  See the NOTICE file
   102.7 +    distributed with this work for additional information
   102.8 +    regarding copyright ownership.  The ASF licenses this file
   102.9 +    to you under the Apache License, Version 2.0 (the
  102.10 +    "License"); you may not use this file except in compliance
  102.11 +    with the License.  You may obtain a copy of the License at
  102.12 +
  102.13 +      http://www.apache.org/licenses/LICENSE-2.0
  102.14 +
  102.15 +    Unless required by applicable law or agreed to in writing,
  102.16 +    software distributed under the License is distributed on an
  102.17 +    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
  102.18 +    KIND, either express or implied.  See the License for the
  102.19 +    specific language governing permissions and limitations
  102.20 +    under the License.
  102.21 +-->
  102.22 +
  102.23 +# org.apache.cordova.splashscreen
  102.24 +
  102.25 +這個外掛程式顯示和隱藏在應用程式啟動期間的初始螢幕。
  102.26 +
  102.27 +## 安裝
  102.28 +
  102.29 +    cordova plugin add org.apache.cordova.splashscreen
  102.30 +    
  102.31 +
  102.32 +## 支援的平臺
  102.33 +
  102.34 +*   亞馬遜火 OS
  102.35 +*   Android 系統
  102.36 +*   黑莓 10
  102.37 +*   iOS
  102.38 +*   Windows Phone 7 和 8
  102.39 +*   Windows 8
  102.40 +
  102.41 +## 方法
  102.42 +
  102.43 +*   splashscreen.show
  102.44 +*   splashscreen.hide
  102.45 +
  102.46 +### Android 的怪癖
  102.47 +
  102.48 +在你的 config.xml,您需要添加以下優惠:
  102.49 +
  102.50 +`<preference name="SplashScreen" value="foo" />` `<preference name="SplashScreenDelay" value="10000" />`
  102.51 +
  102.52 +美孚在哪裡閃屏檔,最好是 9 修補程式檔的名稱。 請確保您的 splashcreen 檔添加到 res/xml 目錄下相應的資料夾。 第二個參數表示多久閃屏會顯示以毫秒為單位。 它將預設為 3000 毫秒。 有關更多資訊,請參見[圖示和啟動畫面][1]。
  102.53 +
  102.54 + [1]: http://cordova.apache.org/docs/en/edge/config_ref_images.md.html
  102.55 +
  102.56 +## splashscreen.hide
  102.57 +
  102.58 +解雇的閃屏。
  102.59 +
  102.60 +    navigator.splashscreen.hide() ;
  102.61 +    
  102.62 +
  102.63 +### 黑莓 10,WP8,iOS 怪癖
  102.64 +
  102.65 +`config.xml`檔的 `AutoHideSplashScreen` 設置必須為 `false` 。 若要延遲兩秒鐘隱藏的閃屏,添加如下所示在計時器 `deviceready` 事件處理常式:
  102.66 +
  102.67 +        setTimeout(function() {navigator.splashscreen.hide() ;},2000年) ;
  102.68 +    
  102.69 +
  102.70 +## splashscreen.show
  102.71 +
  102.72 +顯示初始螢幕。
  102.73 +
  102.74 +    navigator.splashscreen.show() ;
  102.75 +    
  102.76 +
  102.77 +您的應用程式無法調用 `navigator.splashscreen.show()` 直到應用程式已經開始, `deviceready` 觸發了事件。 但是,由於通常的閃屏為了是可見的在您的應用程式啟動之前,這似乎會打敗閃屏的目的。 提供一些配置在 `config.xml` 將自動 `show` 閃屏您的應用程式啟動後立即和之前它已經完全起步並收到 `deviceready` 事件。 做這種配置的詳細資訊,請參閱[圖示和啟動畫面][1]。 出於這個原因,它不太可能您需要調用 `navigator.splashscreen.show()` ,使初始螢幕可見為應用程式啟動。
  102.78 \ No newline at end of file
   103.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   103.2 +++ b/Touchgui/plugins/org.apache.cordova.splashscreen/plugin.xml	Thu Jun 04 14:50:33 2015 +0200
   103.3 @@ -0,0 +1,126 @@
   103.4 +<?xml version="1.0" encoding="UTF-8"?>
   103.5 +<!--
   103.6 +  Licensed to the Apache Software Foundation (ASF) under one
   103.7 +  or more contributor license agreements.  See the NOTICE file
   103.8 +  distributed with this work for additional information
   103.9 +  regarding copyright ownership.  The ASF licenses this file
  103.10 +  to you under the Apache License, Version 2.0 (the
  103.11 +  "License"); you may not use this file except in compliance
  103.12 +  with the License.  You may obtain a copy of the License at
  103.13 +
  103.14 +    http://www.apache.org/licenses/LICENSE-2.0
  103.15 +
  103.16 +  Unless required by applicable law or agreed to in writing,
  103.17 +  software distributed under the License is distributed on an
  103.18 +  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
  103.19 +  KIND, either express or implied.  See the License for the
  103.20 +  specific language governing permissions and limitations
  103.21 +  under the License.
  103.22 +-->
  103.23 +
  103.24 +<plugin xmlns="http://apache.org/cordova/ns/plugins/1.0"
  103.25 +           id="org.apache.cordova.splashscreen"
  103.26 +      version="0.3.5">
  103.27 +    <name>Splashscreen</name>
  103.28 +    <description>Cordova Splashscreen Plugin</description>
  103.29 +    <license>Apache 2.0</license>
  103.30 +    <keywords>cordova,splashscreen</keywords>
  103.31 +    <repo>https://git-wip-us.apache.org/repos/asf/cordova-plugin-splashscreen.git</repo>
  103.32 +    <issue>https://issues.apache.org/jira/browse/CB/component/12320653</issue>
  103.33 +
  103.34 +
  103.35 +    <js-module src="www/splashscreen.js" name="SplashScreen">
  103.36 +        <clobbers target="navigator.splashscreen" />
  103.37 +    </js-module>
  103.38 +
  103.39 +    <!-- android -->
  103.40 +    <platform name="android">
  103.41 +        <config-file target="res/xml/config.xml" parent="/*">
  103.42 +            <feature name="SplashScreen">
  103.43 +            <param name="android-package" value="org.apache.cordova.splashscreen.SplashScreen"/>
  103.44 +            </feature>
  103.45 +        </config-file>
  103.46 +
  103.47 +        <source-file src="src/android/SplashScreen.java" target-dir="src/org/apache/cordova/splashscreen" />
  103.48 +    </platform>
  103.49 +
  103.50 +    <!-- amazon-fireos -->
  103.51 +    <platform name="amazon-fireos">
  103.52 +        <config-file target="res/xml/config.xml" parent="/*">
  103.53 +            <feature name="SplashScreen">
  103.54 +            <param name="android-package" value="org.apache.cordova.splashscreen.SplashScreen"/>
  103.55 +            </feature>
  103.56 +        </config-file>
  103.57 +
  103.58 +        <source-file src="src/android/SplashScreen.java" target-dir="src/org/apache/cordova/splashscreen" />
  103.59 +    </platform>
  103.60 +    
  103.61 +    <!-- ubuntu -->
  103.62 +    <platform name="ubuntu">
  103.63 +        <header-file src="src/ubuntu/splashscreen.h" />
  103.64 +        <source-file src="src/ubuntu/splashscreen.cpp" />
  103.65 +    </platform>
  103.66 +
  103.67 +    <!-- ios -->
  103.68 +    <platform name="ios">
  103.69 +        <config-file target="config.xml" parent="/*">
  103.70 +		    <feature name="SplashScreen">
  103.71 +			    <param name="ios-package" value="CDVSplashScreen"/>
  103.72 +			    <param name="onload" value="true"/>
  103.73 +		    </feature>
  103.74 +        </config-file>
  103.75 +
  103.76 +	    <header-file src="src/ios/CDVSplashScreen.h" />
  103.77 +	    <source-file src="src/ios/CDVSplashScreen.m" />
  103.78 +
  103.79 +	    <framework src="CoreGraphics.framework" />
  103.80 +    </platform>
  103.81 +
  103.82 +    <!-- blackberry10 -->
  103.83 +    <platform name="blackberry10">
  103.84 +        <source-file src="src/blackberry10/index.js" target-dir="SplashScreen" />
  103.85 +        <config-file target="www/config.xml" parent="/widget">
  103.86 +            <feature name="SplashScreen" value="SplashScreen"/>
  103.87 +        </config-file>
  103.88 +    </platform>
  103.89 +
  103.90 +    <!-- wp7 -->
  103.91 +    <platform name="wp7">
  103.92 +        <config-file target="config.xml" parent="/*">
  103.93 +            <feature name="SplashScreen">
  103.94 +                <param name="wp-package" value="SplashScreen"/>
  103.95 +                <param name="onload" value="true"/>
  103.96 +            </feature>
  103.97 +        </config-file>
  103.98 +
  103.99 +        <source-file src="src/wp/SplashScreen.cs" />
 103.100 +
 103.101 +    </platform>
 103.102 +
 103.103 +    <!-- wp8 -->
 103.104 +    <platform name="wp8">
 103.105 +        <config-file target="config.xml" parent="/*">
 103.106 +            <feature name="SplashScreen">
 103.107 +                <param name="wp-package" value="SplashScreen"/>
 103.108 +                <param name="onload" value="true"/>
 103.109 +            </feature>
 103.110 +        </config-file>
 103.111 +
 103.112 +        <source-file src="src/wp/SplashScreen.cs" />
 103.113 +
 103.114 +    </platform>
 103.115 +
 103.116 +    <!-- windows8 -->
 103.117 +    <platform name="windows8">
 103.118 +        <js-module src="www/windows8/SplashScreenProxy.js" name="SplashScreenProxy">
 103.119 +            <merges target="" />
 103.120 +        </js-module>
 103.121 +    </platform>
 103.122 +
 103.123 +    <!-- tizen -->
 103.124 +    <platform name="tizen">
 103.125 +        <js-module src="src/tizen/SplashScreenProxy.js" name="SplashScreenProxy">
 103.126 +            <runs />
 103.127 +        </js-module>
 103.128 +    </platform>
 103.129 +</plugin>
   104.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   104.2 +++ b/Touchgui/plugins/org.apache.cordova.splashscreen/src/android/SplashScreen.java	Thu Jun 04 14:50:33 2015 +0200
   104.3 @@ -0,0 +1,43 @@
   104.4 +/*
   104.5 +       Licensed to the Apache Software Foundation (ASF) under one
   104.6 +       or more contributor license agreements.  See the NOTICE file
   104.7 +       distributed with this work for additional information
   104.8 +       regarding copyright ownership.  The ASF licenses this file
   104.9 +       to you under the Apache License, Version 2.0 (the
  104.10 +       "License"); you may not use this file except in compliance
  104.11 +       with the License.  You may obtain a copy of the License at
  104.12 +
  104.13 +         http://www.apache.org/licenses/LICENSE-2.0
  104.14 +
  104.15 +       Unless required by applicable law or agreed to in writing,
  104.16 +       software distributed under the License is distributed on an
  104.17 +       "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
  104.18 +       KIND, either express or implied.  See the License for the
  104.19 +       specific language governing permissions and limitations
  104.20 +       under the License.
  104.21 +*/
  104.22 +
  104.23 +package org.apache.cordova.splashscreen;
  104.24 +
  104.25 +import org.apache.cordova.CallbackContext;
  104.26 +import org.apache.cordova.CordovaPlugin;
  104.27 +import org.json.JSONArray;
  104.28 +
  104.29 +public class SplashScreen extends CordovaPlugin {
  104.30 +
  104.31 +    @Override
  104.32 +    public boolean execute(String action, JSONArray args, CallbackContext callbackContext) {
  104.33 +        if (action.equals("hide")) {
  104.34 +            this.webView.postMessage("splashscreen", "hide");
  104.35 +        } else if (action.equals("show")){
  104.36 +            this.webView.postMessage("splashscreen", "show");
  104.37 +        }
  104.38 +        else {
  104.39 +            return false;
  104.40 +        }
  104.41 +
  104.42 +        callbackContext.success();
  104.43 +        return true;
  104.44 +    }
  104.45 +
  104.46 +}
   105.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   105.2 +++ b/Touchgui/plugins/org.apache.cordova.splashscreen/src/blackberry10/index.js	Thu Jun 04 14:50:33 2015 +0200
   105.3 @@ -0,0 +1,28 @@
   105.4 +/*
   105.5 + * Copyright 2013 Research In Motion Limited.
   105.6 + *
   105.7 + * Licensed under the Apache License, Version 2.0 (the "License");
   105.8 + * you may not use this file except in compliance with the License.
   105.9 + * You may obtain a copy of the License at
  105.10 + *
  105.11 + * http://www.apache.org/licenses/LICENSE-2.0
  105.12 + *
  105.13 + * Unless required by applicable law or agreed to in writing, software
  105.14 + * distributed under the License is distributed on an "AS IS" BASIS,
  105.15 + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  105.16 + * See the License for the specific language governing permissions and
  105.17 + * limitations under the License.
  105.18 + */
  105.19 +
  105.20 +module.exports = {
  105.21 +    show: function (success, fail, args, env) {
  105.22 +        var result = new PluginResult(args, env);
  105.23 +        result.error("Not supported on platform", false);
  105.24 +    },
  105.25 +
  105.26 +    hide: function (success, fail, args, env) {
  105.27 +        var result = new PluginResult(args, env);
  105.28 +        window.qnx.webplatform.getApplication().windowVisible = true;
  105.29 +        result.ok(undefined, false);
  105.30 +    }
  105.31 +};
   106.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   106.2 +++ b/Touchgui/plugins/org.apache.cordova.splashscreen/src/ios/CDVSplashScreen.h	Thu Jun 04 14:50:33 2015 +0200
   106.3 @@ -0,0 +1,43 @@
   106.4 +/*
   106.5 + Licensed to the Apache Software Foundation (ASF) under one
   106.6 + or more contributor license agreements.  See the NOTICE file
   106.7 + distributed with this work for additional information
   106.8 + regarding copyright ownership.  The ASF licenses this file
   106.9 + to you under the Apache License, Version 2.0 (the
  106.10 + "License"); you may not use this file except in compliance
  106.11 + with the License.  You may obtain a copy of the License at
  106.12 +
  106.13 + http://www.apache.org/licenses/LICENSE-2.0
  106.14 +
  106.15 + Unless required by applicable law or agreed to in writing,
  106.16 + software distributed under the License is distributed on an
  106.17 + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
  106.18 + KIND, either express or implied.  See the License for the
  106.19 + specific language governing permissions and limitations
  106.20 + under the License.
  106.21 + */
  106.22 +
  106.23 +#import <Foundation/Foundation.h>
  106.24 +#import <Cordova/CDVPlugin.h>
  106.25 +
  106.26 +typedef struct {
  106.27 +    BOOL iPhone;
  106.28 +    BOOL iPad;
  106.29 +    BOOL iPhone5;
  106.30 +    BOOL iPhone6;
  106.31 +    BOOL iPhone6Plus;
  106.32 +    BOOL retina;
  106.33 +    
  106.34 +} CDV_iOSDevice;
  106.35 +
  106.36 +@interface CDVSplashScreen : CDVPlugin {
  106.37 +    UIActivityIndicatorView* _activityView;
  106.38 +    UIImageView* _imageView;
  106.39 +    NSString* _curImageName;
  106.40 +    BOOL _visible;
  106.41 +}
  106.42 +
  106.43 +- (void)show:(CDVInvokedUrlCommand*)command;
  106.44 +- (void)hide:(CDVInvokedUrlCommand*)command;
  106.45 +
  106.46 +@end
   107.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   107.2 +++ b/Touchgui/plugins/org.apache.cordova.splashscreen/src/ios/CDVSplashScreen.m	Thu Jun 04 14:50:33 2015 +0200
   107.3 @@ -0,0 +1,307 @@
   107.4 +/*
   107.5 + Licensed to the Apache Software Foundation (ASF) under one
   107.6 + or more contributor license agreements.  See the NOTICE file
   107.7 + distributed with this work for additional information
   107.8 + regarding copyright ownership.  The ASF licenses this file
   107.9 + to you under the Apache License, Version 2.0 (the
  107.10 + "License"); you may not use this file except in compliance
  107.11 + with the License.  You may obtain a copy of the License at
  107.12 +
  107.13 + http://www.apache.org/licenses/LICENSE-2.0
  107.14 +
  107.15 + Unless required by applicable law or agreed to in writing,
  107.16 + software distributed under the License is distributed on an
  107.17 + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
  107.18 + KIND, either express or implied.  See the License for the
  107.19 + specific language governing permissions and limitations
  107.20 + under the License.
  107.21 + */
  107.22 +
  107.23 +#import "CDVSplashScreen.h"
  107.24 +#import <Cordova/CDVViewController.h>
  107.25 +#import <Cordova/CDVScreenOrientationDelegate.h>
  107.26 +
  107.27 +#define kSplashScreenDurationDefault 0.25f
  107.28 +
  107.29 +
  107.30 +@implementation CDVSplashScreen
  107.31 +
  107.32 +- (void)pluginInitialize
  107.33 +{
  107.34 +    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(pageDidLoad) name:CDVPageDidLoadNotification object:self.webView];
  107.35 +
  107.36 +    [self setVisible:YES];
  107.37 +}
  107.38 +
  107.39 +- (void)show:(CDVInvokedUrlCommand*)command
  107.40 +{
  107.41 +    [self setVisible:YES];
  107.42 +}
  107.43 +
  107.44 +- (void)hide:(CDVInvokedUrlCommand*)command
  107.45 +{
  107.46 +    [self setVisible:NO];
  107.47 +}
  107.48 +
  107.49 +- (void)pageDidLoad
  107.50 +{
  107.51 +    id autoHideSplashScreenValue = [self.commandDelegate.settings objectForKey:[@"AutoHideSplashScreen" lowercaseString]];
  107.52 +
  107.53 +    // if value is missing, default to yes
  107.54 +    if ((autoHideSplashScreenValue == nil) || [autoHideSplashScreenValue boolValue]) {
  107.55 +        [self setVisible:NO];
  107.56 +    }
  107.57 +}
  107.58 +
  107.59 +- (void)observeValueForKeyPath:(NSString*)keyPath ofObject:(id)object change:(NSDictionary*)change context:(void*)context
  107.60 +{
  107.61 +    [self updateImage];
  107.62 +}
  107.63 +
  107.64 +- (void)createViews
  107.65 +{
  107.66 +    /*
  107.67 +     * The Activity View is the top spinning throbber in the status/battery bar. We init it with the default Grey Style.
  107.68 +     *
  107.69 +     *     whiteLarge = UIActivityIndicatorViewStyleWhiteLarge
  107.70 +     *     white      = UIActivityIndicatorViewStyleWhite
  107.71 +     *     gray       = UIActivityIndicatorViewStyleGray
  107.72 +     *
  107.73 +     */
  107.74 +    NSString* topActivityIndicator = [self.commandDelegate.settings objectForKey:[@"TopActivityIndicator" lowercaseString]];
  107.75 +    UIActivityIndicatorViewStyle topActivityIndicatorStyle = UIActivityIndicatorViewStyleGray;
  107.76 +
  107.77 +    if ([topActivityIndicator isEqualToString:@"whiteLarge"]) {
  107.78 +        topActivityIndicatorStyle = UIActivityIndicatorViewStyleWhiteLarge;
  107.79 +    } else if ([topActivityIndicator isEqualToString:@"white"]) {
  107.80 +        topActivityIndicatorStyle = UIActivityIndicatorViewStyleWhite;
  107.81 +    } else if ([topActivityIndicator isEqualToString:@"gray"]) {
  107.82 +        topActivityIndicatorStyle = UIActivityIndicatorViewStyleGray;
  107.83 +    }
  107.84 +
  107.85 +    UIView* parentView = self.viewController.view;
  107.86 +    parentView.userInteractionEnabled = NO;  // disable user interaction while splashscreen is shown
  107.87 +    _activityView = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:topActivityIndicatorStyle];
  107.88 +    _activityView.center = CGPointMake(parentView.bounds.size.width / 2, parentView.bounds.size.height / 2);
  107.89 +    _activityView.autoresizingMask = UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleLeftMargin
  107.90 +        | UIViewAutoresizingFlexibleBottomMargin | UIViewAutoresizingFlexibleRightMargin;
  107.91 +    [_activityView startAnimating];
  107.92 +
  107.93 +    // Set the frame & image later.
  107.94 +    _imageView = [[UIImageView alloc] init];
  107.95 +    [parentView addSubview:_imageView];
  107.96 +
  107.97 +    id showSplashScreenSpinnerValue = [self.commandDelegate.settings objectForKey:[@"ShowSplashScreenSpinner" lowercaseString]];
  107.98 +    // backwards compatibility - if key is missing, default to true
  107.99 +    if ((showSplashScreenSpinnerValue == nil) || [showSplashScreenSpinnerValue boolValue]) {
 107.100 +        [parentView addSubview:_activityView];
 107.101 +    }
 107.102 +
 107.103 +    // Frame is required when launching in portrait mode.
 107.104 +    // Bounds for landscape since it captures the rotation.
 107.105 +    [parentView addObserver:self forKeyPath:@"frame" options:0 context:nil];
 107.106 +    [parentView addObserver:self forKeyPath:@"bounds" options:0 context:nil];
 107.107 +
 107.108 +    [self updateImage];
 107.109 +}
 107.110 +
 107.111 +- (void)destroyViews
 107.112 +{
 107.113 +    [_imageView removeFromSuperview];
 107.114 +    [_activityView removeFromSuperview];
 107.115 +    _imageView = nil;
 107.116 +    _activityView = nil;
 107.117 +    _curImageName = nil;
 107.118 +
 107.119 +    self.viewController.view.userInteractionEnabled = YES;  // re-enable user interaction upon completion
 107.120 +    [self.viewController.view removeObserver:self forKeyPath:@"frame"];
 107.121 +    [self.viewController.view removeObserver:self forKeyPath:@"bounds"];
 107.122 +}
 107.123 +
 107.124 +- (CDV_iOSDevice) getCurrentDevice
 107.125 +{
 107.126 +    CDV_iOSDevice device;
 107.127 +    
 107.128 +    UIScreen* mainScreen = [UIScreen mainScreen];
 107.129 +    CGFloat mainScreenHeight = mainScreen.bounds.size.height;
 107.130 +    CGFloat mainScreenWidth = mainScreen.bounds.size.width;
 107.131 +    
 107.132 +    int limit = MAX(mainScreenHeight,mainScreenWidth);
 107.133 +    
 107.134 +    device.iPad = (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad);
 107.135 +    device.iPhone = (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone);
 107.136 +    device.retina = ([mainScreen scale] == 2.0);
 107.137 +    device.iPhone5 = (device.iPhone && limit == 568.0);
 107.138 +    // note these below is not a true device detect, for example if you are on an
 107.139 +    // iPhone 6/6+ but the app is scaled it will prob set iPhone5 as true, but
 107.140 +    // this is appropriate for detecting the runtime screen environment
 107.141 +    device.iPhone6 = (device.iPhone && limit == 667.0);
 107.142 +    device.iPhone6Plus = (device.iPhone && limit == 736.0);
 107.143 +    
 107.144 +    return device;
 107.145 +}
 107.146 +
 107.147 +- (NSString*)getImageName:(UIInterfaceOrientation)currentOrientation delegate:(id<CDVScreenOrientationDelegate>)orientationDelegate device:(CDV_iOSDevice)device
 107.148 +{
 107.149 +    // Use UILaunchImageFile if specified in plist.  Otherwise, use Default.
 107.150 +    NSString* imageName = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"UILaunchImageFile"];
 107.151 +    
 107.152 +    NSUInteger supportedOrientations = [orientationDelegate supportedInterfaceOrientations];
 107.153 +    
 107.154 +    // Checks to see if the developer has locked the orientation to use only one of Portrait or Landscape
 107.155 +    BOOL supportsLandscape = (supportedOrientations & UIInterfaceOrientationMaskLandscape);
 107.156 +    BOOL supportsPortrait = (supportedOrientations & UIInterfaceOrientationMaskPortrait || supportedOrientations & UIInterfaceOrientationMaskPortraitUpsideDown);
 107.157 +    // this means there are no mixed orientations in there
 107.158 +    BOOL isOrientationLocked = !(supportsPortrait && supportsLandscape);
 107.159 +    
 107.160 +    if (imageName) {
 107.161 +        imageName = [imageName stringByDeletingPathExtension];
 107.162 +    } else {
 107.163 +        imageName = @"Default";
 107.164 +    }
 107.165 +    
 107.166 +    if (device.iPhone5) { // does not support landscape
 107.167 +        imageName = [imageName stringByAppendingString:@"-568h"];
 107.168 +    } else if (device.iPhone6) { // does not support landscape
 107.169 +        imageName = [imageName stringByAppendingString:@"-667h"];
 107.170 +    } else if (device.iPhone6Plus) { // supports landscape
 107.171 +        if (isOrientationLocked) {
 107.172 +            imageName = [imageName stringByAppendingString:(supportsLandscape ? @"-Landscape" : @"")];
 107.173 +        } else {
 107.174 +            switch (currentOrientation) {
 107.175 +                case UIInterfaceOrientationLandscapeLeft:
 107.176 +                case UIInterfaceOrientationLandscapeRight:
 107.177 +                        imageName = [imageName stringByAppendingString:@"-Landscape"];
 107.178 +                    break;
 107.179 +                default:
 107.180 +                    break;
 107.181 +            }
 107.182 +        }
 107.183 +        imageName = [imageName stringByAppendingString:@"-736h"];
 107.184 +
 107.185 +    } else if (device.iPad) { // supports landscape
 107.186 +        if (isOrientationLocked) {
 107.187 +            imageName = [imageName stringByAppendingString:(supportsLandscape ? @"-Landscape" : @"-Portrait")];
 107.188 +        } else {
 107.189 +            switch (currentOrientation) {
 107.190 +                case UIInterfaceOrientationLandscapeLeft:
 107.191 +                case UIInterfaceOrientationLandscapeRight:
 107.192 +                    imageName = [imageName stringByAppendingString:@"-Landscape"];
 107.193 +                    break;
 107.194 +                    
 107.195 +                case UIInterfaceOrientationPortrait:
 107.196 +                case UIInterfaceOrientationPortraitUpsideDown:
 107.197 +                default:
 107.198 +                    imageName = [imageName stringByAppendingString:@"-Portrait"];
 107.199 +                    break;
 107.200 +            }
 107.201 +        }
 107.202 +    }
 107.203 +    
 107.204 +    return imageName;
 107.205 +}
 107.206 +
 107.207 +// Sets the view's frame and image.
 107.208 +- (void)updateImage
 107.209 +{
 107.210 +    NSString* imageName = [self getImageName:self.viewController.interfaceOrientation delegate:(id<CDVScreenOrientationDelegate>)self.viewController device:[self getCurrentDevice]];
 107.211 +
 107.212 +    if (![imageName isEqualToString:_curImageName]) {
 107.213 +        UIImage* img = [UIImage imageNamed:imageName];
 107.214 +        _imageView.image = img;
 107.215 +        _curImageName = imageName;
 107.216 +    }
 107.217 +
 107.218 +    // Check that splash screen's image exists before updating bounds
 107.219 +    if (_imageView.image) {
 107.220 +        [self updateBounds];
 107.221 +    } else {
 107.222 +        NSLog(@"WARNING: The splashscreen image named %@ was not found", imageName);
 107.223 +    }
 107.224 +}
 107.225 +
 107.226 +- (void)updateBounds
 107.227 +{
 107.228 +    UIImage* img = _imageView.image;
 107.229 +    CGRect imgBounds = (img) ? CGRectMake(0, 0, img.size.width, img.size.height) : CGRectZero;
 107.230 +
 107.231 +    CGSize screenSize = [self.viewController.view convertRect:[UIScreen mainScreen].bounds fromView:nil].size;
 107.232 +    UIInterfaceOrientation orientation = self.viewController.interfaceOrientation;
 107.233 +    CGAffineTransform imgTransform = CGAffineTransformIdentity;
 107.234 +
 107.235 +    /* If and only if an iPhone application is landscape-only as per
 107.236 +     * UISupportedInterfaceOrientations, the view controller's orientation is
 107.237 +     * landscape. In this case the image must be rotated in order to appear
 107.238 +     * correctly.
 107.239 +     */
 107.240 +    if (UIInterfaceOrientationIsLandscape(orientation) && !CDV_IsIPad()) {
 107.241 +        imgTransform = CGAffineTransformMakeRotation(M_PI / 2);
 107.242 +        imgBounds.size = CGSizeMake(imgBounds.size.height, imgBounds.size.width);
 107.243 +    }
 107.244 +
 107.245 +    // There's a special case when the image is the size of the screen.
 107.246 +    if (CGSizeEqualToSize(screenSize, imgBounds.size)) {
 107.247 +        CGRect statusFrame = [self.viewController.view convertRect:[UIApplication sharedApplication].statusBarFrame fromView:nil];
 107.248 +        if (!(IsAtLeastiOSVersion(@"7.0"))) {
 107.249 +            imgBounds.origin.y -= statusFrame.size.height;
 107.250 +        }
 107.251 +    } else if (imgBounds.size.width > 0) {
 107.252 +        CGRect viewBounds = self.viewController.view.bounds;
 107.253 +        CGFloat imgAspect = imgBounds.size.width / imgBounds.size.height;
 107.254 +        CGFloat viewAspect = viewBounds.size.width / viewBounds.size.height;
 107.255 +        // This matches the behaviour of the native splash screen.
 107.256 +        CGFloat ratio;
 107.257 +        if (viewAspect > imgAspect) {
 107.258 +            ratio = viewBounds.size.width / imgBounds.size.width;
 107.259 +        } else {
 107.260 +            ratio = viewBounds.size.height / imgBounds.size.height;
 107.261 +        }
 107.262 +        imgBounds.size.height *= ratio;
 107.263 +        imgBounds.size.width *= ratio;
 107.264 +    }
 107.265 +
 107.266 +    _imageView.transform = imgTransform;
 107.267 +    _imageView.frame = imgBounds;
 107.268 +}
 107.269 +
 107.270 +- (void)setVisible:(BOOL)visible
 107.271 +{
 107.272 +    if (visible == _visible) {
 107.273 +        return;
 107.274 +    }
 107.275 +    _visible = visible;
 107.276 +
 107.277 +    id fadeSplashScreenValue = [self.commandDelegate.settings objectForKey:[@"FadeSplashScreen" lowercaseString]];
 107.278 +    id fadeSplashScreenDuration = [self.commandDelegate.settings objectForKey:[@"FadeSplashScreenDuration" lowercaseString]];
 107.279 +
 107.280 +    float fadeDuration = fadeSplashScreenDuration == nil ? kSplashScreenDurationDefault : [fadeSplashScreenDuration floatValue];
 107.281 +
 107.282 +    if ((fadeSplashScreenValue == nil) || ![fadeSplashScreenValue boolValue]) {
 107.283 +        fadeDuration = 0;
 107.284 +    }
 107.285 +
 107.286 +    // Never animate the showing of the splash screen.
 107.287 +    if (visible) {
 107.288 +        if (_imageView == nil) {
 107.289 +            [self createViews];
 107.290 +        }
 107.291 +    } else if (fadeDuration == 0) {
 107.292 +        [self destroyViews];
 107.293 +    } else {
 107.294 +        [UIView transitionWithView:self.viewController.view
 107.295 +                          duration:fadeDuration
 107.296 +                           options:UIViewAnimationOptionTransitionNone
 107.297 +                        animations:^(void) {
 107.298 +                            [_imageView setAlpha:0];
 107.299 +                            [_activityView setAlpha:0];
 107.300 +                        }
 107.301 +                        completion:^(BOOL finished) {
 107.302 +                            if (finished) {
 107.303 +                                [self destroyViews];
 107.304 +                            }
 107.305 +                        }
 107.306 +        ];
 107.307 +    }
 107.308 +}
 107.309 +
 107.310 +@end
   108.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   108.2 +++ b/Touchgui/plugins/org.apache.cordova.splashscreen/src/tizen/SplashScreenProxy.js	Thu Jun 04 14:50:33 2015 +0200
   108.3 @@ -0,0 +1,43 @@
   108.4 +/*
   108.5 + *
   108.6 + * Licensed to the Apache Software Foundation (ASF) under one
   108.7 + * or more contributor license agreements.  See the NOTICE file
   108.8 + * distributed with this work for additional information
   108.9 + * regarding copyright ownership.  The ASF licenses this file
  108.10 + * to you under the Apache License, Version 2.0 (the
  108.11 + * "License"); you may not use this file except in compliance
  108.12 + * with the License.  You may obtain a copy of the License at
  108.13 + *
  108.14 + *   http://www.apache.org/licenses/LICENSE-2.0
  108.15 + *
  108.16 + * Unless required by applicable law or agreed to in writing,
  108.17 + * software distributed under the License is distributed on an
  108.18 + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
  108.19 + * KIND, either express or implied.  See the License for the
  108.20 + * specific language governing permissions and limitations
  108.21 + * under the License.
  108.22 + *
  108.23 +*/
  108.24 +
  108.25 +( function() {
  108.26 +
  108.27 +win = null;
  108.28 +
  108.29 +module.exports = {
  108.30 +    show: function() {
  108.31 +        if ( win === null ) {
  108.32 +            win = window.open('splashscreen.html');
  108.33 +        }
  108.34 +    },
  108.35 +
  108.36 +    hide: function() {
  108.37 +        if ( win !== null ) {
  108.38 +            win.close();
  108.39 +            win = null;
  108.40 +        }
  108.41 +    }
  108.42 +};
  108.43 +
  108.44 +require("cordova/tizen/commandProxy").add("SplashScreen", module.exports);
  108.45 +
  108.46 +})();
   109.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   109.2 +++ b/Touchgui/plugins/org.apache.cordova.splashscreen/src/ubuntu/splashscreen.cpp	Thu Jun 04 14:50:33 2015 +0200
   109.3 @@ -0,0 +1,42 @@
   109.4 +/*
   109.5 + *
   109.6 + * Copyright 2013 Canonical Ltd.
   109.7 + *
   109.8 + * Licensed to the Apache Software Foundation (ASF) under one
   109.9 + * or more contributor license agreements.  See the NOTICE file
  109.10 + * distributed with this work for additional information
  109.11 + * regarding copyright ownership.  The ASF licenses this file
  109.12 + * to you under the Apache License, Version 2.0 (the
  109.13 + * "License"); you may not use this file except in compliance
  109.14 + * with the License.  You may obtain a copy of the License at
  109.15 + *
  109.16 + *   http://www.apache.org/licenses/LICENSE-2.0
  109.17 + *
  109.18 + * Unless required by applicable law or agreed to in writing,
  109.19 + * software distributed under the License is distributed on an
  109.20 + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
  109.21 + * KIND, either express or implied.  See the License for the
  109.22 + * specific language governing permissions and limitations
  109.23 + * under the License.
  109.24 + *
  109.25 +*/
  109.26 +
  109.27 +#include <QQuickItem>
  109.28 +
  109.29 +#include "splashscreen.h"
  109.30 +#include <cordova.h>
  109.31 +
  109.32 +#define SPLASHSCREEN_STATE_NAME "splashscreen"
  109.33 +
  109.34 +Splashscreen::Splashscreen(Cordova *cordova): CPlugin(cordova) {
  109.35 +}
  109.36 +
  109.37 +void Splashscreen::show(int, int) {
  109.38 +    m_cordova->rootObject()->setProperty("splashscreenPath", m_cordova->getSplashscreenPath());
  109.39 +
  109.40 +    m_cordova->pushViewState(SPLASHSCREEN_STATE_NAME);
  109.41 +}
  109.42 +
  109.43 +void Splashscreen::hide(int, int) {
  109.44 +    m_cordova->popViewState(SPLASHSCREEN_STATE_NAME);
  109.45 +}
   110.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   110.2 +++ b/Touchgui/plugins/org.apache.cordova.splashscreen/src/ubuntu/splashscreen.h	Thu Jun 04 14:50:33 2015 +0200
   110.3 @@ -0,0 +1,52 @@
   110.4 +/*
   110.5 + *
   110.6 + * Copyright 2013 Canonical Ltd.
   110.7 + *
   110.8 + * Licensed to the Apache Software Foundation (ASF) under one
   110.9 + * or more contributor license agreements.  See the NOTICE file
  110.10 + * distributed with this work for additional information
  110.11 + * regarding copyright ownership.  The ASF licenses this file
  110.12 + * to you under the Apache License, Version 2.0 (the
  110.13 + * "License"); you may not use this file except in compliance
  110.14 + * with the License.  You may obtain a copy of the License at
  110.15 + *
  110.16 + *   http://www.apache.org/licenses/LICENSE-2.0
  110.17 + *
  110.18 + * Unless required by applicable law or agreed to in writing,
  110.19 + * software distributed under the License is distributed on an
  110.20 + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
  110.21 + * KIND, either express or implied.  See the License for the
  110.22 + * specific language governing permissions and limitations
  110.23 + * under the License.
  110.24 + *
  110.25 +*/
  110.26 +
  110.27 +#ifndef SPLASHSCREEN_H
  110.28 +#define SPLASHSCREEN_H
  110.29 +
  110.30 +#include <QtCore>
  110.31 +#include <cplugin.h>
  110.32 +
  110.33 +class Splashscreen: public CPlugin {
  110.34 +    Q_OBJECT
  110.35 +public:
  110.36 +    explicit Splashscreen(Cordova *cordova);
  110.37 +
  110.38 +    virtual const QString fullName() override {
  110.39 +        return Splashscreen::fullID();
  110.40 +    }
  110.41 +
  110.42 +    virtual const QString shortName() override {
  110.43 +        return "SplashScreen";
  110.44 +    }
  110.45 +
  110.46 +    static const QString fullID() {
  110.47 +        return "SplashScreen";
  110.48 +    }
  110.49 +
  110.50 +public slots:
  110.51 +    void show(int, int);
  110.52 +    void hide(int, int);
  110.53 +};
  110.54 +
  110.55 +#endif // SPLASHSCREEN_H
   111.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   111.2 +++ b/Touchgui/plugins/org.apache.cordova.splashscreen/src/wp/SplashScreen.cs	Thu Jun 04 14:50:33 2015 +0200
   111.3 @@ -0,0 +1,167 @@
   111.4 +/*  
   111.5 +    Licensed under the Apache License, Version 2.0 (the "License");
   111.6 +    you may not use this file except in compliance with the License.
   111.7 +    You may obtain a copy of the License at
   111.8 +    
   111.9 +    http://www.apache.org/licenses/LICENSE-2.0
  111.10 +    
  111.11 +    Unless required by applicable law or agreed to in writing, software
  111.12 +    distributed under the License is distributed on an "AS IS" BASIS,
  111.13 +    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  111.14 +    See the License for the specific language governing permissions and
  111.15 +    limitations under the License.
  111.16 +*/
  111.17 +
  111.18 +using System;
  111.19 +using System.Net;
  111.20 +using System.Windows;
  111.21 +using System.Windows.Controls;
  111.22 +using System.Windows.Documents;
  111.23 +using System.Windows.Ink;
  111.24 +using System.Windows.Input;
  111.25 +using System.Windows.Media;
  111.26 +using System.Windows.Media.Animation;
  111.27 +using System.Windows.Shapes;
  111.28 +using Microsoft.Phone.Info;
  111.29 +using System.Windows.Controls.Primitives;
  111.30 +using System.Diagnostics;
  111.31 +using System.Windows.Media.Imaging;
  111.32 +using System.Windows.Resources;
  111.33 +using System.IO;
  111.34 +using System.Xml.Linq;
  111.35 +using System.Linq;
  111.36 +using System.Windows.Threading;
  111.37 +
  111.38 +namespace WPCordovaClassLib.Cordova.Commands
  111.39 +{
  111.40 +    /// <summary>
  111.41 +    /// Listens for changes to the state of the battery on the device.
  111.42 +    /// Currently only the "isPlugged" parameter available via native APIs.
  111.43 +    /// </summary>
  111.44 +    public class SplashScreen : BaseCommand
  111.45 +    {
  111.46 +        private Popup popup;
  111.47 +        private bool autohide = true;
  111.48 +
  111.49 +        private static bool WasShown = false;
  111.50 +
  111.51 +        public SplashScreen()
  111.52 +        {
  111.53 +            Image SplashScreen = new Image();
  111.54 +            BitmapImage splash_image = new BitmapImage();
  111.55 +            splash_image.SetSource(Application.GetResourceStream(new Uri(@"SplashScreenImage.jpg", UriKind.Relative)).Stream);
  111.56 +            SplashScreen.Source = splash_image;
  111.57 +
  111.58 +            // Instansiate the popup and set the Child property of Popup to SplashScreen
  111.59 +            popup = new Popup() {IsOpen = false, Child = SplashScreen };
  111.60 +            // Orient the popup accordingly
  111.61 +            popup.HorizontalAlignment = HorizontalAlignment.Stretch;
  111.62 +            popup.VerticalAlignment = VerticalAlignment.Center;
  111.63 +            
  111.64 +
  111.65 +            LoadConfigValues();
  111.66 +        }
  111.67 +
  111.68 +        public override void OnInit()
  111.69 +        {
  111.70 +            // we only want to autoload the first time a page is loaded.
  111.71 +            if (!WasShown)
  111.72 +            {
  111.73 +                WasShown = true;
  111.74 +                show();
  111.75 +            }
  111.76 +        }
  111.77 +
  111.78 +        void LoadConfigValues()
  111.79 +        {
  111.80 +            StreamResourceInfo streamInfo = Application.GetResourceStream(new Uri("config.xml", UriKind.Relative));
  111.81 +
  111.82 +            if (streamInfo != null)
  111.83 +            {
  111.84 +                StreamReader sr = new StreamReader(streamInfo.Stream);
  111.85 +                //This will Read Keys Collection for the xml file
  111.86 +                XDocument document = XDocument.Parse(sr.ReadToEnd());
  111.87 +
  111.88 +                var preferences = from results in document.Descendants()
  111.89 +                                  where (string)results.Attribute("name") == "AutoHideSplashScreen"
  111.90 +                                  select (string)results.Attribute("value") == "true";
  111.91 +
  111.92 +                if (preferences.Count() > 0 &&  preferences.First() == false)
  111.93 +                {
  111.94 +                    autohide = false;
  111.95 +                }
  111.96 +            }
  111.97 +        }
  111.98 +
  111.99 +        public void show(string options = null)
 111.100 +        {
 111.101 +            Deployment.Current.Dispatcher.BeginInvoke(() =>
 111.102 +            {
 111.103 +                if (popup.IsOpen)
 111.104 +                {
 111.105 +                    return;
 111.106 +                }
 111.107 +
 111.108 +                popup.Child.Opacity = 0;
 111.109 +
 111.110 +                Storyboard story = new Storyboard();
 111.111 +                DoubleAnimation animation;
 111.112 +                animation = new DoubleAnimation();
 111.113 +                animation.From = 0.0;
 111.114 +                animation.To = 1.0;
 111.115 +                animation.Duration = new Duration(TimeSpan.FromSeconds(0.2));
 111.116 +
 111.117 +                Storyboard.SetTarget(animation, popup.Child);
 111.118 +                Storyboard.SetTargetProperty(animation, new PropertyPath("Opacity"));
 111.119 +                story.Children.Add(animation);
 111.120 +
 111.121 +                Debug.WriteLine("Fading the splash screen in");
 111.122 +
 111.123 +                story.Begin();
 111.124 +
 111.125 +                popup.IsOpen = true;
 111.126 +
 111.127 +                if (autohide)
 111.128 +                {
 111.129 +                    DispatcherTimer timer = new DispatcherTimer();
 111.130 +                    timer.Tick += (object sender, EventArgs e) =>
 111.131 +                    {
 111.132 +                        hide();
 111.133 +                    };
 111.134 +                    timer.Interval = TimeSpan.FromSeconds(1.2);
 111.135 +                    timer.Start();
 111.136 +                }
 111.137 +            }); 
 111.138 +        }
 111.139 +
 111.140 +
 111.141 +        public void hide(string options = null)
 111.142 +        {
 111.143 +            Deployment.Current.Dispatcher.BeginInvoke(() =>
 111.144 +            {
 111.145 +                if (!popup.IsOpen)
 111.146 +                {
 111.147 +                    return;
 111.148 +                }
 111.149 +
 111.150 +                popup.Child.Opacity = 1.0;
 111.151 +
 111.152 +                Storyboard story = new Storyboard();
 111.153 +                DoubleAnimation animation;
 111.154 +                animation = new DoubleAnimation();
 111.155 +                animation.From = 1.0;
 111.156 +                animation.To = 0.0;
 111.157 +                animation.Duration = new Duration(TimeSpan.FromSeconds(0.4));
 111.158 +
 111.159 +                Storyboard.SetTarget(animation, popup.Child);
 111.160 +                Storyboard.SetTargetProperty(animation, new PropertyPath("Opacity"));
 111.161 +                story.Children.Add(animation);
 111.162 +                story.Completed += (object sender, EventArgs e) =>
 111.163 +                {
 111.164 +                    popup.IsOpen = false;
 111.165 +                };
 111.166 +                story.Begin();
 111.167 +            });
 111.168 +        }
 111.169 +    }
 111.170 +}
   112.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   112.2 +++ b/Touchgui/plugins/org.apache.cordova.splashscreen/tests/ios/CDVSplashScreenTest.xcworkspace/contents.xcworkspacedata	Thu Jun 04 14:50:33 2015 +0200
   112.3 @@ -0,0 +1,7 @@
   112.4 +<?xml version="1.0" encoding="UTF-8"?>
   112.5 +<Workspace
   112.6 +   version = "1.0">
   112.7 +   <FileRef
   112.8 +      location = "container:CDVSplashScreenTest/CDVSplashScreenTest.xcodeproj">
   112.9 +   </FileRef>
  112.10 +</Workspace>
   113.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   113.2 +++ b/Touchgui/plugins/org.apache.cordova.splashscreen/tests/ios/CDVSplashScreenTest.xcworkspace/xcshareddata/CDVSplashScreenTest.xccheckout	Thu Jun 04 14:50:33 2015 +0200
   113.3 @@ -0,0 +1,41 @@
   113.4 +<?xml version="1.0" encoding="UTF-8"?>
   113.5 +<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
   113.6 +<plist version="1.0">
   113.7 +<dict>
   113.8 +	<key>IDESourceControlProjectFavoriteDictionaryKey</key>
   113.9 +	<false/>
  113.10 +	<key>IDESourceControlProjectIdentifier</key>
  113.11 +	<string>6BE9AD73-1B9F-4362-98D7-DC631BEC6185</string>
  113.12 +	<key>IDESourceControlProjectName</key>
  113.13 +	<string>CDVSplashScreenTest</string>
  113.14 +	<key>IDESourceControlProjectOriginsDictionary</key>
  113.15 +	<dict>
  113.16 +		<key>BEF5A5D0FF64801E558286389440357A9233D7DB</key>
  113.17 +		<string>https://git-wip-us.apache.org/repos/asf/cordova-plugin-splashscreen.git</string>
  113.18 +	</dict>
  113.19 +	<key>IDESourceControlProjectPath</key>
  113.20 +	<string>tests/ios/CDVSplashScreenTest/CDVSplashScreenTest.xcodeproj</string>
  113.21 +	<key>IDESourceControlProjectRelativeInstallPathDictionary</key>
  113.22 +	<dict>
  113.23 +		<key>BEF5A5D0FF64801E558286389440357A9233D7DB</key>
  113.24 +		<string>../../../../..</string>
  113.25 +	</dict>
  113.26 +	<key>IDESourceControlProjectURL</key>
  113.27 +	<string>https://git-wip-us.apache.org/repos/asf/cordova-plugin-splashscreen.git</string>
  113.28 +	<key>IDESourceControlProjectVersion</key>
  113.29 +	<integer>111</integer>
  113.30 +	<key>IDESourceControlProjectWCCIdentifier</key>
  113.31 +	<string>BEF5A5D0FF64801E558286389440357A9233D7DB</string>
  113.32 +	<key>IDESourceControlProjectWCConfigurations</key>
  113.33 +	<array>
  113.34 +		<dict>
  113.35 +			<key>IDESourceControlRepositoryExtensionIdentifierKey</key>
  113.36 +			<string>public.vcs.git</string>
  113.37 +			<key>IDESourceControlWCCIdentifierKey</key>
  113.38 +			<string>BEF5A5D0FF64801E558286389440357A9233D7DB</string>
  113.39 +			<key>IDESourceControlWCCName</key>
  113.40 +			<string>cordova-plugin-splashscreen</string>
  113.41 +		</dict>
  113.42 +	</array>
  113.43 +</dict>
  113.44 +</plist>
   114.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   114.2 +++ b/Touchgui/plugins/org.apache.cordova.splashscreen/tests/ios/CDVSplashScreenTest.xcworkspace/xcshareddata/xcschemes/CordovaLib.xcscheme	Thu Jun 04 14:50:33 2015 +0200
   114.3 @@ -0,0 +1,77 @@
   114.4 +<?xml version="1.0" encoding="UTF-8"?>
   114.5 +<Scheme
   114.6 +   LastUpgradeVersion = "0600"
   114.7 +   version = "1.3">
   114.8 +   <BuildAction
   114.9 +      parallelizeBuildables = "YES"
  114.10 +      buildImplicitDependencies = "YES">
  114.11 +      <BuildActionEntries>
  114.12 +         <BuildActionEntry
  114.13 +            buildForTesting = "YES"
  114.14 +            buildForRunning = "YES"
  114.15 +            buildForProfiling = "YES"
  114.16 +            buildForArchiving = "YES"
  114.17 +            buildForAnalyzing = "YES">
  114.18 +            <BuildableReference
  114.19 +               BuildableIdentifier = "primary"
  114.20 +               BlueprintIdentifier = "D2AAC07D0554694100DB518D"
  114.21 +               BuildableName = "libCordova.a"
  114.22 +               BlueprintName = "CordovaLib"
  114.23 +               ReferencedContainer = "container:node_modules/cordova-ios/CordovaLib/CordovaLib.xcodeproj">
  114.24 +            </BuildableReference>
  114.25 +         </BuildActionEntry>
  114.26 +      </BuildActionEntries>
  114.27 +   </BuildAction>
  114.28 +   <TestAction
  114.29 +      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
  114.30 +      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
  114.31 +      shouldUseLaunchSchemeArgsEnv = "YES"
  114.32 +      buildConfiguration = "Debug">
  114.33 +      <Testables>
  114.34 +      </Testables>
  114.35 +   </TestAction>
  114.36 +   <LaunchAction
  114.37 +      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
  114.38 +      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
  114.39 +      launchStyle = "0"
  114.40 +      useCustomWorkingDirectory = "NO"
  114.41 +      buildConfiguration = "Debug"
  114.42 +      ignoresPersistentStateOnLaunch = "NO"
  114.43 +      debugDocumentVersioning = "YES"
  114.44 +      allowLocationSimulation = "YES">
  114.45 +      <MacroExpansion>
  114.46 +         <BuildableReference
  114.47 +            BuildableIdentifier = "primary"
  114.48 +            BlueprintIdentifier = "D2AAC07D0554694100DB518D"
  114.49 +            BuildableName = "libCordova.a"
  114.50 +            BlueprintName = "CordovaLib"
  114.51 +            ReferencedContainer = "container:node_modules/cordova-ios/CordovaLib/CordovaLib.xcodeproj">
  114.52 +         </BuildableReference>
  114.53 +      </MacroExpansion>
  114.54 +      <AdditionalOptions>
  114.55 +      </AdditionalOptions>
  114.56 +   </LaunchAction>
  114.57 +   <ProfileAction
  114.58 +      shouldUseLaunchSchemeArgsEnv = "YES"
  114.59 +      savedToolIdentifier = ""
  114.60 +      useCustomWorkingDirectory = "NO"
  114.61 +      buildConfiguration = "Release"
  114.62 +      debugDocumentVersioning = "YES">
  114.63 +      <MacroExpansion>
  114.64 +         <BuildableReference
  114.65 +            BuildableIdentifier = "primary"
  114.66 +            BlueprintIdentifier = "D2AAC07D0554694100DB518D"
  114.67 +            BuildableName = "libCordova.a"
  114.68 +            BlueprintName = "CordovaLib"
  114.69 +            ReferencedContainer = "container:node_modules/cordova-ios/CordovaLib/CordovaLib.xcodeproj">
  114.70 +         </BuildableReference>
  114.71 +      </MacroExpansion>
  114.72 +   </ProfileAction>
  114.73 +   <AnalyzeAction
  114.74 +      buildConfiguration = "Debug">
  114.75 +   </AnalyzeAction>
  114.76 +   <ArchiveAction
  114.77 +      buildConfiguration = "Release"
  114.78 +      revealArchiveInOrganizer = "YES">
  114.79 +   </ArchiveAction>
  114.80 +</Scheme>
   115.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   115.2 +++ b/Touchgui/plugins/org.apache.cordova.splashscreen/tests/ios/CDVSplashScreenTest/CDVSplashScreenLibTests/ImageNameTest.m	Thu Jun 04 14:50:33 2015 +0200
   115.3 @@ -0,0 +1,702 @@
   115.4 +/*
   115.5 + Licensed to the Apache Software Foundation (ASF) under one
   115.6 + or more contributor license agreements.  See the NOTICE file
   115.7 + distributed with this work for additional information
   115.8 + regarding copyright ownership.  The ASF licenses this file
   115.9 + to you under the Apache License, Version 2.0 (the
  115.10 + "License"); you may not use this file except in compliance
  115.11 + with the License.  You may obtain a copy of the License at
  115.12 + 
  115.13 + http://www.apache.org/licenses/LICENSE-2.0
  115.14 + 
  115.15 + Unless required by applicable law or agreed to in writing,
  115.16 + software distributed under the License is distributed on an
  115.17 + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
  115.18 + KIND, either express or implied.  See the License for the
  115.19 + specific language governing permissions and limitations
  115.20 + under the License.
  115.21 + */
  115.22 +
  115.23 +#import <UIKit/UIKit.h>
  115.24 +#import <XCTest/XCTest.h>
  115.25 +#import <Cordova/CDVScreenOrientationDelegate.h>
  115.26 +#import "CDVSplashScreen.h"
  115.27 +#import "ImageNameTestDelegates.h"
  115.28 +
  115.29 +const CDV_iOSDevice CDV_iOSDeviceZero = { 0, 0, 0, 0, 0, 0 };
  115.30 +
  115.31 +@interface ImageNameTest : XCTestCase
  115.32 +
  115.33 +@property (nonatomic, strong) CDVSplashScreen* plugin;
  115.34 +
  115.35 +@end
  115.36 +
  115.37 +@interface CDVSplashScreen ()
  115.38 +
  115.39 +// expose private interface
  115.40 +- (NSString*)getImageName:(UIInterfaceOrientation)currentOrientation delegate:(id<CDVScreenOrientationDelegate>)orientationDelegate device:(CDV_iOSDevice)device;
  115.41 +
  115.42 +@end
  115.43 +
  115.44 +@implementation ImageNameTest
  115.45 +
  115.46 +- (void)setUp {
  115.47 +    [super setUp];
  115.48 +    // Put setup code here. This method is called before the invocation of each test method in the class.
  115.49 +    
  115.50 +    self.plugin = [[CDVSplashScreen alloc] init];
  115.51 +}
  115.52 +
  115.53 +- (void)tearDown {
  115.54 +    // Put teardown code here. This method is called after the invocation of each test method in the class.
  115.55 +    [super tearDown];
  115.56 +}
  115.57 +
  115.58 +- (void) orientationHelper:(id<CDVScreenOrientationDelegate>)delegate expectedImageNameDictionary:(NSDictionary*)expectedImageNameDictionary device:(CDV_iOSDevice)device{
  115.59 +    
  115.60 +    NSString* name = nil;
  115.61 +    NSString* expectedImageName = nil;
  115.62 +    UIInterfaceOrientation currentOrientation;
  115.63 +    NSString* deviceName = device.iPad? @"iPad" : device.iPhone6Plus? @"iPhone6Plus": device.iPhone6? @"iPhone6": device.iPhone5? @"iPhone5" : @"iPhone";
  115.64 +    
  115.65 +    // LandscapeLeft, should always return expectedImageName
  115.66 +    currentOrientation = UIInterfaceOrientationLandscapeLeft;
  115.67 +    name = [self.plugin getImageName:currentOrientation delegate:delegate device:device];
  115.68 +    expectedImageName = [expectedImageNameDictionary objectForKey:@"landscapeLeft"];
  115.69 +    XCTAssertTrue([expectedImageName isEqualToString:name], @"%@ - %@ failed (%@)", @"Landscape", deviceName, name);
  115.70 +    
  115.71 +    // LandscapeRight - should always return expectedImageName
  115.72 +    currentOrientation = UIInterfaceOrientationLandscapeRight;
  115.73 +    name = [self.plugin getImageName:currentOrientation delegate:delegate device:device];
  115.74 +    expectedImageName = [expectedImageNameDictionary objectForKey:@"landscapeRight"];
  115.75 +    XCTAssertTrue([expectedImageName isEqualToString:name], @"%@ - %@ failed (%@)", @"Landscape", deviceName, name);
  115.76 +    
  115.77 +    // Portrait - should always return expectedImageName
  115.78 +    currentOrientation = UIInterfaceOrientationPortrait;
  115.79 +    name = [self.plugin getImageName:currentOrientation delegate:delegate device:device];
  115.80 +    expectedImageName = [expectedImageNameDictionary objectForKey:@"portrait"];
  115.81 +    XCTAssertTrue([expectedImageName isEqualToString:name], @"%@ - %@ failed (%@)", @"Portrait", deviceName, name);
  115.82 +    
  115.83 +    // PortraitUpsideDown - should always return expectedImageName
  115.84 +    currentOrientation = UIInterfaceOrientationPortraitUpsideDown;
  115.85 +    name = [self.plugin getImageName:currentOrientation delegate:delegate device:device];
  115.86 +    expectedImageName = [expectedImageNameDictionary objectForKey:@"portraitUpsideDown"];
  115.87 +    XCTAssertTrue([expectedImageName isEqualToString:name], @"%@ - %@ failed (%@)", @"Portrait", deviceName, name);
  115.88 +}
  115.89 +
  115.90 +- (void)testiPadOrientation {
  115.91 +    
  115.92 +    CDV_iOSDevice device = CDV_iOSDeviceZero;
  115.93 +    device.iPad = YES;
  115.94 +    
  115.95 +    // One orientation
  115.96 +    
  115.97 +    PortraitOnly* delegate = [[PortraitOnly alloc] init];
  115.98 +    [self orientationHelper:delegate expectedImageNameDictionary:@{
  115.99 +                                                                    @"landscapeLeft" : @"Default-Portrait",
 115.100 +                                                                    @"landscapeRight" : @"Default-Portrait",
 115.101 +                                                                    @"portrait" : @"Default-Portrait",
 115.102 +                                                                    @"portraitUpsideDown" : @"Default-Portrait"
 115.103 +                                                                    }
 115.104 +                     device:device];
 115.105 +    
 115.106 +    PortraitUpsideDownOnly* delegate2 = [[PortraitUpsideDownOnly alloc] init];
 115.107 +    [self orientationHelper:delegate2 expectedImageNameDictionary:@{
 115.108 +                                                                   @"landscapeLeft" : @"Default-Portrait",
 115.109 +                                                                   @"landscapeRight" : @"Default-Portrait",
 115.110 +                                                                   @"portrait" : @"Default-Portrait",
 115.111 +                                                                   @"portraitUpsideDown" : @"Default-Portrait"
 115.112 +                                                                   }
 115.113 +                     device:device];
 115.114 +    
 115.115 +    LandscapeLeftOnly* delegate3 = [[LandscapeLeftOnly alloc] init];
 115.116 +    [self orientationHelper:delegate3 expectedImageNameDictionary:@{
 115.117 +                                                                   @"landscapeLeft" : @"Default-Landscape",
 115.118 +                                                                   @"landscapeRight" : @"Default-Landscape",
 115.119 +                                                                   @"portrait" : @"Default-Landscape",
 115.120 +                                                                   @"portraitUpsideDown" : @"Default-Landscape"
 115.121 +                                                                   }
 115.122 +                     device:device];
 115.123 +    
 115.124 +    LandscapeRightOnly* delegate4 = [[LandscapeRightOnly alloc] init];
 115.125 +    [self orientationHelper:delegate4 expectedImageNameDictionary:@{
 115.126 +                                                                    @"landscapeLeft" : @"Default-Landscape",
 115.127 +                                                                    @"landscapeRight" : @"Default-Landscape",
 115.128 +                                                                    @"portrait" : @"Default-Landscape",
 115.129 +                                                                    @"portraitUpsideDown" : @"Default-Landscape"
 115.130 +                                                                    }
 115.131 +                     device:device];
 115.132 +
 115.133 +    // All Portrait
 115.134 +
 115.135 +    AllPortraitOnly* delegate5 = [[AllPortraitOnly alloc] init];
 115.136 +    [self orientationHelper:delegate5 expectedImageNameDictionary:@{
 115.137 +                                                                    @"landscapeLeft" : @"Default-Portrait",
 115.138 +                                                                    @"landscapeRight" : @"Default-Portrait",
 115.139 +                                                                    @"portrait" : @"Default-Portrait",
 115.140 +                                                                    @"portraitUpsideDown" : @"Default-Portrait"
 115.141 +                                                                    }
 115.142 +                     device:device];
 115.143 +
 115.144 +    // All Landscape
 115.145 +    
 115.146 +    AllLandscapeOnly* delegate6 = [[AllLandscapeOnly alloc] init];
 115.147 +    [self orientationHelper:delegate6 expectedImageNameDictionary:@{
 115.148 +                                                                    @"landscapeLeft" : @"Default-Landscape",
 115.149 +                                                                    @"landscapeRight" : @"Default-Landscape",
 115.150 +                                                                    @"portrait" : @"Default-Landscape",
 115.151 +                                                                    @"portraitUpsideDown" : @"Default-Landscape"
 115.152 +                                                                    }
 115.153 +                     device:device];
 115.154 +    
 115.155 +    
 115.156 +    // All orientations
 115.157 +    
 115.158 +    AllOrientations* delegate7 = [[AllOrientations alloc] init];
 115.159 +    [self orientationHelper:delegate7 expectedImageNameDictionary:@{
 115.160 +                                                                    @"landscapeLeft" : @"Default-Landscape",
 115.161 +                                                                    @"landscapeRight" : @"Default-Landscape",
 115.162 +                                                                    @"portrait" : @"Default-Portrait",
 115.163 +                                                                    @"portraitUpsideDown" : @"Default-Portrait"
 115.164 +                                                                    }
 115.165 +                     device:device];
 115.166 +
 115.167 +    // Portrait and Landscape Left
 115.168 +    
 115.169 +    PortraitAndLandscapeLeftOnly* delegate8 = [[PortraitAndLandscapeLeftOnly alloc] init];
 115.170 +    [self orientationHelper:delegate8 expectedImageNameDictionary:@{
 115.171 +                                                                    @"landscapeLeft" : @"Default-Landscape",
 115.172 +                                                                    @"landscapeRight" : @"Default-Landscape",
 115.173 +                                                                    @"portrait" : @"Default-Portrait",
 115.174 +                                                                    @"portraitUpsideDown" : @"Default-Portrait"
 115.175 +                                                                    }
 115.176 +                     device:device];
 115.177 +
 115.178 +    // Portrait and Landscape Right
 115.179 +    
 115.180 +    PortraitAndLandscapeRightOnly* delegate9 = [[PortraitAndLandscapeRightOnly alloc] init];
 115.181 +    [self orientationHelper:delegate9 expectedImageNameDictionary:@{
 115.182 +                                                                    @"landscapeLeft" : @"Default-Landscape",
 115.183 +                                                                    @"landscapeRight" : @"Default-Landscape",
 115.184 +                                                                    @"portrait" : @"Default-Portrait",
 115.185 +                                                                    @"portraitUpsideDown" : @"Default-Portrait"
 115.186 +                                                                    }
 115.187 +                     device:device];
 115.188 +
 115.189 +    // PortraitUpsideDown and Landscape Left
 115.190 +    
 115.191 +    PortraitUpsideDownAndLandscapeLeftOnly* delegate10 = [[PortraitUpsideDownAndLandscapeLeftOnly alloc] init];
 115.192 +    [self orientationHelper:delegate10 expectedImageNameDictionary:@{
 115.193 +                                                                    @"landscapeLeft" : @"Default-Landscape",
 115.194 +                                                                    @"landscapeRight" : @"Default-Landscape",
 115.195 +                                                                    @"portrait" : @"Default-Portrait",
 115.196 +                                                                    @"portraitUpsideDown" : @"Default-Portrait"
 115.197 +                                                                    }
 115.198 +                     device:device];
 115.199 +
 115.200 +    // PortraitUpsideDown and Landscape Right
 115.201 +    
 115.202 +    PortraitUpsideDownAndLandscapeRightOnly* delegate11 = [[PortraitUpsideDownAndLandscapeRightOnly alloc] init];
 115.203 +    [self orientationHelper:delegate11 expectedImageNameDictionary:@{
 115.204 +                                                                     @"landscapeLeft" : @"Default-Landscape",
 115.205 +                                                                     @"landscapeRight" : @"Default-Landscape",
 115.206 +                                                                     @"portrait" : @"Default-Portrait",
 115.207 +                                                                     @"portraitUpsideDown" : @"Default-Portrait"
 115.208 +                                                                     }
 115.209 +                     device:device];
 115.210 +}
 115.211 +
 115.212 +- (void)testiPhoneOrientation {
 115.213 +    
 115.214 +    CDV_iOSDevice device = CDV_iOSDeviceZero;
 115.215 +    device.iPhone = YES;
 115.216 +    
 115.217 +    // One orientation
 115.218 +    
 115.219 +    PortraitOnly* delegate = [[PortraitOnly alloc] init];
 115.220 +    [self orientationHelper:delegate expectedImageNameDictionary:@{
 115.221 +                                                                    @"landscapeLeft" : @"Default",
 115.222 +                                                                    @"landscapeRight" : @"Default",
 115.223 +                                                                    @"portrait" : @"Default",
 115.224 +                                                                    @"portraitUpsideDown" : @"Default"
 115.225 +                                                                    }
 115.226 +                     device:device];
 115.227 +    
 115.228 +    PortraitUpsideDownOnly* delegate2 = [[PortraitUpsideDownOnly alloc] init];
 115.229 +    [self orientationHelper:delegate2 expectedImageNameDictionary:@{
 115.230 +                                                                    @"landscapeLeft" : @"Default",
 115.231 +                                                                    @"landscapeRight" : @"Default",
 115.232 +                                                                    @"portrait" : @"Default",
 115.233 +                                                                    @"portraitUpsideDown" : @"Default"
 115.234 +                                                                    }
 115.235 +                     device:device];
 115.236 +    
 115.237 +    LandscapeLeftOnly* delegate3 = [[LandscapeLeftOnly alloc] init];
 115.238 +    [self orientationHelper:delegate3 expectedImageNameDictionary:@{
 115.239 +                                                                    @"landscapeLeft" : @"Default",
 115.240 +                                                                    @"landscapeRight" : @"Default",
 115.241 +                                                                    @"portrait" : @"Default",
 115.242 +                                                                    @"portraitUpsideDown" : @"Default"
 115.243 +                                                                    }
 115.244 +                     device:device];
 115.245 +    
 115.246 +    LandscapeRightOnly* delegate4 = [[LandscapeRightOnly alloc] init];
 115.247 +    [self orientationHelper:delegate4 expectedImageNameDictionary:@{
 115.248 +                                                                    @"landscapeLeft" : @"Default",
 115.249 +                                                                    @"landscapeRight" : @"Default",
 115.250 +                                                                    @"portrait" : @"Default",
 115.251 +                                                                    @"portraitUpsideDown" : @"Default"
 115.252 +                                                                    }
 115.253 +                     device:device];
 115.254 +    
 115.255 +    // All Portrait
 115.256 +    
 115.257 +    AllPortraitOnly* delegate5 = [[AllPortraitOnly alloc] init];
 115.258 +    [self orientationHelper:delegate5 expectedImageNameDictionary:@{
 115.259 +                                                                    @"landscapeLeft" : @"Default",
 115.260 +                                                                    @"landscapeRight" : @"Default",
 115.261 +                                                                    @"portrait" : @"Default",
 115.262 +                                                                    @"portraitUpsideDown" : @"Default"
 115.263 +                                                                    }
 115.264 +                     device:device];
 115.265 +    
 115.266 +    // All Landscape
 115.267 +    
 115.268 +    AllLandscapeOnly* delegate6 = [[AllLandscapeOnly alloc] init];
 115.269 +    [self orientationHelper:delegate6 expectedImageNameDictionary:@{
 115.270 +                                                                    @"landscapeLeft" : @"Default",
 115.271 +                                                                    @"landscapeRight" : @"Default",
 115.272 +                                                                    @"portrait" : @"Default",
 115.273 +                                                                    @"portraitUpsideDown" : @"Default"
 115.274 +                                                                    }
 115.275 +                     device:device];
 115.276 +    
 115.277 +    
 115.278 +    // All orientations
 115.279 +    
 115.280 +    AllOrientations* delegate7 = [[AllOrientations alloc] init];
 115.281 +    [self orientationHelper:delegate7 expectedImageNameDictionary:@{
 115.282 +                                                                    @"landscapeLeft" : @"Default",
 115.283 +                                                                    @"landscapeRight" : @"Default",
 115.284 +                                                                    @"portrait" : @"Default",
 115.285 +                                                                    @"portraitUpsideDown" : @"Default"
 115.286 +                                                                    }
 115.287 +                     device:device];
 115.288 +    
 115.289 +    // Portrait and Landscape Left
 115.290 +    
 115.291 +    PortraitAndLandscapeLeftOnly* delegate8 = [[PortraitAndLandscapeLeftOnly alloc] init];
 115.292 +    [self orientationHelper:delegate8 expectedImageNameDictionary:@{
 115.293 +                                                                    @"landscapeLeft" : @"Default",
 115.294 +                                                                    @"landscapeRight" : @"Default",
 115.295 +                                                                    @"portrait" : @"Default",
 115.296 +                                                                    @"portraitUpsideDown" : @"Default"
 115.297 +                                                                    }
 115.298 +                     device:device];
 115.299 +    
 115.300 +    // Portrait and Landscape Right
 115.301 +    
 115.302 +    PortraitAndLandscapeRightOnly* delegate9 = [[PortraitAndLandscapeRightOnly alloc] init];
 115.303 +    [self orientationHelper:delegate9 expectedImageNameDictionary:@{
 115.304 +                                                                    @"landscapeLeft" : @"Default",
 115.305 +                                                                    @"landscapeRight" : @"Default",
 115.306 +                                                                    @"portrait" : @"Default",
 115.307 +                                                                    @"portraitUpsideDown" : @"Default"
 115.308 +                                                                    }
 115.309 +                     device:device];
 115.310 +    
 115.311 +    // PortraitUpsideDown and Landscape Left
 115.312 +    
 115.313 +    PortraitUpsideDownAndLandscapeLeftOnly* delegate10 = [[PortraitUpsideDownAndLandscapeLeftOnly alloc] init];
 115.314 +    [self orientationHelper:delegate10 expectedImageNameDictionary:@{
 115.315 +                                                                     @"landscapeLeft" : @"Default",
 115.316 +                                                                     @"landscapeRight" : @"Default",
 115.317 +                                                                     @"portrait" : @"Default",
 115.318 +                                                                     @"portraitUpsideDown" : @"Default"
 115.319 +                                                                     }
 115.320 +                     device:device];
 115.321 +    
 115.322 +    // PortraitUpsideDown and Landscape Right
 115.323 +    
 115.324 +    PortraitUpsideDownAndLandscapeRightOnly* delegate11 = [[PortraitUpsideDownAndLandscapeRightOnly alloc] init];
 115.325 +    [self orientationHelper:delegate11 expectedImageNameDictionary:@{
 115.326 +                                                                     @"landscapeLeft" : @"Default",
 115.327 +                                                                     @"landscapeRight" : @"Default",
 115.328 +                                                                     @"portrait" : @"Default",
 115.329 +                                                                     @"portraitUpsideDown" : @"Default"
 115.330 +                                                                     }
 115.331 +                     device:device];
 115.332 +}
 115.333 +
 115.334 +- (void)testiPhone5Orientation {
 115.335 +    
 115.336 +    CDV_iOSDevice device = CDV_iOSDeviceZero;
 115.337 +    device.iPhone = YES;
 115.338 +    device.iPhone5 = YES;
 115.339 +    
 115.340 +    // One orientation
 115.341 +    
 115.342 +    PortraitOnly* delegate = [[PortraitOnly alloc] init];
 115.343 +    [self orientationHelper:delegate expectedImageNameDictionary:@{
 115.344 +                                                                   @"landscapeLeft" : @"Default-568h",
 115.345 +                                                                   @"landscapeRight" : @"Default-568h",
 115.346 +                                                                   @"portrait" : @"Default-568h",
 115.347 +                                                                   @"portraitUpsideDown" : @"Default-568h"
 115.348 +                                                                   }
 115.349 +                     device:device];
 115.350 +    
 115.351 +    PortraitUpsideDownOnly* delegate2 = [[PortraitUpsideDownOnly alloc] init];
 115.352 +    [self orientationHelper:delegate2 expectedImageNameDictionary:@{
 115.353 +                                                                    @"landscapeLeft" : @"Default-568h",
 115.354 +                                                                    @"landscapeRight" : @"Default-568h",
 115.355 +                                                                    @"portrait" : @"Default-568h",
 115.356 +                                                                    @"portraitUpsideDown" : @"Default-568h"
 115.357 +                                                                    }
 115.358 +                     device:device];
 115.359 +    
 115.360 +    LandscapeLeftOnly* delegate3 = [[LandscapeLeftOnly alloc] init];
 115.361 +    [self orientationHelper:delegate3 expectedImageNameDictionary:@{
 115.362 +                                                                    @"landscapeLeft" : @"Default-568h",
 115.363 +                                                                    @"landscapeRight" : @"Default-568h",
 115.364 +                                                                    @"portrait" : @"Default-568h",
 115.365 +                                                                    @"portraitUpsideDown" : @"Default-568h"
 115.366 +                                                                    }
 115.367 +                     device:device];
 115.368 +    
 115.369 +    LandscapeRightOnly* delegate4 = [[LandscapeRightOnly alloc] init];
 115.370 +    [self orientationHelper:delegate4 expectedImageNameDictionary:@{
 115.371 +                                                                    @"landscapeLeft" : @"Default-568h",
 115.372 +                                                                    @"landscapeRight" : @"Default-568h",
 115.373 +                                                                    @"portrait" : @"Default-568h",
 115.374 +                                                                    @"portraitUpsideDown" : @"Default-568h"
 115.375 +                                                                    }
 115.376 +                     device:device];
 115.377 +    
 115.378 +    // All Portrait
 115.379 +    
 115.380 +    AllPortraitOnly* delegate5 = [[AllPortraitOnly alloc] init];
 115.381 +    [self orientationHelper:delegate5 expectedImageNameDictionary:@{
 115.382 +                                                                    @"landscapeLeft" : @"Default-568h",
 115.383 +                                                                    @"landscapeRight" : @"Default-568h",
 115.384 +                                                                    @"portrait" : @"Default-568h",
 115.385 +                                                                    @"portraitUpsideDown" : @"Default-568h"
 115.386 +                                                                    }
 115.387 +                     device:device];
 115.388 +    
 115.389 +    // All Landscape
 115.390 +    
 115.391 +    AllLandscapeOnly* delegate6 = [[AllLandscapeOnly alloc] init];
 115.392 +    [self orientationHelper:delegate6 expectedImageNameDictionary:@{
 115.393 +                                                                    @"landscapeLeft" : @"Default-568h",
 115.394 +                                                                    @"landscapeRight" : @"Default-568h",
 115.395 +                                                                    @"portrait" : @"Default-568h",
 115.396 +                                                                    @"portraitUpsideDown" : @"Default-568h"
 115.397 +                                                                    }
 115.398 +                     device:device];
 115.399 +    
 115.400 +    
 115.401 +    // All orientations
 115.402 +    
 115.403 +    AllOrientations* delegate7 = [[AllOrientations alloc] init];
 115.404 +    [self orientationHelper:delegate7 expectedImageNameDictionary:@{
 115.405 +                                                                    @"landscapeLeft" : @"Default-568h",
 115.406 +                                                                    @"landscapeRight" : @"Default-568h",
 115.407 +                                                                    @"portrait" : @"Default-568h",
 115.408 +                                                                    @"portraitUpsideDown" : @"Default-568h"
 115.409 +                                                                    }
 115.410 +                     device:device];
 115.411 +    
 115.412 +    // Portrait and Landscape Left
 115.413 +    
 115.414 +    PortraitAndLandscapeLeftOnly* delegate8 = [[PortraitAndLandscapeLeftOnly alloc] init];
 115.415 +    [self orientationHelper:delegate8 expectedImageNameDictionary:@{
 115.416 +                                                                    @"landscapeLeft" : @"Default-568h",
 115.417 +                                                                    @"landscapeRight" : @"Default-568h",
 115.418 +                                                                    @"portrait" : @"Default-568h",
 115.419 +                                                                    @"portraitUpsideDown" : @"Default-568h"
 115.420 +                                                                    }
 115.421 +                     device:device];
 115.422 +    
 115.423 +    // Portrait and Landscape Right
 115.424 +    
 115.425 +    PortraitAndLandscapeRightOnly* delegate9 = [[PortraitAndLandscapeRightOnly alloc] init];
 115.426 +    [self orientationHelper:delegate9 expectedImageNameDictionary:@{
 115.427 +                                                                    @"landscapeLeft" : @"Default-568h",
 115.428 +                                                                    @"landscapeRight" : @"Default-568h",
 115.429 +                                                                    @"portrait" : @"Default-568h",
 115.430 +                                                                    @"portraitUpsideDown" : @"Default-568h"
 115.431 +                                                                    }
 115.432 +                     device:device];
 115.433 +    
 115.434 +    // PortraitUpsideDown and Landscape Left
 115.435 +    
 115.436 +    PortraitUpsideDownAndLandscapeLeftOnly* delegate10 = [[PortraitUpsideDownAndLandscapeLeftOnly alloc] init];
 115.437 +    [self orientationHelper:delegate10 expectedImageNameDictionary:@{
 115.438 +                                                                     @"landscapeLeft" : @"Default-568h",
 115.439 +                                                                     @"landscapeRight" : @"Default-568h",
 115.440 +                                                                     @"portrait" : @"Default-568h",
 115.441 +                                                                     @"portraitUpsideDown" : @"Default-568h"
 115.442 +                                                                     }
 115.443 +                     device:device];
 115.444 +    
 115.445 +    // PortraitUpsideDown and Landscape Right
 115.446 +    
 115.447 +    PortraitUpsideDownAndLandscapeRightOnly* delegate11 = [[PortraitUpsideDownAndLandscapeRightOnly alloc] init];
 115.448 +    [self orientationHelper:delegate11 expectedImageNameDictionary:@{
 115.449 +                                                                     @"landscapeLeft" : @"Default-568h",
 115.450 +                                                                     @"landscapeRight" : @"Default-568h",
 115.451 +                                                                     @"portrait" : @"Default-568h",
 115.452 +                                                                     @"portraitUpsideDown" : @"Default-568h"
 115.453 +                                                                     }
 115.454 +                     device:device];
 115.455 +}
 115.456 +
 115.457 +- (void)testiPhone6Orientation {
 115.458 +    
 115.459 +    CDV_iOSDevice device = CDV_iOSDeviceZero;
 115.460 +    device.iPhone = YES;
 115.461 +    device.iPhone6 = YES;
 115.462 +    
 115.463 +    // One orientation
 115.464 +    
 115.465 +    PortraitOnly* delegate = [[PortraitOnly alloc] init];
 115.466 +    [self orientationHelper:delegate expectedImageNameDictionary:@{
 115.467 +                                                                   @"landscapeLeft" : @"Default-667h",
 115.468 +                                                                   @"landscapeRight" : @"Default-667h",
 115.469 +                                                                   @"portrait" : @"Default-667h",
 115.470 +                                                                   @"portraitUpsideDown" : @"Default-667h"
 115.471 +                                                                   }
 115.472 +                     device:device];
 115.473 +    
 115.474 +    PortraitUpsideDownOnly* delegate2 = [[PortraitUpsideDownOnly alloc] init];
 115.475 +    [self orientationHelper:delegate2 expectedImageNameDictionary:@{
 115.476 +                                                                    @"landscapeLeft" : @"Default-667h",
 115.477 +                                                                    @"landscapeRight" : @"Default-667h",
 115.478 +                                                                    @"portrait" : @"Default-667h",
 115.479 +                                                                    @"portraitUpsideDown" : @"Default-667h"
 115.480 +                                                                    }
 115.481 +                     device:device];
 115.482 +    
 115.483 +    LandscapeLeftOnly* delegate3 = [[LandscapeLeftOnly alloc] init];
 115.484 +    [self orientationHelper:delegate3 expectedImageNameDictionary:@{
 115.485 +                                                                    @"landscapeLeft" : @"Default-667h",
 115.486 +                                                                    @"landscapeRight" : @"Default-667h",
 115.487 +                                                                    @"portrait" : @"Default-667h",
 115.488 +                                                                    @"portraitUpsideDown" : @"Default-667h"
 115.489 +                                                                    }
 115.490 +                     device:device];
 115.491 +    
 115.492 +    LandscapeRightOnly* delegate4 = [[LandscapeRightOnly alloc] init];
 115.493 +    [self orientationHelper:delegate4 expectedImageNameDictionary:@{
 115.494 +                                                                    @"landscapeLeft" : @"Default-667h",
 115.495 +                                                                    @"landscapeRight" : @"Default-667h",
 115.496 +                                                                    @"portrait" : @"Default-667h",
 115.497 +                                                                    @"portraitUpsideDown" : @"Default-667h"
 115.498 +                                                                    }
 115.499 +                     device:device];
 115.500 +    
 115.501 +    // All Portrait
 115.502 +    
 115.503 +    AllPortraitOnly* delegate5 = [[AllPortraitOnly alloc] init];
 115.504 +    [self orientationHelper:delegate5 expectedImageNameDictionary:@{
 115.505 +                                                                    @"landscapeLeft" : @"Default-667h",
 115.506 +                                                                    @"landscapeRight" : @"Default-667h",
 115.507 +                                                                    @"portrait" : @"Default-667h",
 115.508 +                                                                    @"portraitUpsideDown" : @"Default-667h"
 115.509 +                                                                    }
 115.510 +                     device:device];
 115.511 +    
 115.512 +    // All Landscape
 115.513 +    
 115.514 +    AllLandscapeOnly* delegate6 = [[AllLandscapeOnly alloc] init];
 115.515 +    [self orientationHelper:delegate6 expectedImageNameDictionary:@{
 115.516 +                                                                    @"landscapeLeft" : @"Default-667h",
 115.517 +                                                                    @"landscapeRight" : @"Default-667h",
 115.518 +                                                                    @"portrait" : @"Default-667h",
 115.519 +                                                                    @"portraitUpsideDown" : @"Default-667h"
 115.520 +                                                                    }
 115.521 +                     device:device];
 115.522 +    
 115.523 +    
 115.524 +    // All orientations
 115.525 +    
 115.526 +    AllOrientations* delegate7 = [[AllOrientations alloc] init];
 115.527 +    [self orientationHelper:delegate7 expectedImageNameDictionary:@{
 115.528 +                                                                    @"landscapeLeft" : @"Default-667h",
 115.529 +                                                                    @"landscapeRight" : @"Default-667h",
 115.530 +                                                                    @"portrait" : @"Default-667h",
 115.531 +                                                                    @"portraitUpsideDown" : @"Default-667h"
 115.532 +                                                                    }
 115.533 +                     device:device];
 115.534 +    
 115.535 +    // Portrait and Landscape Left
 115.536 +    
 115.537 +    PortraitAndLandscapeLeftOnly* delegate8 = [[PortraitAndLandscapeLeftOnly alloc] init];
 115.538 +    [self orientationHelper:delegate8 expectedImageNameDictionary:@{
 115.539 +                                                                    @"landscapeLeft" : @"Default-667h",
 115.540 +                                                                    @"landscapeRight" : @"Default-667h",
 115.541 +                                                                    @"portrait" : @"Default-667h",
 115.542 +                                                                    @"portraitUpsideDown" : @"Default-667h"
 115.543 +                                                                    }
 115.544 +                     device:device];
 115.545 +    
 115.546 +    // Portrait and Landscape Right
 115.547 +    
 115.548 +    PortraitAndLandscapeRightOnly* delegate9 = [[PortraitAndLandscapeRightOnly alloc] init];
 115.549 +    [self orientationHelper:delegate9 expectedImageNameDictionary:@{
 115.550 +                                                                    @"landscapeLeft" : @"Default-667h",
 115.551 +                                                                    @"landscapeRight" : @"Default-667h",
 115.552 +                                                                    @"portrait" : @"Default-667h",
 115.553 +                                                                    @"portraitUpsideDown" : @"Default-667h"
 115.554 +                                                                    }
 115.555 +                     device:device];
 115.556 +    
 115.557 +    // PortraitUpsideDown and Landscape Left
 115.558 +    
 115.559 +    PortraitUpsideDownAndLandscapeLeftOnly* delegate10 = [[PortraitUpsideDownAndLandscapeLeftOnly alloc] init];
 115.560 +    [self orientationHelper:delegate10 expectedImageNameDictionary:@{
 115.561 +                                                                     @"landscapeLeft" : @"Default-667h",
 115.562 +                                                                     @"landscapeRight" : @"Default-667h",
 115.563 +                                                                     @"portrait" : @"Default-667h",
 115.564 +                                                                     @"portraitUpsideDown" : @"Default-667h"
 115.565 +                                                                     }
 115.566 +                     device:device];
 115.567 +    
 115.568 +    // PortraitUpsideDown and Landscape Right
 115.569 +    
 115.570 +    PortraitUpsideDownAndLandscapeRightOnly* delegate11 = [[PortraitUpsideDownAndLandscapeRightOnly alloc] init];
 115.571 +    [self orientationHelper:delegate11 expectedImageNameDictionary:@{
 115.572 +                                                                     @"landscapeLeft" : @"Default-667h",
 115.573 +                                                                     @"landscapeRight" : @"Default-667h",
 115.574 +                                                                     @"portrait" : @"Default-667h",
 115.575 +                                                                     @"portraitUpsideDown" : @"Default-667h"
 115.576 +                                                                     }
 115.577 +                     device:device];
 115.578 +}
 115.579 +
 115.580 +- (void)testiPhone6PlusOrientation {
 115.581 +    
 115.582 +    CDV_iOSDevice device = CDV_iOSDeviceZero;
 115.583 +    device.iPhone = YES;
 115.584 +    device.iPhone6Plus = YES;
 115.585 +    
 115.586 +    // One orientation
 115.587 +    
 115.588 +    PortraitOnly* delegate = [[PortraitOnly alloc] init];
 115.589 +    [self orientationHelper:delegate expectedImageNameDictionary:@{
 115.590 +                                                                   @"landscapeLeft" : @"Default-736h",
 115.591 +                                                                   @"landscapeRight" : @"Default-736h",
 115.592 +                                                                   @"portrait" : @"Default-736h",
 115.593 +                                                                   @"portraitUpsideDown" : @"Default-736h"
 115.594 +                                                                   }
 115.595 +                     device:device];
 115.596 +    
 115.597 +    PortraitUpsideDownOnly* delegate2 = [[PortraitUpsideDownOnly alloc] init];
 115.598 +    [self orientationHelper:delegate2 expectedImageNameDictionary:@{
 115.599 +                                                                    @"landscapeLeft" : @"Default-736h",
 115.600 +                                                                    @"landscapeRight" : @"Default-736h",
 115.601 +                                                                    @"portrait" : @"Default-736h",
 115.602 +                                                                    @"portraitUpsideDown" : @"Default-736h"
 115.603 +                                                                    }
 115.604 +                     device:device];
 115.605 +    
 115.606 +    LandscapeLeftOnly* delegate3 = [[LandscapeLeftOnly alloc] init];
 115.607 +    [self orientationHelper:delegate3 expectedImageNameDictionary:@{
 115.608 +                                                                    @"landscapeLeft" : @"Default-Landscape-736h",
 115.609 +                                                                    @"landscapeRight" : @"Default-Landscape-736h",
 115.610 +                                                                    @"portrait" : @"Default-Landscape-736h",
 115.611 +                                                                    @"portraitUpsideDown" : @"Default-Landscape-736h"
 115.612 +                                                                    }
 115.613 +                     device:device];
 115.614 +    
 115.615 +    LandscapeRightOnly* delegate4 = [[LandscapeRightOnly alloc] init];
 115.616 +    [self orientationHelper:delegate4 expectedImageNameDictionary:@{
 115.617 +                                                                    @"landscapeLeft" : @"Default-Landscape-736h",
 115.618 +                                                                    @"landscapeRight" : @"Default-Landscape-736h",
 115.619 +                                                                    @"portrait" : @"Default-Landscape-736h",
 115.620 +                                                                    @"portraitUpsideDown" : @"Default-Landscape-736h"
 115.621 +                                                                    }
 115.622 +                     device:device];
 115.623 +    
 115.624 +    // All Portrait
 115.625 +    
 115.626 +    AllPortraitOnly* delegate5 = [[AllPortraitOnly alloc] init];
 115.627 +    [self orientationHelper:delegate5 expectedImageNameDictionary:@{
 115.628 +                                                                    @"landscapeLeft" : @"Default-736h",
 115.629 +                                                                    @"landscapeRight" : @"Default-736h",
 115.630 +                                                                    @"portrait" : @"Default-736h",
 115.631 +                                                                    @"portraitUpsideDown" : @"Default-736h"
 115.632 +                                                                    }
 115.633 +                     device:device];
 115.634 +    
 115.635 +    // All Landscape
 115.636 +    
 115.637 +    AllLandscapeOnly* delegate6 = [[AllLandscapeOnly alloc] init];
 115.638 +    [self orientationHelper:delegate6 expectedImageNameDictionary:@{
 115.639 +                                                                    @"landscapeLeft" : @"Default-Landscape-736h",
 115.640 +                                                                    @"landscapeRight" : @"Default-Landscape-736h",
 115.641 +                                                                    @"portrait" : @"Default-Landscape-736h",
 115.642 +                                                                    @"portraitUpsideDown" : @"Default-Landscape-736h"
 115.643 +                                                                    }
 115.644 +                     device:device];
 115.645 +    
 115.646 +    
 115.647 +    // All orientations
 115.648 +    
 115.649 +    AllOrientations* delegate7 = [[AllOrientations alloc] init];
 115.650 +    [self orientationHelper:delegate7 expectedImageNameDictionary:@{
 115.651 +                                                                    @"landscapeLeft" : @"Default-Landscape-736h",
 115.652 +                                                                    @"landscapeRight" : @"Default-Landscape-736h",
 115.653 +                                                                    @"portrait" : @"Default-736h",
 115.654 +                                                                    @"portraitUpsideDown" : @"Default-736h"
 115.655 +                                                                    }
 115.656 +                     device:device];
 115.657 +    
 115.658 +    // Portrait and Landscape Left
 115.659 +    
 115.660 +    PortraitAndLandscapeLeftOnly* delegate8 = [[PortraitAndLandscapeLeftOnly alloc] init];
 115.661 +    [self orientationHelper:delegate8 expectedImageNameDictionary:@{
 115.662 +                                                                    @"landscapeLeft" : @"Default-Landscape-736h",
 115.663 +                                                                    @"landscapeRight" : @"Default-Landscape-736h",
 115.664 +                                                                    @"portrait" : @"Default-736h",
 115.665 +                                                                    @"portraitUpsideDown" : @"Default-736h"
 115.666 +                                                                    }
 115.667 +                     device:device];
 115.668 +    
 115.669 +    // Portrait and Landscape Right
 115.670 +    
 115.671 +    PortraitAndLandscapeRightOnly* delegate9 = [[PortraitAndLandscapeRightOnly alloc] init];
 115.672 +    [self orientationHelper:delegate9 expectedImageNameDictionary:@{
 115.673 +                                                                    @"landscapeLeft" : @"Default-Landscape-736h",
 115.674 +                                                                    @"landscapeRight" : @"Default-Landscape-736h",
 115.675 +                                                                    @"portrait" : @"Default-736h",
 115.676 +                                                                    @"portraitUpsideDown" : @"Default-736h"
 115.677 +                                                                    }
 115.678 +                     device:device];
 115.679 +    
 115.680 +    // PortraitUpsideDown and Landscape Left
 115.681 +    
 115.682 +    PortraitUpsideDownAndLandscapeLeftOnly* delegate10 = [[PortraitUpsideDownAndLandscapeLeftOnly alloc] init];
 115.683 +    [self orientationHelper:delegate10 expectedImageNameDictionary:@{
 115.684 +                                                                     @"landscapeLeft" : @"Default-Landscape-736h",
 115.685 +                                                                     @"landscapeRight" : @"Default-Landscape-736h",
 115.686 +                                                                     @"portrait" : @"Default-736h",
 115.687 +                                                                     @"portraitUpsideDown" : @"Default-736h"
 115.688 +                                                                     }
 115.689 +                     device:device];
 115.690 +    
 115.691 +    // PortraitUpsideDown and Landscape Right
 115.692 +    
 115.693 +    PortraitUpsideDownAndLandscapeRightOnly* delegate11 = [[PortraitUpsideDownAndLandscapeRightOnly alloc] init];
 115.694 +    [self orientationHelper:delegate11 expectedImageNameDictionary:@{
 115.695 +                                                                     @"landscapeLeft" : @"Default-Landscape-736h",
 115.696 +                                                                     @"landscapeRight" : @"Default-Landscape-736h",
 115.697 +                                                                     @"portrait" : @"Default-736h",
 115.698 +                                                                     @"portraitUpsideDown" : @"Default-736h"
 115.699 +                                                                     }
 115.700 +                     device:device];
 115.701 +}
 115.702 +
 115.703 +
 115.704 +
 115.705 +@end
   116.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   116.2 +++ b/Touchgui/plugins/org.apache.cordova.splashscreen/tests/ios/CDVSplashScreenTest/CDVSplashScreenLibTests/ImageNameTestDelegates.h	Thu Jun 04 14:50:33 2015 +0200
   116.3 @@ -0,0 +1,57 @@
   116.4 +/*
   116.5 + Licensed to the Apache Software Foundation (ASF) under one
   116.6 + or more contributor license agreements.  See the NOTICE file
   116.7 + distributed with this work for additional information
   116.8 + regarding copyright ownership.  The ASF licenses this file
   116.9 + to you under the Apache License, Version 2.0 (the
  116.10 + "License"); you may not use this file except in compliance
  116.11 + with the License.  You may obtain a copy of the License at
  116.12 + 
  116.13 + http://www.apache.org/licenses/LICENSE-2.0
  116.14 + 
  116.15 + Unless required by applicable law or agreed to in writing,
  116.16 + software distributed under the License is distributed on an
  116.17 + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
  116.18 + KIND, either express or implied.  See the License for the
  116.19 + specific language governing permissions and limitations
  116.20 + under the License.
  116.21 + */
  116.22 +
  116.23 +#import <Foundation/Foundation.h>
  116.24 +#import <Cordova/CDVScreenOrientationDelegate.h>
  116.25 +
  116.26 +@interface PortraitOnly : NSObject <CDVScreenOrientationDelegate>
  116.27 +@end
  116.28 +
  116.29 +@interface PortraitUpsideDownOnly : NSObject <CDVScreenOrientationDelegate>
  116.30 +@end
  116.31 +
  116.32 +@interface AllPortraitOnly : NSObject <CDVScreenOrientationDelegate>
  116.33 +@end
  116.34 +
  116.35 +
  116.36 +@interface LandscapeLeftOnly : NSObject <CDVScreenOrientationDelegate>
  116.37 +@end
  116.38 +
  116.39 +@interface LandscapeRightOnly : NSObject <CDVScreenOrientationDelegate>
  116.40 +@end
  116.41 +
  116.42 +@interface AllLandscapeOnly : NSObject <CDVScreenOrientationDelegate>
  116.43 +@end
  116.44 +
  116.45 +
  116.46 +@interface AllOrientations : NSObject <CDVScreenOrientationDelegate>
  116.47 +@end
  116.48 +
  116.49 +@interface PortraitAndLandscapeLeftOnly : NSObject <CDVScreenOrientationDelegate>
  116.50 +@end
  116.51 +
  116.52 +@interface PortraitAndLandscapeRightOnly : NSObject <CDVScreenOrientationDelegate>
  116.53 +@end
  116.54 +
  116.55 +@interface PortraitUpsideDownAndLandscapeLeftOnly : NSObject <CDVScreenOrientationDelegate>
  116.56 +@end
  116.57 +
  116.58 +@interface PortraitUpsideDownAndLandscapeRightOnly : NSObject <CDVScreenOrientationDelegate>
  116.59 +@end
  116.60 +
   117.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   117.2 +++ b/Touchgui/plugins/org.apache.cordova.splashscreen/tests/ios/CDVSplashScreenTest/CDVSplashScreenLibTests/ImageNameTestDelegates.m	Thu Jun 04 14:50:33 2015 +0200
   117.3 @@ -0,0 +1,200 @@
   117.4 +/*
   117.5 + Licensed to the Apache Software Foundation (ASF) under one
   117.6 + or more contributor license agreements.  See the NOTICE file
   117.7 + distributed with this work for additional information
   117.8 + regarding copyright ownership.  The ASF licenses this file
   117.9 + to you under the Apache License, Version 2.0 (the
  117.10 + "License"); you may not use this file except in compliance
  117.11 + with the License.  You may obtain a copy of the License at
  117.12 + 
  117.13 + http://www.apache.org/licenses/LICENSE-2.0
  117.14 + 
  117.15 + Unless required by applicable law or agreed to in writing,
  117.16 + software distributed under the License is distributed on an
  117.17 + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
  117.18 + KIND, either express or implied.  See the License for the
  117.19 + specific language governing permissions and limitations
  117.20 + under the License.
  117.21 + */
  117.22 +
  117.23 +#import <UIKit/UIKit.h>
  117.24 +#import "ImageNameTestDelegates.h"
  117.25 +
  117.26 +@implementation PortraitOnly
  117.27 +
  117.28 +- (NSUInteger)supportedInterfaceOrientations {
  117.29 +    return UIInterfaceOrientationMaskPortrait;
  117.30 +}
  117.31 +
  117.32 +- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
  117.33 +    return [self supportedInterfaceOrientations] & (1 << interfaceOrientation) ;
  117.34 +}
  117.35 +
  117.36 +- (BOOL)shouldAutorotate {
  117.37 +    return YES;
  117.38 +}
  117.39 +
  117.40 +@end
  117.41 +
  117.42 +@implementation PortraitUpsideDownOnly
  117.43 +
  117.44 +- (NSUInteger)supportedInterfaceOrientations {
  117.45 +    return UIInterfaceOrientationMaskPortraitUpsideDown;
  117.46 +}
  117.47 +
  117.48 +- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
  117.49 +    return [self supportedInterfaceOrientations] & (1 << interfaceOrientation) ;
  117.50 +}
  117.51 +
  117.52 +- (BOOL)shouldAutorotate {
  117.53 +    return YES;
  117.54 +}
  117.55 +
  117.56 +@end
  117.57 +
  117.58 +@implementation AllPortraitOnly
  117.59 +
  117.60 +- (NSUInteger)supportedInterfaceOrientations {
  117.61 +    return UIInterfaceOrientationMaskPortrait | UIInterfaceOrientationMaskPortraitUpsideDown;
  117.62 +}
  117.63 +
  117.64 +- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
  117.65 +    return [self supportedInterfaceOrientations] & (1 << interfaceOrientation) ;
  117.66 +}
  117.67 +
  117.68 +- (BOOL)shouldAutorotate {
  117.69 +    return YES;
  117.70 +}
  117.71 +
  117.72 +@end
  117.73 +
  117.74 +
  117.75 +@implementation LandscapeLeftOnly
  117.76 +
  117.77 +- (NSUInteger)supportedInterfaceOrientations {
  117.78 +    return UIInterfaceOrientationMaskLandscapeLeft;
  117.79 +}
  117.80 +
  117.81 +- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
  117.82 +    return [self supportedInterfaceOrientations] & (1 << interfaceOrientation) ;
  117.83 +}
  117.84 +
  117.85 +- (BOOL)shouldAutorotate {
  117.86 +    return YES;
  117.87 +}
  117.88 +
  117.89 +@end
  117.90 +
  117.91 +@implementation LandscapeRightOnly
  117.92 +
  117.93 +- (NSUInteger)supportedInterfaceOrientations {
  117.94 +    return UIInterfaceOrientationMaskLandscapeRight;
  117.95 +}
  117.96 +
  117.97 +- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
  117.98 +    return [self supportedInterfaceOrientations] & (1 << interfaceOrientation) ;
  117.99 +}
 117.100 +
 117.101 +- (BOOL)shouldAutorotate {
 117.102 +    return YES;
 117.103 +}
 117.104 +
 117.105 +@end
 117.106 +
 117.107 +@implementation AllLandscapeOnly
 117.108 +
 117.109 +- (NSUInteger)supportedInterfaceOrientations {
 117.110 +    return UIInterfaceOrientationMaskLandscapeLeft | UIInterfaceOrientationMaskLandscapeRight;
 117.111 +}
 117.112 +
 117.113 +- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
 117.114 +    return [self supportedInterfaceOrientations] & (1 << interfaceOrientation) ;
 117.115 +}
 117.116 +
 117.117 +- (BOOL)shouldAutorotate {
 117.118 +    return YES;
 117.119 +}
 117.120 +
 117.121 +@end
 117.122 +
 117.123 +
 117.124 +@implementation AllOrientations
 117.125 +
 117.126 +- (NSUInteger)supportedInterfaceOrientations {
 117.127 +    return UIInterfaceOrientationMaskAll;
 117.128 +}
 117.129 +
 117.130 +- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
 117.131 +    return [self supportedInterfaceOrientations] & (1 << interfaceOrientation) ;
 117.132 +}
 117.133 +
 117.134 +- (BOOL)shouldAutorotate {
 117.135 +    return YES;
 117.136 +}
 117.137 +
 117.138 +@end
 117.139 +
 117.140 +@implementation PortraitAndLandscapeLeftOnly
 117.141 +
 117.142 +- (NSUInteger)supportedInterfaceOrientations {
 117.143 +    return UIInterfaceOrientationMaskPortrait | UIInterfaceOrientationMaskLandscapeLeft;
 117.144 +}
 117.145 +
 117.146 +- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
 117.147 +    return [self supportedInterfaceOrientations] & (1 << interfaceOrientation) ;
 117.148 +}
 117.149 +
 117.150 +- (BOOL)shouldAutorotate {
 117.151 +    return YES;
 117.152 +}
 117.153 +
 117.154 +@end
 117.155 +
 117.156 +@implementation PortraitAndLandscapeRightOnly
 117.157 +
 117.158 +- (NSUInteger)supportedInterfaceOrientations {
 117.159 +    return UIInterfaceOrientationMaskPortrait | UIInterfaceOrientationMaskLandscapeRight;
 117.160 +}
 117.161 +
 117.162 +- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
 117.163 +    return [self supportedInterfaceOrientations] & (1 << interfaceOrientation) ;
 117.164 +}
 117.165 +
 117.166 +- (BOOL)shouldAutorotate {
 117.167 +    return YES;
 117.168 +}
 117.169 +
 117.170 +@end
 117.171 +
 117.172 +@implementation PortraitUpsideDownAndLandscapeLeftOnly
 117.173 +
 117.174 +- (NSUInteger)supportedInterfaceOrientations {
 117.175 +    return UIInterfaceOrientationMaskPortraitUpsideDown | UIInterfaceOrientationMaskLandscapeLeft;
 117.176 +}
 117.177 +
 117.178 +- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
 117.179 +    return [self supportedInterfaceOrientations] & (1 << interfaceOrientation) ;
 117.180 +}
 117.181 +
 117.182 +- (BOOL)shouldAutorotate {
 117.183 +    return YES;
 117.184 +}
 117.185 +
 117.186 +@end
 117.187 +
 117.188 +@implementation PortraitUpsideDownAndLandscapeRightOnly
 117.189 +
 117.190 +- (NSUInteger)supportedInterfaceOrientations {
 117.191 +    return UIInterfaceOrientationMaskPortraitUpsideDown | UIInterfaceOrientationMaskLandscapeRight;
 117.192 +}
 117.193 +
 117.194 +- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
 117.195 +    return [self supportedInterfaceOrientations] & (1 << interfaceOrientation) ;
 117.196 +}
 117.197 +
 117.198 +- (BOOL)shouldAutorotate {
 117.199 +    return YES;
 117.200 +}
 117.201 +
 117.202 +@end
 117.203 +
   118.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   118.2 +++ b/Touchgui/plugins/org.apache.cordova.splashscreen/tests/ios/CDVSplashScreenTest/CDVSplashScreenLibTests/Info.plist	Thu Jun 04 14:50:33 2015 +0200
   118.3 @@ -0,0 +1,24 @@
   118.4 +<?xml version="1.0" encoding="UTF-8"?>
   118.5 +<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
   118.6 +<plist version="1.0">
   118.7 +<dict>
   118.8 +	<key>CFBundleDevelopmentRegion</key>
   118.9 +	<string>en</string>
  118.10 +	<key>CFBundleExecutable</key>
  118.11 +	<string>$(EXECUTABLE_NAME)</string>
  118.12 +	<key>CFBundleIdentifier</key>
  118.13 +	<string>org.apache.cordova.$(PRODUCT_NAME:rfc1034identifier)</string>
  118.14 +	<key>CFBundleInfoDictionaryVersion</key>
  118.15 +	<string>6.0</string>
  118.16 +	<key>CFBundleName</key>
  118.17 +	<string>$(PRODUCT_NAME)</string>
  118.18 +	<key>CFBundlePackageType</key>
  118.19 +	<string>BNDL</string>
  118.20 +	<key>CFBundleShortVersionString</key>
  118.21 +	<string>1.0</string>
  118.22 +	<key>CFBundleSignature</key>
  118.23 +	<string>????</string>
  118.24 +	<key>CFBundleVersion</key>
  118.25 +	<string>1</string>
  118.26 +</dict>
  118.27 +</plist>
   119.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   119.2 +++ b/Touchgui/plugins/org.apache.cordova.splashscreen/tests/ios/CDVSplashScreenTest/CDVSplashScreenTest.xcodeproj/project.pbxproj	Thu Jun 04 14:50:33 2015 +0200
   119.3 @@ -0,0 +1,505 @@
   119.4 +// !$*UTF8*$!
   119.5 +{
   119.6 +	archiveVersion = 1;
   119.7 +	classes = {
   119.8 +	};
   119.9 +	objectVersion = 46;
  119.10 +	objects = {
  119.11 +
  119.12 +/* Begin PBXBuildFile section */
  119.13 +		7E9F51AB19DA10AE00DA31AC /* CDVSplashScreen.m in Sources */ = {isa = PBXBuildFile; fileRef = 7E9F51A919DA10AE00DA31AC /* CDVSplashScreen.m */; };
  119.14 +		7E9F51B119DA114400DA31AC /* ImageNameTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 7E9F51B019DA114400DA31AC /* ImageNameTest.m */; };
  119.15 +		7E9F51B319DA116500DA31AC /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7E9F51B219DA116500DA31AC /* Foundation.framework */; };
  119.16 +		7E9F51B519DA127E00DA31AC /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7E9F51B419DA127E00DA31AC /* UIKit.framework */; };
  119.17 +		7E9F51B819DA14FD00DA31AC /* ImageNameTestDelegates.m in Sources */ = {isa = PBXBuildFile; fileRef = 7E9F51B719DA14FD00DA31AC /* ImageNameTestDelegates.m */; };
  119.18 +		7E9F51B919DA1B1600DA31AC /* libCDVSplashScreenLib.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 7E9F519519DA102000DA31AC /* libCDVSplashScreenLib.a */; };
  119.19 +		7E9F51BA19DA1B2000DA31AC /* libCordova.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 7E9F519019DA0F8300DA31AC /* libCordova.a */; };
  119.20 +/* End PBXBuildFile section */
  119.21 +
  119.22 +/* Begin PBXContainerItemProxy section */
  119.23 +		7E9F518F19DA0F8300DA31AC /* PBXContainerItemProxy */ = {
  119.24 +			isa = PBXContainerItemProxy;
  119.25 +			containerPortal = 7E9F518B19DA0F8300DA31AC /* CordovaLib.xcodeproj */;
  119.26 +			proxyType = 2;
  119.27 +			remoteGlobalIDString = 68A32D7114102E1C006B237C;
  119.28 +			remoteInfo = CordovaLib;
  119.29 +		};
  119.30 +		7E9F51AC19DA10DE00DA31AC /* PBXContainerItemProxy */ = {
  119.31 +			isa = PBXContainerItemProxy;
  119.32 +			containerPortal = 7E9F517219DA09CE00DA31AC /* Project object */;
  119.33 +			proxyType = 1;
  119.34 +			remoteGlobalIDString = 7E9F519419DA102000DA31AC;
  119.35 +			remoteInfo = CDVSplashScreenLib;
  119.36 +		};
  119.37 +		7E9F51AE19DA10E100DA31AC /* PBXContainerItemProxy */ = {
  119.38 +			isa = PBXContainerItemProxy;
  119.39 +			containerPortal = 7E9F518B19DA0F8300DA31AC /* CordovaLib.xcodeproj */;
  119.40 +			proxyType = 1;
  119.41 +			remoteGlobalIDString = D2AAC07D0554694100DB518D;
  119.42 +			remoteInfo = CordovaLib;
  119.43 +		};
  119.44 +/* End PBXContainerItemProxy section */
  119.45 +
  119.46 +/* Begin PBXCopyFilesBuildPhase section */
  119.47 +		7E9F519319DA102000DA31AC /* CopyFiles */ = {
  119.48 +			isa = PBXCopyFilesBuildPhase;
  119.49 +			buildActionMask = 2147483647;
  119.50 +			dstPath = "include/$(PRODUCT_NAME)";
  119.51 +			dstSubfolderSpec = 16;
  119.52 +			files = (
  119.53 +			);
  119.54 +			runOnlyForDeploymentPostprocessing = 0;
  119.55 +		};
  119.56 +/* End PBXCopyFilesBuildPhase section */
  119.57 +
  119.58 +/* Begin PBXFileReference section */
  119.59 +		7E9F518B19DA0F8300DA31AC /* CordovaLib.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = CordovaLib.xcodeproj; path = "../node_modules/cordova-ios/CordovaLib/CordovaLib.xcodeproj"; sourceTree = "<group>"; };
  119.60 +		7E9F519519DA102000DA31AC /* libCDVSplashScreenLib.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libCDVSplashScreenLib.a; sourceTree = BUILT_PRODUCTS_DIR; };
  119.61 +		7E9F519F19DA102000DA31AC /* CDVSplashScreenLibTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = CDVSplashScreenLibTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
  119.62 +		7E9F51A219DA102000DA31AC /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
  119.63 +		7E9F51A919DA10AE00DA31AC /* CDVSplashScreen.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = CDVSplashScreen.m; path = ../../../src/ios/CDVSplashScreen.m; sourceTree = SOURCE_ROOT; };
  119.64 +		7E9F51AA19DA10AE00DA31AC /* CDVSplashScreen.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CDVSplashScreen.h; path = ../../../src/ios/CDVSplashScreen.h; sourceTree = SOURCE_ROOT; };
  119.65 +		7E9F51B019DA114400DA31AC /* ImageNameTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ImageNameTest.m; sourceTree = "<group>"; };
  119.66 +		7E9F51B219DA116500DA31AC /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.0.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; };
  119.67 +		7E9F51B419DA127E00DA31AC /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.0.sdk/System/Library/Frameworks/UIKit.framework; sourceTree = DEVELOPER_DIR; };
  119.68 +		7E9F51B619DA12C600DA31AC /* ImageNameTestDelegates.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ImageNameTestDelegates.h; sourceTree = "<group>"; };
  119.69 +		7E9F51B719DA14FD00DA31AC /* ImageNameTestDelegates.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ImageNameTestDelegates.m; sourceTree = "<group>"; };
  119.70 +/* End PBXFileReference section */
  119.71 +
  119.72 +/* Begin PBXFrameworksBuildPhase section */
  119.73 +		7E9F519219DA102000DA31AC /* Frameworks */ = {
  119.74 +			isa = PBXFrameworksBuildPhase;
  119.75 +			buildActionMask = 2147483647;
  119.76 +			files = (
  119.77 +			);
  119.78 +			runOnlyForDeploymentPostprocessing = 0;
  119.79 +		};
  119.80 +		7E9F519C19DA102000DA31AC /* Frameworks */ = {
  119.81 +			isa = PBXFrameworksBuildPhase;
  119.82 +			buildActionMask = 2147483647;
  119.83 +			files = (
  119.84 +				7E9F51BA19DA1B2000DA31AC /* libCordova.a in Frameworks */,
  119.85 +				7E9F51B919DA1B1600DA31AC /* libCDVSplashScreenLib.a in Frameworks */,
  119.86 +				7E9F51B519DA127E00DA31AC /* UIKit.framework in Frameworks */,
  119.87 +				7E9F51B319DA116500DA31AC /* Foundation.framework in Frameworks */,
  119.88 +			);
  119.89 +			runOnlyForDeploymentPostprocessing = 0;
  119.90 +		};
  119.91 +/* End PBXFrameworksBuildPhase section */
  119.92 +
  119.93 +/* Begin PBXGroup section */
  119.94 +		7E9F517119DA09CE00DA31AC = {
  119.95 +			isa = PBXGroup;
  119.96 +			children = (
  119.97 +				7E9F51B419DA127E00DA31AC /* UIKit.framework */,
  119.98 +				7E9F51B219DA116500DA31AC /* Foundation.framework */,
  119.99 +				7E9F518B19DA0F8300DA31AC /* CordovaLib.xcodeproj */,
 119.100 +				7E9F519619DA102000DA31AC /* CDVSplashScreenLib */,
 119.101 +				7E9F51A019DA102000DA31AC /* CDVSplashScreenLibTests */,
 119.102 +				7E9F517D19DA0A0A00DA31AC /* Products */,
 119.103 +			);
 119.104 +			sourceTree = "<group>";
 119.105 +		};
 119.106 +		7E9F517D19DA0A0A00DA31AC /* Products */ = {
 119.107 +			isa = PBXGroup;
 119.108 +			children = (
 119.109 +				7E9F519519DA102000DA31AC /* libCDVSplashScreenLib.a */,
 119.110 +				7E9F519F19DA102000DA31AC /* CDVSplashScreenLibTests.xctest */,
 119.111 +			);
 119.112 +			name = Products;
 119.113 +			sourceTree = "<group>";
 119.114 +		};
 119.115 +		7E9F518C19DA0F8300DA31AC /* Products */ = {
 119.116 +			isa = PBXGroup;
 119.117 +			children = (
 119.118 +				7E9F519019DA0F8300DA31AC /* libCordova.a */,
 119.119 +			);
 119.120 +			name = Products;
 119.121 +			sourceTree = "<group>";
 119.122 +		};
 119.123 +		7E9F519619DA102000DA31AC /* CDVSplashScreenLib */ = {
 119.124 +			isa = PBXGroup;
 119.125 +			children = (
 119.126 +				7E9F51A919DA10AE00DA31AC /* CDVSplashScreen.m */,
 119.127 +				7E9F51AA19DA10AE00DA31AC /* CDVSplashScreen.h */,
 119.128 +			);
 119.129 +			path = CDVSplashScreenLib;
 119.130 +			sourceTree = SOURCE_ROOT;
 119.131 +		};
 119.132 +		7E9F51A019DA102000DA31AC /* CDVSplashScreenLibTests */ = {
 119.133 +			isa = PBXGroup;
 119.134 +			children = (
 119.135 +				7E9F51A119DA102000DA31AC /* Supporting Files */,
 119.136 +				7E9F51B019DA114400DA31AC /* ImageNameTest.m */,
 119.137 +				7E9F51B619DA12C600DA31AC /* ImageNameTestDelegates.h */,
 119.138 +				7E9F51B719DA14FD00DA31AC /* ImageNameTestDelegates.m */,
 119.139 +			);
 119.140 +			path = CDVSplashScreenLibTests;
 119.141 +			sourceTree = "<group>";
 119.142 +		};
 119.143 +		7E9F51A119DA102000DA31AC /* Supporting Files */ = {
 119.144 +			isa = PBXGroup;
 119.145 +			children = (
 119.146 +				7E9F51A219DA102000DA31AC /* Info.plist */,
 119.147 +			);
 119.148 +			name = "Supporting Files";
 119.149 +			sourceTree = "<group>";
 119.150 +		};
 119.151 +/* End PBXGroup section */
 119.152 +
 119.153 +/* Begin PBXNativeTarget section */
 119.154 +		7E9F519419DA102000DA31AC /* CDVSplashScreenLib */ = {
 119.155 +			isa = PBXNativeTarget;
 119.156 +			buildConfigurationList = 7E9F51A319DA102000DA31AC /* Build configuration list for PBXNativeTarget "CDVSplashScreenLib" */;
 119.157 +			buildPhases = (
 119.158 +				7E9F519119DA102000DA31AC /* Sources */,
 119.159 +				7E9F519219DA102000DA31AC /* Frameworks */,
 119.160 +				7E9F519319DA102000DA31AC /* CopyFiles */,
 119.161 +			);
 119.162 +			buildRules = (
 119.163 +			);
 119.164 +			dependencies = (
 119.165 +			);
 119.166 +			name = CDVSplashScreenLib;
 119.167 +			productName = CDVSplashScreenLib;
 119.168 +			productReference = 7E9F519519DA102000DA31AC /* libCDVSplashScreenLib.a */;
 119.169 +			productType = "com.apple.product-type.library.static";
 119.170 +		};
 119.171 +		7E9F519E19DA102000DA31AC /* CDVSplashScreenLibTests */ = {
 119.172 +			isa = PBXNativeTarget;
 119.173 +			buildConfigurationList = 7E9F51A619DA102000DA31AC /* Build configuration list for PBXNativeTarget "CDVSplashScreenLibTests" */;
 119.174 +			buildPhases = (
 119.175 +				7E9F519B19DA102000DA31AC /* Sources */,
 119.176 +				7E9F519C19DA102000DA31AC /* Frameworks */,
 119.177 +				7E9F519D19DA102000DA31AC /* Resources */,
 119.178 +			);
 119.179 +			buildRules = (
 119.180 +			);
 119.181 +			dependencies = (
 119.182 +				7E9F51AF19DA10E100DA31AC /* PBXTargetDependency */,
 119.183 +				7E9F51AD19DA10DE00DA31AC /* PBXTargetDependency */,
 119.184 +			);
 119.185 +			name = CDVSplashScreenLibTests;
 119.186 +			productName = CDVSplashScreenLibTests;
 119.187 +			productReference = 7E9F519F19DA102000DA31AC /* CDVSplashScreenLibTests.xctest */;
 119.188 +			productType = "com.apple.product-type.bundle.unit-test";
 119.189 +		};
 119.190 +/* End PBXNativeTarget section */
 119.191 +
 119.192 +/* Begin PBXProject section */
 119.193 +		7E9F517219DA09CE00DA31AC /* Project object */ = {
 119.194 +			isa = PBXProject;
 119.195 +			attributes = {
 119.196 +				LastUpgradeCheck = 0600;
 119.197 +				TargetAttributes = {
 119.198 +					7E9F519419DA102000DA31AC = {
 119.199 +						CreatedOnToolsVersion = 6.0;
 119.200 +					};
 119.201 +					7E9F519E19DA102000DA31AC = {
 119.202 +						CreatedOnToolsVersion = 6.0;
 119.203 +					};
 119.204 +				};
 119.205 +			};
 119.206 +			buildConfigurationList = 7E9F517519DA09CE00DA31AC /* Build configuration list for PBXProject "CDVSplashScreenTest" */;
 119.207 +			compatibilityVersion = "Xcode 3.2";
 119.208 +			developmentRegion = English;
 119.209 +			hasScannedForEncodings = 0;
 119.210 +			knownRegions = (
 119.211 +				en,
 119.212 +			);
 119.213 +			mainGroup = 7E9F517119DA09CE00DA31AC;
 119.214 +			productRefGroup = 7E9F517D19DA0A0A00DA31AC /* Products */;
 119.215 +			projectDirPath = "";
 119.216 +			projectReferences = (
 119.217 +				{
 119.218 +					ProductGroup = 7E9F518C19DA0F8300DA31AC /* Products */;
 119.219 +					ProjectRef = 7E9F518B19DA0F8300DA31AC /* CordovaLib.xcodeproj */;
 119.220 +				},
 119.221 +			);
 119.222 +			projectRoot = "";
 119.223 +			targets = (
 119.224 +				7E9F519419DA102000DA31AC /* CDVSplashScreenLib */,
 119.225 +				7E9F519E19DA102000DA31AC /* CDVSplashScreenLibTests */,
 119.226 +			);
 119.227 +		};
 119.228 +/* End PBXProject section */
 119.229 +
 119.230 +/* Begin PBXReferenceProxy section */
 119.231 +		7E9F519019DA0F8300DA31AC /* libCordova.a */ = {
 119.232 +			isa = PBXReferenceProxy;
 119.233 +			fileType = archive.ar;
 119.234 +			path = libCordova.a;
 119.235 +			remoteRef = 7E9F518F19DA0F8300DA31AC /* PBXContainerItemProxy */;
 119.236 +			sourceTree = BUILT_PRODUCTS_DIR;
 119.237 +		};
 119.238 +/* End PBXReferenceProxy section */
 119.239 +
 119.240 +/* Begin PBXResourcesBuildPhase section */
 119.241 +		7E9F519D19DA102000DA31AC /* Resources */ = {
 119.242 +			isa = PBXResourcesBuildPhase;
 119.243 +			buildActionMask = 2147483647;
 119.244 +			files = (
 119.245 +			);
 119.246 +			runOnlyForDeploymentPostprocessing = 0;
 119.247 +		};
 119.248 +/* End PBXResourcesBuildPhase section */
 119.249 +
 119.250 +/* Begin PBXSourcesBuildPhase section */
 119.251 +		7E9F519119DA102000DA31AC /* Sources */ = {
 119.252 +			isa = PBXSourcesBuildPhase;
 119.253 +			buildActionMask = 2147483647;
 119.254 +			files = (
 119.255 +				7E9F51AB19DA10AE00DA31AC /* CDVSplashScreen.m in Sources */,
 119.256 +			);
 119.257 +			runOnlyForDeploymentPostprocessing = 0;
 119.258 +		};
 119.259 +		7E9F519B19DA102000DA31AC /* Sources */ = {
 119.260 +			isa = PBXSourcesBuildPhase;
 119.261 +			buildActionMask = 2147483647;
 119.262 +			files = (
 119.263 +				7E9F51B119DA114400DA31AC /* ImageNameTest.m in Sources */,
 119.264 +				7E9F51B819DA14FD00DA31AC /* ImageNameTestDelegates.m in Sources */,
 119.265 +			);
 119.266 +			runOnlyForDeploymentPostprocessing = 0;
 119.267 +		};
 119.268 +/* End PBXSourcesBuildPhase section */
 119.269 +
 119.270 +/* Begin PBXTargetDependency section */
 119.271 +		7E9F51AD19DA10DE00DA31AC /* PBXTargetDependency */ = {
 119.272 +			isa = PBXTargetDependency;
 119.273 +			target = 7E9F519419DA102000DA31AC /* CDVSplashScreenLib */;
 119.274 +			targetProxy = 7E9F51AC19DA10DE00DA31AC /* PBXContainerItemProxy */;
 119.275 +		};
 119.276 +		7E9F51AF19DA10E100DA31AC /* PBXTargetDependency */ = {
 119.277 +			isa = PBXTargetDependency;
 119.278 +			name = CordovaLib;
 119.279 +			targetProxy = 7E9F51AE19DA10E100DA31AC /* PBXContainerItemProxy */;
 119.280 +		};
 119.281 +/* End PBXTargetDependency section */
 119.282 +
 119.283 +/* Begin XCBuildConfiguration section */
 119.284 +		7E9F517619DA09CE00DA31AC /* Debug */ = {
 119.285 +			isa = XCBuildConfiguration;
 119.286 +			buildSettings = {
 119.287 +			};
 119.288 +			name = Debug;
 119.289 +		};
 119.290 +		7E9F517719DA09CE00DA31AC /* Release */ = {
 119.291 +			isa = XCBuildConfiguration;
 119.292 +			buildSettings = {
 119.293 +			};
 119.294 +			name = Release;
 119.295 +		};
 119.296 +		7E9F51A419DA102000DA31AC /* Debug */ = {
 119.297 +			isa = XCBuildConfiguration;
 119.298 +			buildSettings = {
 119.299 +				ALWAYS_SEARCH_USER_PATHS = NO;
 119.300 +				CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
 119.301 +				CLANG_CXX_LIBRARY = "libc++";
 119.302 +				CLANG_ENABLE_MODULES = YES;
 119.303 +				CLANG_ENABLE_OBJC_ARC = YES;
 119.304 +				CLANG_WARN_BOOL_CONVERSION = YES;
 119.305 +				CLANG_WARN_CONSTANT_CONVERSION = YES;
 119.306 +				CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
 119.307 +				CLANG_WARN_EMPTY_BODY = YES;
 119.308 +				CLANG_WARN_ENUM_CONVERSION = YES;
 119.309 +				CLANG_WARN_INT_CONVERSION = YES;
 119.310 +				CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
 119.311 +				CLANG_WARN_UNREACHABLE_CODE = YES;
 119.312 +				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
 119.313 +				COPY_PHASE_STRIP = NO;
 119.314 +				ENABLE_STRICT_OBJC_MSGSEND = YES;
 119.315 +				GCC_C_LANGUAGE_STANDARD = gnu99;
 119.316 +				GCC_DYNAMIC_NO_PIC = NO;
 119.317 +				GCC_OPTIMIZATION_LEVEL = 0;
 119.318 +				GCC_PREPROCESSOR_DEFINITIONS = (
 119.319 +					"DEBUG=1",
 119.320 +					"$(inherited)",
 119.321 +				);
 119.322 +				GCC_SYMBOLS_PRIVATE_EXTERN = NO;
 119.323 +				GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
 119.324 +				GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
 119.325 +				GCC_WARN_UNDECLARED_SELECTOR = YES;
 119.326 +				GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
 119.327 +				GCC_WARN_UNUSED_FUNCTION = YES;
 119.328 +				GCC_WARN_UNUSED_VARIABLE = YES;
 119.329 +				HEADER_SEARCH_PATHS = (
 119.330 +					"$(inherited)",
 119.331 +					"\"$(TARGET_BUILD_DIR)/usr/local/lib/include\"",
 119.332 +					"\"$(OBJROOT)/UninstalledProducts/include\"",
 119.333 +					"\"$(BUILT_PRODUCTS_DIR)\"",
 119.334 +				);
 119.335 +				IPHONEOS_DEPLOYMENT_TARGET = 8.0;
 119.336 +				MTL_ENABLE_DEBUG_INFO = YES;
 119.337 +				ONLY_ACTIVE_ARCH = YES;
 119.338 +				OTHER_LDFLAGS = "-ObjC";
 119.339 +				PRODUCT_NAME = "$(TARGET_NAME)";
 119.340 +				SDKROOT = iphoneos;
 119.341 +				SKIP_INSTALL = YES;
 119.342 +			};
 119.343 +			name = Debug;
 119.344 +		};
 119.345 +		7E9F51A519DA102000DA31AC /* Release */ = {
 119.346 +			isa = XCBuildConfiguration;
 119.347 +			buildSettings = {
 119.348 +				ALWAYS_SEARCH_USER_PATHS = NO;
 119.349 +				CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
 119.350 +				CLANG_CXX_LIBRARY = "libc++";
 119.351 +				CLANG_ENABLE_MODULES = YES;
 119.352 +				CLANG_ENABLE_OBJC_ARC = YES;
 119.353 +				CLANG_WARN_BOOL_CONVERSION = YES;
 119.354 +				CLANG_WARN_CONSTANT_CONVERSION = YES;
 119.355 +				CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
 119.356 +				CLANG_WARN_EMPTY_BODY = YES;
 119.357 +				CLANG_WARN_ENUM_CONVERSION = YES;
 119.358 +				CLANG_WARN_INT_CONVERSION = YES;
 119.359 +				CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
 119.360 +				CLANG_WARN_UNREACHABLE_CODE = YES;
 119.361 +				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
 119.362 +				COPY_PHASE_STRIP = YES;
 119.363 +				ENABLE_NS_ASSERTIONS = NO;
 119.364 +				ENABLE_STRICT_OBJC_MSGSEND = YES;
 119.365 +				GCC_C_LANGUAGE_STANDARD = gnu99;
 119.366 +				GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
 119.367 +				GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
 119.368 +				GCC_WARN_UNDECLARED_SELECTOR = YES;
 119.369 +				GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
 119.370 +				GCC_WARN_UNUSED_FUNCTION = YES;
 119.371 +				GCC_WARN_UNUSED_VARIABLE = YES;
 119.372 +				HEADER_SEARCH_PATHS = (
 119.373 +					"$(inherited)",
 119.374 +					"\"$(TARGET_BUILD_DIR)/usr/local/lib/include\"",
 119.375 +					"\n\"$(OBJROOT)/UninstalledProducts/include\"\n\"$(BUILT_PRODUCTS_DIR)\"",
 119.376 +				);
 119.377 +				IPHONEOS_DEPLOYMENT_TARGET = 8.0;
 119.378 +				MTL_ENABLE_DEBUG_INFO = NO;
 119.379 +				OTHER_LDFLAGS = "-ObjC";
 119.380 +				PRODUCT_NAME = "$(TARGET_NAME)";
 119.381 +				SDKROOT = iphoneos;
 119.382 +				SKIP_INSTALL = YES;
 119.383 +				VALIDATE_PRODUCT = YES;
 119.384 +			};
 119.385 +			name = Release;
 119.386 +		};
 119.387 +		7E9F51A719DA102000DA31AC /* Debug */ = {
 119.388 +			isa = XCBuildConfiguration;
 119.389 +			buildSettings = {
 119.390 +				ALWAYS_SEARCH_USER_PATHS = NO;
 119.391 +				CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
 119.392 +				CLANG_CXX_LIBRARY = "libc++";
 119.393 +				CLANG_ENABLE_MODULES = YES;
 119.394 +				CLANG_ENABLE_OBJC_ARC = YES;
 119.395 +				CLANG_WARN_BOOL_CONVERSION = YES;
 119.396 +				CLANG_WARN_CONSTANT_CONVERSION = YES;
 119.397 +				CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
 119.398 +				CLANG_WARN_EMPTY_BODY = YES;
 119.399 +				CLANG_WARN_ENUM_CONVERSION = YES;
 119.400 +				CLANG_WARN_INT_CONVERSION = YES;
 119.401 +				CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
 119.402 +				CLANG_WARN_UNREACHABLE_CODE = YES;
 119.403 +				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
 119.404 +				COPY_PHASE_STRIP = NO;
 119.405 +				ENABLE_STRICT_OBJC_MSGSEND = YES;
 119.406 +				FRAMEWORK_SEARCH_PATHS = (
 119.407 +					"$(SDKROOT)/Developer/Library/Frameworks",
 119.408 +					"$(inherited)",
 119.409 +				);
 119.410 +				GCC_C_LANGUAGE_STANDARD = gnu99;
 119.411 +				GCC_DYNAMIC_NO_PIC = NO;
 119.412 +				GCC_OPTIMIZATION_LEVEL = 0;
 119.413 +				GCC_PREPROCESSOR_DEFINITIONS = (
 119.414 +					"DEBUG=1",
 119.415 +					"$(inherited)",
 119.416 +				);
 119.417 +				GCC_SYMBOLS_PRIVATE_EXTERN = NO;
 119.418 +				GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
 119.419 +				GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
 119.420 +				GCC_WARN_UNDECLARED_SELECTOR = YES;
 119.421 +				GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
 119.422 +				GCC_WARN_UNUSED_FUNCTION = YES;
 119.423 +				GCC_WARN_UNUSED_VARIABLE = YES;
 119.424 +				INFOPLIST_FILE = CDVSplashScreenLibTests/Info.plist;
 119.425 +				IPHONEOS_DEPLOYMENT_TARGET = 8.0;
 119.426 +				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
 119.427 +				MTL_ENABLE_DEBUG_INFO = YES;
 119.428 +				ONLY_ACTIVE_ARCH = YES;
 119.429 +				PRODUCT_NAME = "$(TARGET_NAME)";
 119.430 +				SDKROOT = iphoneos;
 119.431 +			};
 119.432 +			name = Debug;
 119.433 +		};
 119.434 +		7E9F51A819DA102000DA31AC /* Release */ = {
 119.435 +			isa = XCBuildConfiguration;
 119.436 +			buildSettings = {
 119.437 +				ALWAYS_SEARCH_USER_PATHS = NO;
 119.438 +				CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
 119.439 +				CLANG_CXX_LIBRARY = "libc++";
 119.440 +				CLANG_ENABLE_MODULES = YES;
 119.441 +				CLANG_ENABLE_OBJC_ARC = YES;
 119.442 +				CLANG_WARN_BOOL_CONVERSION = YES;
 119.443 +				CLANG_WARN_CONSTANT_CONVERSION = YES;
 119.444 +				CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
 119.445 +				CLANG_WARN_EMPTY_BODY = YES;
 119.446 +				CLANG_WARN_ENUM_CONVERSION = YES;
 119.447 +				CLANG_WARN_INT_CONVERSION = YES;
 119.448 +				CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
 119.449 +				CLANG_WARN_UNREACHABLE_CODE = YES;
 119.450 +				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
 119.451 +				COPY_PHASE_STRIP = YES;
 119.452 +				ENABLE_NS_ASSERTIONS = NO;
 119.453 +				ENABLE_STRICT_OBJC_MSGSEND = YES;
 119.454 +				FRAMEWORK_SEARCH_PATHS = (
 119.455 +					"$(SDKROOT)/Developer/Library/Frameworks",
 119.456 +					"$(inherited)",
 119.457 +				);
 119.458 +				GCC_C_LANGUAGE_STANDARD = gnu99;
 119.459 +				GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
 119.460 +				GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
 119.461 +				GCC_WARN_UNDECLARED_SELECTOR = YES;
 119.462 +				GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
 119.463 +				GCC_WARN_UNUSED_FUNCTION = YES;
 119.464 +				GCC_WARN_UNUSED_VARIABLE = YES;
 119.465 +				INFOPLIST_FILE = CDVSplashScreenLibTests/Info.plist;
 119.466 +				IPHONEOS_DEPLOYMENT_TARGET = 8.0;
 119.467 +				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
 119.468 +				MTL_ENABLE_DEBUG_INFO = NO;
 119.469 +				PRODUCT_NAME = "$(TARGET_NAME)";
 119.470 +				SDKROOT = iphoneos;
 119.471 +				VALIDATE_PRODUCT = YES;
 119.472 +			};
 119.473 +			name = Release;
 119.474 +		};
 119.475 +/* End XCBuildConfiguration section */
 119.476 +
 119.477 +/* Begin XCConfigurationList section */
 119.478 +		7E9F517519DA09CE00DA31AC /* Build configuration list for PBXProject "CDVSplashScreenTest" */ = {
 119.479 +			isa = XCConfigurationList;
 119.480 +			buildConfigurations = (
 119.481 +				7E9F517619DA09CE00DA31AC /* Debug */,
 119.482 +				7E9F517719DA09CE00DA31AC /* Release */,
 119.483 +			);
 119.484 +			defaultConfigurationIsVisible = 0;
 119.485 +			defaultConfigurationName = Release;
 119.486 +		};
 119.487 +		7E9F51A319DA102000DA31AC /* Build configuration list for PBXNativeTarget "CDVSplashScreenLib" */ = {
 119.488 +			isa = XCConfigurationList;
 119.489 +			buildConfigurations = (
 119.490 +				7E9F51A419DA102000DA31AC /* Debug */,
 119.491 +				7E9F51A519DA102000DA31AC /* Release */,
 119.492 +			);
 119.493 +			defaultConfigurationIsVisible = 0;
 119.494 +			defaultConfigurationName = Release;
 119.495 +		};
 119.496 +		7E9F51A619DA102000DA31AC /* Build configuration list for PBXNativeTarget "CDVSplashScreenLibTests" */ = {
 119.497 +			isa = XCConfigurationList;
 119.498 +			buildConfigurations = (
 119.499 +				7E9F51A719DA102000DA31AC /* Debug */,
 119.500 +				7E9F51A819DA102000DA31AC /* Release */,
 119.501 +			);
 119.502 +			defaultConfigurationIsVisible = 0;
 119.503 +			defaultConfigurationName = Release;
 119.504 +		};
 119.505 +/* End XCConfigurationList section */
 119.506 +	};
 119.507 +	rootObject = 7E9F517219DA09CE00DA31AC /* Project object */;
 119.508 +}
   120.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   120.2 +++ b/Touchgui/plugins/org.apache.cordova.splashscreen/tests/ios/CDVSplashScreenTest/CDVSplashScreenTest.xcodeproj/project.xcworkspace/contents.xcworkspacedata	Thu Jun 04 14:50:33 2015 +0200
   120.3 @@ -0,0 +1,7 @@
   120.4 +<?xml version="1.0" encoding="UTF-8"?>
   120.5 +<Workspace
   120.6 +   version = "1.0">
   120.7 +   <FileRef
   120.8 +      location = "self:CDVSplashScreenTest.xcodeproj">
   120.9 +   </FileRef>
  120.10 +</Workspace>
   121.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   121.2 +++ b/Touchgui/plugins/org.apache.cordova.splashscreen/tests/ios/CDVSplashScreenTest/CDVSplashScreenTest.xcodeproj/project.xcworkspace/xcshareddata/CDVSplashScreenTest.xccheckout	Thu Jun 04 14:50:33 2015 +0200
   121.3 @@ -0,0 +1,41 @@
   121.4 +<?xml version="1.0" encoding="UTF-8"?>
   121.5 +<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
   121.6 +<plist version="1.0">
   121.7 +<dict>
   121.8 +	<key>IDESourceControlProjectFavoriteDictionaryKey</key>
   121.9 +	<false/>
  121.10 +	<key>IDESourceControlProjectIdentifier</key>
  121.11 +	<string>6BE9AD73-1B9F-4362-98D7-DC631BEC6185</string>
  121.12 +	<key>IDESourceControlProjectName</key>
  121.13 +	<string>CDVSplashScreenTest</string>
  121.14 +	<key>IDESourceControlProjectOriginsDictionary</key>
  121.15 +	<dict>
  121.16 +		<key>BEF5A5D0FF64801E558286389440357A9233D7DB</key>
  121.17 +		<string>https://git-wip-us.apache.org/repos/asf/cordova-plugin-splashscreen.git</string>
  121.18 +	</dict>
  121.19 +	<key>IDESourceControlProjectPath</key>
  121.20 +	<string>tests/ios/CDVSplashScreenTest/CDVSplashScreenTest.xcodeproj</string>
  121.21 +	<key>IDESourceControlProjectRelativeInstallPathDictionary</key>
  121.22 +	<dict>
  121.23 +		<key>BEF5A5D0FF64801E558286389440357A9233D7DB</key>
  121.24 +		<string>../../../../..</string>
  121.25 +	</dict>
  121.26 +	<key>IDESourceControlProjectURL</key>
  121.27 +	<string>https://git-wip-us.apache.org/repos/asf/cordova-plugin-splashscreen.git</string>
  121.28 +	<key>IDESourceControlProjectVersion</key>
  121.29 +	<integer>111</integer>
  121.30 +	<key>IDESourceControlProjectWCCIdentifier</key>
  121.31 +	<string>BEF5A5D0FF64801E558286389440357A9233D7DB</string>
  121.32 +	<key>IDESourceControlProjectWCConfigurations</key>
  121.33 +	<array>
  121.34 +		<dict>
  121.35 +			<key>IDESourceControlRepositoryExtensionIdentifierKey</key>
  121.36 +			<string>public.vcs.git</string>
  121.37 +			<key>IDESourceControlWCCIdentifierKey</key>
  121.38 +			<string>BEF5A5D0FF64801E558286389440357A9233D7DB</string>
  121.39 +			<key>IDESourceControlWCCName</key>
  121.40 +			<string>cordova-plugin-splashscreen</string>
  121.41 +		</dict>
  121.42 +	</array>
  121.43 +</dict>
  121.44 +</plist>
   122.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   122.2 +++ b/Touchgui/plugins/org.apache.cordova.splashscreen/tests/ios/CDVSplashScreenTest/CDVSplashScreenTest.xcodeproj/xcshareddata/xcschemes/CDVSplashScreenLib.xcscheme	Thu Jun 04 14:50:33 2015 +0200
   122.3 @@ -0,0 +1,77 @@
   122.4 +<?xml version="1.0" encoding="UTF-8"?>
   122.5 +<Scheme
   122.6 +   LastUpgradeVersion = "0600"
   122.7 +   version = "1.3">
   122.8 +   <BuildAction
   122.9 +      parallelizeBuildables = "YES"
  122.10 +      buildImplicitDependencies = "YES">
  122.11 +      <BuildActionEntries>
  122.12 +         <BuildActionEntry
  122.13 +            buildForTesting = "YES"
  122.14 +            buildForRunning = "YES"
  122.15 +            buildForProfiling = "YES"
  122.16 +            buildForArchiving = "YES"
  122.17 +            buildForAnalyzing = "YES">
  122.18 +            <BuildableReference
  122.19 +               BuildableIdentifier = "primary"
  122.20 +               BlueprintIdentifier = "7E9F519419DA102000DA31AC"
  122.21 +               BuildableName = "libCDVSplashScreenLib.a"
  122.22 +               BlueprintName = "CDVSplashScreenLib"
  122.23 +               ReferencedContainer = "container:CDVSplashScreenTest.xcodeproj">
  122.24 +            </BuildableReference>
  122.25 +         </BuildActionEntry>
  122.26 +      </BuildActionEntries>
  122.27 +   </BuildAction>
  122.28 +   <TestAction
  122.29 +      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
  122.30 +      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
  122.31 +      shouldUseLaunchSchemeArgsEnv = "YES"
  122.32 +      buildConfiguration = "Debug">
  122.33 +      <Testables>
  122.34 +      </Testables>
  122.35 +   </TestAction>
  122.36 +   <LaunchAction
  122.37 +      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
  122.38 +      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
  122.39 +      launchStyle = "0"
  122.40 +      useCustomWorkingDirectory = "NO"
  122.41 +      buildConfiguration = "Debug"
  122.42 +      ignoresPersistentStateOnLaunch = "NO"
  122.43 +      debugDocumentVersioning = "YES"
  122.44 +      allowLocationSimulation = "YES">
  122.45 +      <MacroExpansion>
  122.46 +         <BuildableReference
  122.47 +            BuildableIdentifier = "primary"
  122.48 +            BlueprintIdentifier = "7E9F519419DA102000DA31AC"
  122.49 +            BuildableName = "libCDVSplashScreenLib.a"
  122.50 +            BlueprintName = "CDVSplashScreenLib"
  122.51 +            ReferencedContainer = "container:CDVSplashScreenTest.xcodeproj">
  122.52 +         </BuildableReference>
  122.53 +      </MacroExpansion>
  122.54 +      <AdditionalOptions>
  122.55 +      </AdditionalOptions>
  122.56 +   </LaunchAction>
  122.57 +   <ProfileAction
  122.58 +      shouldUseLaunchSchemeArgsEnv = "YES"
  122.59 +      savedToolIdentifier = ""
  122.60 +      useCustomWorkingDirectory = "NO"
  122.61 +      buildConfiguration = "Release"
  122.62 +      debugDocumentVersioning = "YES">
  122.63 +      <MacroExpansion>
  122.64 +         <BuildableReference
  122.65 +            BuildableIdentifier = "primary"
  122.66 +            BlueprintIdentifier = "7E9F519419DA102000DA31AC"
  122.67 +            BuildableName = "libCDVSplashScreenLib.a"
  122.68 +            BlueprintName = "CDVSplashScreenLib"
  122.69 +            ReferencedContainer = "container:CDVSplashScreenTest.xcodeproj">
  122.70 +         </BuildableReference>
  122.71 +      </MacroExpansion>
  122.72 +   </ProfileAction>
  122.73 +   <AnalyzeAction
  122.74 +      buildConfiguration = "Debug">
  122.75 +   </AnalyzeAction>
  122.76 +   <ArchiveAction
  122.77 +      buildConfiguration = "Release"
  122.78 +      revealArchiveInOrganizer = "YES">
  122.79 +   </ArchiveAction>
  122.80 +</Scheme>
   123.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   123.2 +++ b/Touchgui/plugins/org.apache.cordova.splashscreen/tests/ios/CDVSplashScreenTest/CDVSplashScreenTest.xcodeproj/xcshareddata/xcschemes/CDVSplashScreenLibTests.xcscheme	Thu Jun 04 14:50:33 2015 +0200
   123.3 @@ -0,0 +1,96 @@
   123.4 +<?xml version="1.0" encoding="UTF-8"?>
   123.5 +<Scheme
   123.6 +   LastUpgradeVersion = "0600"
   123.7 +   version = "1.3">
   123.8 +   <BuildAction
   123.9 +      parallelizeBuildables = "YES"
  123.10 +      buildImplicitDependencies = "YES">
  123.11 +      <BuildActionEntries>
  123.12 +         <BuildActionEntry
  123.13 +            buildForTesting = "YES"
  123.14 +            buildForRunning = "YES"
  123.15 +            buildForProfiling = "NO"
  123.16 +            buildForArchiving = "NO"
  123.17 +            buildForAnalyzing = "YES">
  123.18 +            <BuildableReference
  123.19 +               BuildableIdentifier = "primary"
  123.20 +               BlueprintIdentifier = "7E9F519E19DA102000DA31AC"
  123.21 +               BuildableName = "CDVSplashScreenLibTests.xctest"
  123.22 +               BlueprintName = "CDVSplashScreenLibTests"
  123.23 +               ReferencedContainer = "container:CDVSplashScreenTest.xcodeproj">
  123.24 +            </BuildableReference>
  123.25 +         </BuildActionEntry>
  123.26 +      </BuildActionEntries>
  123.27 +   </BuildAction>
  123.28 +   <TestAction
  123.29 +      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
  123.30 +      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
  123.31 +      shouldUseLaunchSchemeArgsEnv = "YES"
  123.32 +      buildConfiguration = "Debug">
  123.33 +      <Testables>
  123.34 +         <TestableReference
  123.35 +            skipped = "NO">
  123.36 +            <BuildableReference
  123.37 +               BuildableIdentifier = "primary"
  123.38 +               BlueprintIdentifier = "7E9F519E19DA102000DA31AC"
  123.39 +               BuildableName = "CDVSplashScreenLibTests.xctest"
  123.40 +               BlueprintName = "CDVSplashScreenLibTests"
  123.41 +               ReferencedContainer = "container:CDVSplashScreenTest.xcodeproj">
  123.42 +            </BuildableReference>
  123.43 +         </TestableReference>
  123.44 +      </Testables>
  123.45 +      <MacroExpansion>
  123.46 +         <BuildableReference
  123.47 +            BuildableIdentifier = "primary"
  123.48 +            BlueprintIdentifier = "7E9F519E19DA102000DA31AC"
  123.49 +            BuildableName = "CDVSplashScreenLibTests.xctest"
  123.50 +            BlueprintName = "CDVSplashScreenLibTests"
  123.51 +            ReferencedContainer = "container:CDVSplashScreenTest.xcodeproj">
  123.52 +         </BuildableReference>
  123.53 +      </MacroExpansion>
  123.54 +   </TestAction>
  123.55 +   <LaunchAction
  123.56 +      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
  123.57 +      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
  123.58 +      launchStyle = "0"
  123.59 +      useCustomWorkingDirectory = "NO"
  123.60 +      buildConfiguration = "Debug"
  123.61 +      ignoresPersistentStateOnLaunch = "NO"
  123.62 +      debugDocumentVersioning = "YES"
  123.63 +      allowLocationSimulation = "YES">
  123.64 +      <MacroExpansion>
  123.65 +         <BuildableReference
  123.66 +            BuildableIdentifier = "primary"
  123.67 +            BlueprintIdentifier = "7E9F519E19DA102000DA31AC"
  123.68 +            BuildableName = "CDVSplashScreenLibTests.xctest"
  123.69 +            BlueprintName = "CDVSplashScreenLibTests"
  123.70 +            ReferencedContainer = "container:CDVSplashScreenTest.xcodeproj">
  123.71 +         </BuildableReference>
  123.72 +      </MacroExpansion>
  123.73 +      <AdditionalOptions>
  123.74 +      </AdditionalOptions>
  123.75 +   </LaunchAction>
  123.76 +   <ProfileAction
  123.77 +      shouldUseLaunchSchemeArgsEnv = "YES"
  123.78 +      savedToolIdentifier = ""
  123.79 +      useCustomWorkingDirectory = "NO"
  123.80 +      buildConfiguration = "Release"
  123.81 +      debugDocumentVersioning = "YES">
  123.82 +      <MacroExpansion>
  123.83 +         <BuildableReference
  123.84 +            BuildableIdentifier = "primary"
  123.85 +            BlueprintIdentifier = "7E9F519E19DA102000DA31AC"
  123.86 +            BuildableName = "CDVSplashScreenLibTests.xctest"
  123.87 +            BlueprintName = "CDVSplashScreenLibTests"
  123.88 +            ReferencedContainer = "container:CDVSplashScreenTest.xcodeproj">
  123.89 +         </BuildableReference>
  123.90 +      </MacroExpansion>
  123.91 +   </ProfileAction>
  123.92 +   <AnalyzeAction
  123.93 +      buildConfiguration = "Debug">
  123.94 +   </AnalyzeAction>
  123.95 +   <ArchiveAction
  123.96 +      buildConfiguration = "Release"
  123.97 +      revealArchiveInOrganizer = "YES">
  123.98 +   </ArchiveAction>
  123.99 +</Scheme>
   124.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   124.2 +++ b/Touchgui/plugins/org.apache.cordova.splashscreen/tests/ios/README.md	Thu Jun 04 14:50:33 2015 +0200
   124.3 @@ -0,0 +1,21 @@
   124.4 +# iOS Tests for CDVSplashScreen
   124.5 +
   124.6 +You need to install `node.js` to pull in `cordova-ios`.
   124.7 +
   124.8 +First install cordova-ios:
   124.9 +
  124.10 +    npm install
  124.11 +
  124.12 +... in the current folder.
  124.13 +
  124.14 +
  124.15 +# Testing from Xcode
  124.16 +
  124.17 +1. Launch the `CDVSplashScreenTest.xcworkspace` file.
  124.18 +2. Choose "CDVSplashScreenLibTests" from the scheme drop-down menu
  124.19 +3. Click and hold on the `Play` button, and choose the `Wrench` icon to run the tests
  124.20 +
  124.21 +
  124.22 +# Testing from the command line
  124.23 +
  124.24 +    npm test
   125.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   125.2 +++ b/Touchgui/plugins/org.apache.cordova.splashscreen/tests/ios/package.json	Thu Jun 04 14:50:33 2015 +0200
   125.3 @@ -0,0 +1,13 @@
   125.4 +{
   125.5 +    "name": "cordova-plugin-splashscreen-test-ios",
   125.6 +    "version": "1.0.0",
   125.7 +    "description": "iOS Unit Tests for Splashscreen Plugin",
   125.8 +    "author": "Apache Software Foundation",
   125.9 +    "license": "Apache Version 2.0",
  125.10 +    "dependencies": {
  125.11 +        "cordova-ios": "^3.6.0"
  125.12 +    },
  125.13 +    "scripts": {
  125.14 +        "test": "xcodebuild -scheme CordovaLib && xcodebuild test -scheme CDVSplashScreenLibTests -destination 'platform=iOS Simulator,name=iPhone 5'"
  125.15 +    }    
  125.16 +}
  125.17 \ No newline at end of file
   126.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   126.2 +++ b/Touchgui/plugins/org.apache.cordova.splashscreen/tests/plugin.xml	Thu Jun 04 14:50:33 2015 +0200
   126.3 @@ -0,0 +1,29 @@
   126.4 +<?xml version="1.0" encoding="UTF-8"?>
   126.5 +<!--
   126.6 +  Licensed to the Apache Software Foundation (ASF) under one
   126.7 +  or more contributor license agreements.  See the NOTICE file
   126.8 +  distributed with this work for additional information
   126.9 +  regarding copyright ownership.  The ASF licenses this file
  126.10 +  to you under the Apache License, Version 2.0 (the
  126.11 +  "License"); you may not use this file except in compliance
  126.12 +  with the License.  You may obtain a copy of the License at
  126.13 +
  126.14 +    http://www.apache.org/licenses/LICENSE-2.0
  126.15 +
  126.16 +  Unless required by applicable law or agreed to in writing,
  126.17 +  software distributed under the License is distributed on an
  126.18 +  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
  126.19 +  KIND, either express or implied.  See the License for the
  126.20 +  specific language governing permissions and limitations
  126.21 +  under the License.
  126.22 +-->
  126.23 +
  126.24 +<plugin xmlns="http://apache.org/cordova/ns/plugins/1.0"
  126.25 +    id="org.apache.cordova.splashscreen.tests"
  126.26 +    version="0.3.5">
  126.27 +    <name>Cordova Splashscreen Plugin Tests</name>
  126.28 +    <license>Apache 2.0</license>
  126.29 +
  126.30 +    <js-module src="tests.js" name="tests">
  126.31 +    </js-module>
  126.32 +</plugin>
   127.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   127.2 +++ b/Touchgui/plugins/org.apache.cordova.splashscreen/tests/tests.js	Thu Jun 04 14:50:33 2015 +0200
   127.3 @@ -0,0 +1,62 @@
   127.4 +/*
   127.5 + *
   127.6 + * Licensed to the Apache Software Foundation (ASF) under one
   127.7 + * or more contributor license agreements.  See the NOTICE file
   127.8 + * distributed with this work for additional information
   127.9 + * regarding copyright ownership.  The ASF licenses this file
  127.10 + * to you under the Apache License, Version 2.0 (the
  127.11 + * "License"); you may not use this file except in compliance
  127.12 + * with the License.  You may obtain a copy of the License at
  127.13 + *
  127.14 + *   http://www.apache.org/licenses/LICENSE-2.0
  127.15 + *
  127.16 + * Unless required by applicable law or agreed to in writing,
  127.17 + * software distributed under the License is distributed on an
  127.18 + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
  127.19 + * KIND, either express or implied.  See the License for the
  127.20 + * specific language governing permissions and limitations
  127.21 + * under the License.
  127.22 + *
  127.23 +*/
  127.24 +
  127.25 +exports.defineAutoTest = function () {
  127.26 +    describe('Splashscreen (cordova)', function () {
  127.27 +        it("splashscreen.spec.1 should exist", function () {
  127.28 +            expect(navigator.splashscreen).toBeDefined();
  127.29 +        });
  127.30 +
  127.31 +        it("splashscreen.spec.2 exec method should exist", function () {
  127.32 +            expect(navigator.splashscreen.show).toBeDefined();
  127.33 +            expect(typeof navigator.splashscreen.show).toBe('function');
  127.34 +        });
  127.35 +
  127.36 +        it("splashscreen.spec.3 exec method should exist", function () {
  127.37 +            expect(navigator.splashscreen.hide).toBeDefined();
  127.38 +            expect(typeof navigator.splashscreen.hide).toBe('function');
  127.39 +        });
  127.40 +    });
  127.41 +};
  127.42 +
  127.43 +exports.defineManualTests = function (contentEl, createActionButton) {
  127.44 +    function showFor(duration) {
  127.45 +        navigator.splashscreen.show();
  127.46 +        window.setTimeout(function () {
  127.47 +            navigator.splashscreen.hide();
  127.48 +        }, 1000 * duration);
  127.49 +    }
  127.50 +
  127.51 +    contentEl.innerHTML = '<h1>Splashscreen Tests</h1>' +
  127.52 +        '<h3>Note for WP: AutoHideSplashScreen must be set to false in config.xml</h3>' +
  127.53 +        '<div id="show1"></div>' +
  127.54 +        'Expected result: Will show the Cordova splashscreen for 1 second' +
  127.55 +        '</p> <div id="show5"></div>' +
  127.56 +        'Expected result: Will show the Cordova splashscreen for 5 seconds';
  127.57 +
  127.58 +    createActionButton('Show for 1 second', function () {
  127.59 +        showFor(1);
  127.60 +    }, 'show1');
  127.61 +
  127.62 +    createActionButton('Show for 5 seconds', function () {
  127.63 +        showFor(5);
  127.64 +    }, 'show5');
  127.65 +};
   128.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   128.2 +++ b/Touchgui/plugins/org.apache.cordova.splashscreen/www/splashscreen.js	Thu Jun 04 14:50:33 2015 +0200
   128.3 @@ -0,0 +1,33 @@
   128.4 +/*
   128.5 + *
   128.6 + * Licensed to the Apache Software Foundation (ASF) under one
   128.7 + * or more contributor license agreements.  See the NOTICE file
   128.8 + * distributed with this work for additional information
   128.9 + * regarding copyright ownership.  The ASF licenses this file
  128.10 + * to you under the Apache License, Version 2.0 (the
  128.11 + * "License"); you may not use this file except in compliance
  128.12 + * with the License.  You may obtain a copy of the License at
  128.13 + *
  128.14 + *   http://www.apache.org/licenses/LICENSE-2.0
  128.15 + *
  128.16 + * Unless required by applicable law or agreed to in writing,
  128.17 + * software distributed under the License is distributed on an
  128.18 + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
  128.19 + * KIND, either express or implied.  See the License for the
  128.20 + * specific language governing permissions and limitations
  128.21 + * under the License.
  128.22 + *
  128.23 +*/
  128.24 +
  128.25 +var exec = require('cordova/exec');
  128.26 +
  128.27 +var splashscreen = {
  128.28 +    show:function() {
  128.29 +        exec(null, null, "SplashScreen", "show", []);
  128.30 +    },
  128.31 +    hide:function() {
  128.32 +        exec(null, null, "SplashScreen", "hide", []);
  128.33 +    }
  128.34 +};
  128.35 +
  128.36 +module.exports = splashscreen;
   129.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   129.2 +++ b/Touchgui/plugins/org.apache.cordova.splashscreen/www/windows8/SplashScreenProxy.js	Thu Jun 04 14:50:33 2015 +0200
   129.3 @@ -0,0 +1,106 @@
   129.4 +/*
   129.5 + *
   129.6 + * Licensed to the Apache Software Foundation (ASF) under one
   129.7 + * or more contributor license agreements.  See the NOTICE file
   129.8 + * distributed with this work for additional information
   129.9 + * regarding copyright ownership.  The ASF licenses this file
  129.10 + * to you under the Apache License, Version 2.0 (the
  129.11 + * "License"); you may not use this file except in compliance
  129.12 + * with the License.  You may obtain a copy of the License at
  129.13 + *
  129.14 + *   http://www.apache.org/licenses/LICENSE-2.0
  129.15 + *
  129.16 + * Unless required by applicable law or agreed to in writing,
  129.17 + * software distributed under the License is distributed on an
  129.18 + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
  129.19 + * KIND, either express or implied.  See the License for the
  129.20 + * specific language governing permissions and limitations
  129.21 + * under the License.
  129.22 + *
  129.23 +*/
  129.24 +
  129.25 +/*jslint sloppy:true */
  129.26 +/*global Windows:true, require, module, window, document, WinJS */
  129.27 +
  129.28 +var cordova = require('cordova'),
  129.29 +    channel = require('cordova/channel');
  129.30 +
  129.31 +/* This is the actual implementation part that returns the result on Windows 8
  129.32 +*/
  129.33 +
  129.34 +var position = { x: 0, y: 0, width: 0, height: 0 };  // defined by evt.detail.splashScreen.imageLocation
  129.35 +var splash = null; //
  129.36 +var localSplash; // the image to display
  129.37 +var localSplashImage;
  129.38 +var bgColor = "#464646";
  129.39 +
  129.40 +
  129.41 +
  129.42 +function updateImageLocation() {
  129.43 +    localSplash.style.width = window.innerWidth + "px";
  129.44 +    localSplash.style.height = window.innerHeight + "px";
  129.45 +    localSplash.style.top = "0px";
  129.46 +    localSplash.style.left = "0px";
  129.47 +
  129.48 +    localSplashImage.style.top = position.y + "px";
  129.49 +    localSplashImage.style.left = position.x + "px";
  129.50 +    localSplashImage.style.height = position.height + "px";
  129.51 +    localSplashImage.style.width = position.width + "px";
  129.52 +}
  129.53 +
  129.54 +function onResize(evt) {
  129.55 +    if (splash) {
  129.56 +        position = splash.imageLocation;
  129.57 +        updateImageLocation();
  129.58 +    }
  129.59 +}
  129.60 +
  129.61 +var SplashScreen = {
  129.62 +    setBGColor: function (cssBGColor) {
  129.63 +        bgColor = cssBGColor;
  129.64 +        if (localSplash) {
  129.65 +            localSplash.style.backgroundColor = bgColor;
  129.66 +        }
  129.67 +    },
  129.68 +    show: function () {
  129.69 +        window.addEventListener("resize", onResize, false);
  129.70 +        localSplash = document.createElement("div");
  129.71 +        localSplash.style.backgroundColor = bgColor;
  129.72 +        localSplash.style.position = "absolute";
  129.73 +
  129.74 +        localSplashImage = document.createElement("img");
  129.75 +        localSplashImage.src = "ms-appx:///images/splashscreen.png";
  129.76 +        localSplashImage.style.position = "absolute";
  129.77 +
  129.78 +        updateImageLocation();
  129.79 +
  129.80 +        localSplash.appendChild(localSplashImage);
  129.81 +        document.body.appendChild(localSplash);
  129.82 +    },
  129.83 +    hide: function () {
  129.84 +        window.removeEventListener("resize", onResize, false);
  129.85 +        document.body.removeChild(localSplash);
  129.86 +        localSplash = null;
  129.87 +    }
  129.88 +};
  129.89 +
  129.90 +module.exports = SplashScreen;
  129.91 +
  129.92 +function activated(evt) {
  129.93 +    if (evt.detail.kind === Windows.ApplicationModel.Activation.ActivationKind.launch) {
  129.94 +        splash = evt.detail.splashScreen;
  129.95 +        position = evt.detail.splashScreen.imageLocation;
  129.96 +    }
  129.97 +}
  129.98 +
  129.99 +
 129.100 +
 129.101 +
 129.102 +channel.onCordovaReady.subscribe(function (evt) {
 129.103 +    document.addEventListener("DOMContentLoaded", function (evt) {
 129.104 +        WinJS.Application.addEventListener("activated", activated, false);
 129.105 +    }, false);
 129.106 +});
 129.107 +
 129.108 +require("cordova/exec/proxy").add("SplashScreen", SplashScreen);
 129.109 +
   130.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   130.2 +++ b/Touchgui/plugins/org.apache.cordova.vibration/.fetch.json	Thu Jun 04 14:50:33 2015 +0200
   130.3 @@ -0,0 +1,1 @@
   130.4 +{"source":{"type":"local","path":"/opt/intel/XDK_IoT_Edition/xdk/components/server/cordova-plugins/org.apache.cordova.vibration"}}
   130.5 \ No newline at end of file
   131.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   131.2 +++ b/Touchgui/plugins/org.apache.cordova.vibration/CONTRIBUTING.md	Thu Jun 04 14:50:33 2015 +0200
   131.3 @@ -0,0 +1,37 @@
   131.4 +<!--
   131.5 +#
   131.6 +# Licensed to the Apache Software Foundation (ASF) under one
   131.7 +# or more contributor license agreements.  See the NOTICE file
   131.8 +# distributed with this work for additional information
   131.9 +# regarding copyright ownership.  The ASF licenses this file
  131.10 +# to you under the Apache License, Version 2.0 (the
  131.11 +# "License"); you may not use this file except in compliance
  131.12 +# with the License.  You may obtain a copy of the License at
  131.13 +#
  131.14 +# http://www.apache.org/licenses/LICENSE-2.0
  131.15 +#
  131.16 +# Unless required by applicable law or agreed to in writing,
  131.17 +# software distributed under the License is distributed on an
  131.18 +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
  131.19 +#  KIND, either express or implied.  See the License for the
  131.20 +# specific language governing permissions and limitations
  131.21 +# under the License.
  131.22 +#
  131.23 +-->
  131.24 +
  131.25 +# Contributing to Apache Cordova
  131.26 +
  131.27 +Anyone can contribute to Cordova. And we need your contributions.
  131.28 +
  131.29 +There are multiple ways to contribute: report bugs, improve the docs, and
  131.30 +contribute code.
  131.31 +
  131.32 +For instructions on this, start with the 
  131.33 +[contribution overview](http://cordova.apache.org/#contribute).
  131.34 +
  131.35 +The details are explained there, but the important items are:
  131.36 + - Sign and submit an Apache ICLA (Contributor License Agreement).
  131.37 + - Have a Jira issue open that corresponds to your contribution.
  131.38 + - Run the tests so your patch doesn't break existing functionality.
  131.39 +
  131.40 +We look forward to your contributions!
   132.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   132.2 +++ b/Touchgui/plugins/org.apache.cordova.vibration/LICENSE	Thu Jun 04 14:50:33 2015 +0200
   132.3 @@ -0,0 +1,202 @@
   132.4 +
   132.5 +                                 Apache License
   132.6 +                           Version 2.0, January 2004
   132.7 +                        http://www.apache.org/licenses/
   132.8 +
   132.9 +   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
  132.10 +
  132.11 +   1. Definitions.
  132.12 +
  132.13 +      "License" shall mean the terms and conditions for use, reproduction,
  132.14 +      and distribution as defined by Sections 1 through 9 of this document.
  132.15 +
  132.16 +      "Licensor" shall mean the copyright owner or entity authorized by
  132.17 +      the copyright owner that is granting the License.
  132.18 +
  132.19 +      "Legal Entity" shall mean the union of the acting entity and all
  132.20 +      other entities that control, are controlled by, or are under common
  132.21 +      control with that entity. For the purposes of this definition,
  132.22 +      "control" means (i) the power, direct or indirect, to cause the
  132.23 +      direction or management of such entity, whether by contract or
  132.24 +      otherwise, or (ii) ownership of fifty percent (50%) or more of the
  132.25 +      outstanding shares, or (iii) beneficial ownership of such entity.
  132.26 +
  132.27 +      "You" (or "Your") shall mean an individual or Legal Entity
  132.28 +      exercising permissions granted by this License.
  132.29 +
  132.30 +      "Source" form shall mean the preferred form for making modifications,
  132.31 +      including but not limited to software source code, documentation
  132.32 +      source, and configuration files.
  132.33 +
  132.34 +      "Object" form shall mean any form resulting from mechanical
  132.35 +      transformation or translation of a Source form, including but
  132.36 +      not limited to compiled object code, generated documentation,
  132.37 +      and conversions to other media types.
  132.38 +
  132.39 +      "Work" shall mean the work of authorship, whether in Source or
  132.40 +      Object form, made available under the License, as indicated by a
  132.41 +      copyright notice that is included in or attached to the work
  132.42 +      (an example is provided in the Appendix below).
  132.43 +
  132.44 +      "Derivative Works" shall mean any work, whether in Source or Object
  132.45 +      form, that is based on (or derived from) the Work and for which the
  132.46 +      editorial revisions, annotations, elaborations, or other modifications
  132.47 +      represent, as a whole, an original work of authorship. For the purposes
  132.48 +      of this License, Derivative Works shall not include works that remain
  132.49 +      separable from, or merely link (or bind by name) to the interfaces of,
  132.50 +      the Work and Derivative Works thereof.
  132.51 +
  132.52 +      "Contribution" shall mean any work of authorship, including
  132.53 +      the original version of the Work and any modifications or additions
  132.54 +      to that Work or Derivative Works thereof, that is intentionally
  132.55 +      submitted to Licensor for inclusion in the Work by the copyright owner
  132.56 +      or by an individual or Legal Entity authorized to submit on behalf of
  132.57 +      the copyright owner. For the purposes of this definition, "submitted"
  132.58 +      means any form of electronic, verbal, or written communication sent
  132.59 +      to the Licensor or its representatives, including but not limited to
  132.60 +      communication on electronic mailing lists, source code control systems,
  132.61 +      and issue tracking systems that are managed by, or on behalf of, the
  132.62 +      Licensor for the purpose of discussing and improving the Work, but
  132.63 +      excluding communication that is conspicuously marked or otherwise
  132.64 +      designated in writing by the copyright owner as "Not a Contribution."
  132.65 +
  132.66 +      "Contributor" shall mean Licensor and any individual or Legal Entity
  132.67 +      on behalf of whom a Contribution has been received by Licensor and
  132.68 +      subsequently incorporated within the Work.
  132.69 +
  132.70 +   2. Grant of Copyright License. Subject to the terms and conditions of
  132.71 +      this License, each Contributor hereby grants to You a perpetual,
  132.72 +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
  132.73 +      copyright license to reproduce, prepare Derivative Works of,
  132.74 +      publicly display, publicly perform, sublicense, and distribute the
  132.75 +      Work and such Derivative Works in Source or Object form.
  132.76 +
  132.77 +   3. Grant of Patent License. Subject to the terms and conditions of
  132.78 +      this License, each Contributor hereby grants to You a perpetual,
  132.79 +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
  132.80 +      (except as stated in this section) patent license to make, have made,
  132.81 +      use, offer to sell, sell, import, and otherwise transfer the Work,
  132.82 +      where such license applies only to those patent claims licensable
  132.83 +      by such Contributor that are necessarily infringed by their
  132.84 +      Contribution(s) alone or by combination of their Contribution(s)
  132.85 +      with the Work to which such Contribution(s) was submitted. If You
  132.86 +      institute patent litigation against any entity (including a
  132.87 +      cross-claim or counterclaim in a lawsuit) alleging that the Work
  132.88 +      or a Contribution incorporated within the Work constitutes direct
  132.89 +      or contributory patent infringement, then any patent licenses
  132.90 +      granted to You under this License for that Work shall terminate
  132.91 +      as of the date such litigation is filed.
  132.92 +
  132.93 +   4. Redistribution. You may reproduce and distribute copies of the
  132.94 +      Work or Derivative Works thereof in any medium, with or without
  132.95 +      modifications, and in Source or Object form, provided that You
  132.96 +      meet the following conditions:
  132.97 +
  132.98 +      (a) You must give any other recipients of the Work or
  132.99 +          Derivative Works a copy of this License; and
 132.100 +
 132.101 +      (b) You must cause any modified files to carry prominent notices
 132.102 +          stating that You changed the files; and
 132.103 +
 132.104 +      (c) You must retain, in the Source form of any Derivative Works
 132.105 +          that You distribute, all copyright, patent, trademark, and
 132.106 +          attribution notices from the Source form of the Work,
 132.107 +          excluding those notices that do not pertain to any part of
 132.108 +          the Derivative Works; and
 132.109 +
 132.110 +      (d) If the Work includes a "NOTICE" text file as part of its
 132.111 +          distribution, then any Derivative Works that You distribute must
 132.112 +          include a readable copy of the attribution notices contained
 132.113 +          within such NOTICE file, excluding those notices that do not
 132.114 +          pertain to any part of the Derivative Works, in at least one
 132.115 +          of the following places: within a NOTICE text file distributed
 132.116 +          as part of the Derivative Works; within the Source form or
 132.117 +          documentation, if provided along with the Derivative Works; or,
 132.118 +          within a display generated by the Derivative Works, if and
 132.119 +          wherever such third-party notices normally appear. The contents
 132.120 +          of the NOTICE file are for informational purposes only and
 132.121 +          do not modify the License. You may add Your own attribution
 132.122 +          notices within Derivative Works that You distribute, alongside
 132.123 +          or as an addendum to the NOTICE text from the Work, provided
 132.124 +          that such additional attribution notices cannot be construed
 132.125 +          as modifying the License.
 132.126 +
 132.127 +      You may add Your own copyright statement to Your modifications and
 132.128 +      may provide additional or different license terms and conditions
 132.129 +      for use, reproduction, or distribution of Your modifications, or
 132.130 +      for any such Derivative Works as a whole, provided Your use,
 132.131 +      reproduction, and distribution of the Work otherwise complies with
 132.132 +      the conditions stated in this License.
 132.133 +
 132.134 +   5. Submission of Contributions. Unless You explicitly state otherwise,
 132.135 +      any Contribution intentionally submitted for inclusion in the Work
 132.136 +      by You to the Licensor shall be under the terms and conditions of
 132.137 +      this License, without any additional terms or conditions.
 132.138 +      Notwithstanding the above, nothing herein shall supersede or modify
 132.139 +      the terms of any separate license agreement you may have executed
 132.140 +      with Licensor regarding such Contributions.
 132.141 +
 132.142 +   6. Trademarks. This License does not grant permission to use the trade
 132.143 +      names, trademarks, service marks, or product names of the Licensor,
 132.144 +      except as required for reasonable and customary use in describing the
 132.145 +      origin of the Work and reproducing the content of the NOTICE file.
 132.146 +
 132.147 +   7. Disclaimer of Warranty. Unless required by applicable law or
 132.148 +      agreed to in writing, Licensor provides the Work (and each
 132.149 +      Contributor provides its Contributions) on an "AS IS" BASIS,
 132.150 +      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
 132.151 +      implied, including, without limitation, any warranties or conditions
 132.152 +      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
 132.153 +      PARTICULAR PURPOSE. You are solely responsible for determining the
 132.154 +      appropriateness of using or redistributing the Work and assume any
 132.155 +      risks associated with Your exercise of permissions under this License.
 132.156 +
 132.157 +   8. Limitation of Liability. In no event and under no legal theory,
 132.158 +      whether in tort (including negligence), contract, or otherwise,
 132.159 +      unless required by applicable law (such as deliberate and grossly
 132.160 +      negligent acts) or agreed to in writing, shall any Contributor be
 132.161 +      liable to You for damages, including any direct, indirect, special,
 132.162 +      incidental, or consequential damages of any character arising as a
 132.163 +      result of this License or out of the use or inability to use the
 132.164 +      Work (including but not limited to damages for loss of goodwill,
 132.165 +      work stoppage, computer failure or malfunction, or any and all
 132.166 +      other commercial damages or losses), even if such Contributor
 132.167 +      has been advised of the possibility of such damages.
 132.168 +
 132.169 +   9. Accepting Warranty or Additional Liability. While redistributing
 132.170 +      the Work or Derivative Works thereof, You may choose to offer,
 132.171 +      and charge a fee for, acceptance of support, warranty, indemnity,
 132.172 +      or other liability obligations and/or rights consistent with this
 132.173 +      License. However, in accepting such obligations, You may act only
 132.174 +      on Your own behalf and on Your sole responsibility, not on behalf
 132.175 +      of any other Contributor, and only if You agree to indemnify,
 132.176 +      defend, and hold each Contributor harmless for any liability
 132.177 +      incurred by, or claims asserted against, such Contributor by reason
 132.178 +      of your accepting any such warranty or additional liability.
 132.179 +
 132.180 +   END OF TERMS AND CONDITIONS
 132.181 +
 132.182 +   APPENDIX: How to apply the Apache License to your work.
 132.183 +
 132.184 +      To apply the Apache License to your work, attach the following
 132.185 +      boilerplate notice, with the fields enclosed by brackets "[]"
 132.186 +      replaced with your own identifying information. (Don't include
 132.187 +      the brackets!)  The text should be enclosed in the appropriate
 132.188 +      comment syntax for the file format. We also recommend that a
 132.189 +      file or class name and description of purpose be included on the
 132.190 +      same "printed page" as the copyright notice for easier
 132.191 +      identification within third-party archives.
 132.192 +
 132.193 +   Copyright [yyyy] [name of copyright owner]
 132.194 +
 132.195 +   Licensed under the Apache License, Version 2.0 (the "License");
 132.196 +   you may not use this file except in compliance with the License.
 132.197 +   You may obtain a copy of the License at
 132.198 +
 132.199 +       http://www.apache.org/licenses/LICENSE-2.0
 132.200 +
 132.201 +   Unless required by applicable law or agreed to in writing, software
 132.202 +   distributed under the License is distributed on an "AS IS" BASIS,
 132.203 +   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 132.204 +   See the License for the specific language governing permissions and
 132.205 +   limitations under the License.
 132.206 \ No newline at end of file
   133.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   133.2 +++ b/Touchgui/plugins/org.apache.cordova.vibration/NOTICE	Thu Jun 04 14:50:33 2015 +0200
   133.3 @@ -0,0 +1,7 @@
   133.4 +Apache Cordova
   133.5 +Copyright 2012 The Apache Software Foundation
   133.6 +
   133.7 +This product includes software developed at
   133.8 +The Apache Software Foundation (http://www.apache.org/).
   133.9 +
  133.10 +This product includes software developed by Joerg Wiedenmann under the zlib license (http://www.gzip.org/zlib/zlib_license.html)
   134.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   134.2 +++ b/Touchgui/plugins/org.apache.cordova.vibration/README.md	Thu Jun 04 14:50:33 2015 +0200
   134.3 @@ -0,0 +1,23 @@
   134.4 +<!---
   134.5 + license: Licensed to the Apache Software Foundation (ASF) under one
   134.6 +         or more contributor license agreements.  See the NOTICE file
   134.7 +         distributed with this work for additional information
   134.8 +         regarding copyright ownership.  The ASF licenses this file
   134.9 +         to you under the Apache License, Version 2.0 (the
  134.10 +         "License"); you may not use this file except in compliance
  134.11 +         with the License.  You may obtain a copy of the License at
  134.12 +
  134.13 +           http://www.apache.org/licenses/LICENSE-2.0
  134.14 +
  134.15 +         Unless required by applicable law or agreed to in writing,
  134.16 +         software distributed under the License is distributed on an
  134.17 +         "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
  134.18 +         KIND, either express or implied.  See the License for the
  134.19 +         specific language governing permissions and limitations
  134.20 +         under the License.
  134.21 +-->
  134.22 +
  134.23 +# org.apache.cordova.vibration
  134.24 +
  134.25 +Plugin documentation: [doc/index.md](doc/index.md)
  134.26 +
   135.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   135.2 +++ b/Touchgui/plugins/org.apache.cordova.vibration/RELEASENOTES.md	Thu Jun 04 14:50:33 2015 +0200
   135.3 @@ -0,0 +1,110 @@
   135.4 +<!--
   135.5 +#
   135.6 +# Licensed to the Apache Software Foundation (ASF) under one
   135.7 +# or more contributor license agreements.  See the NOTICE file
   135.8 +# distributed with this work for additional information
   135.9 +# regarding copyright ownership.  The ASF licenses this file
  135.10 +# to you under the Apache License, Version 2.0 (the
  135.11 +# "License"); you may not use this file except in compliance
  135.12 +# with the License.  You may obtain a copy of the License at
  135.13 +# 
  135.14 +# http://www.apache.org/licenses/LICENSE-2.0
  135.15 +# 
  135.16 +# Unless required by applicable law or agreed to in writing,
  135.17 +# software distributed under the License is distributed on an
  135.18 +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
  135.19 +#  KIND, either express or implied.  See the License for the
  135.20 +# specific language governing permissions and limitations
  135.21 +# under the License.
  135.22 +#
  135.23 +-->
  135.24 +# Release Notes
  135.25 +
  135.26 +### 0.3.0 (Sept 5, 2013)
  135.27 +* Initial FirefoxOS support
  135.28 +* [CB-4661] VIBRATE permission for Android
  135.29 +
  135.30 +### 0.3.2 (Sept 25, 2013)
  135.31 +* CB-4889 bumping&resetting version
  135.32 +* CB-4889 renaming org.apache.cordova.core.vibration to org.apache.cordova.vibration
  135.33 +* Rename CHANGELOG.md -> RELEASENOTES.md
  135.34 +* updated to work with ffos commandProxy
  135.35 +* fixed plugin.xml for vibration
  135.36 +* [CB-4593] [Blackberry10] Added vibration support for bb10
  135.37 +* updated plugin to work with ffos
  135.38 +* [CB-4752] Incremented plugin version on dev branch.
  135.39 +
  135.40 +### 0.3.3 (Oct 9, 2013)
  135.41 +* add missing android namespace
  135.42 +* [CB-4915] Incremented plugin version on dev branch.
  135.43 +
  135.44 +### 0.3.4 (Oct 28, 2013)
  135.45 +* add repo + issue tag to plugin.xml for vibration plugin
  135.46 +* corrected plugin.xml to write properly to config.xml for ffos
  135.47 +* [CB-5010] Incremented plugin version on dev branch.
  135.48 +
  135.49 +### 0.3.5 (Dec 4, 2013)
  135.50 +* add ubuntu platform
  135.51 +* Added amazon-fireos platform. Change to include amazon-fireos as a platform if the user agent string contains 'cordova-amazon-fireos'
  135.52 +* CB-4747 Fixed Blackberry background vibrate
  135.53 +
  135.54 +### 0.3.6 (Jan 02, 2014)
  135.55 +* CB-5658 Add doc/index.md for Vibration plugin
  135.56 +
  135.57 +### 0.3.7 (Feb 05, 2014)
  135.58 +* Add support for Tizen.
  135.59 +* CB-3206 - Supported platforms updated
  135.60 +
  135.61 +### 0.3.8 (Apr 17, 2014)
  135.62 +* CB-6465: Add license headers to Tizen code
  135.63 +* CB-6460: Update license headers
  135.64 +* Add NOTICE file
  135.65 +
  135.66 +### 0.3.9 (Jun 05, 2014)
  135.67 +* updated notice file
  135.68 +* Github close #11
  135.69 +* Extended vibrateWithPattern to allow for pattern repetition, implemented a complementary cancelVibration function and adapted documentation.
  135.70 +* Implemented vibrateWithPattern (for android) and adapted documentation.
  135.71 +* CB-6811 Add license to CONTRIBUTING.md
  135.72 +* CB-6491 add CONTRIBUTING.md
  135.73 +
  135.74 +### 0.3.10 (Aug 06, 2014)
  135.75 +* ubuntu: Implemented vibrateWithPattern/cancelVibration
  135.76 +* **FFOS** update VibrationProxy.js
  135.77 +* CB-6127 Updated translations for docs
  135.78 +
  135.79 +### 0.3.11 (Sep 17, 2014)
  135.80 +* CB-7249 cordova-plugin-vibration documentation translation
  135.81 +* CB-6724 documented Windows support for vibrate with pattern and cancel vibrate in manual test doc and moved tests to tests dir
  135.82 +* add longer pattern sequence for testing, change expected result for old vibrate with pattern test
  135.83 +* added more test cases, changed vibrate with pattern durations, changed where vibrateOn is set to true
  135.84 +* clear settimeout when user cancels vibration
  135.85 +* add setTimeout function to update vibrateOn var if user doesn't cancel vibrate, add note about iOS
  135.86 +* on/off button for cancel tests, add results box and msgs
  135.87 +* added tests for old vibrateWithPattern and cancelVibration calls
  135.88 +* added 'Android only' to buttons for specific tests, changed where console.log is executed for user to see earlier
  135.89 +* added tests to ensure compliance with w3c spec
  135.90 +* CB-6963 ported vibration automated & manual tests
  135.91 +* CB-6966 renamed folder to tests + added nested plugin.xml
  135.92 +* CB-6966 Ported Vibration automated & manual tests
  135.93 +* removed duplicate messaging
  135.94 +* CB-5459 slight change to the vibration documentation for pattern due to merge issue
  135.95 +* changes to how 0 is getting added to array in order to align with w3c spec
  135.96 +* changes to vibration.java to align with w3c, changes to vibration.js for backwards compatibility
  135.97 +* changes made to align with w3c spec
  135.98 +* Updated doc with Windows support for vibrate with pattern
  135.99 +* Added note to doc about w3c alignment and min time for Windows
 135.100 +* update doc with another way to cancel vibration
 135.101 +* update doc to show vibrate([num]) is a standard vibrate
 135.102 +* vibrate([num]) is treated as a vibrate not vibrate with pattern
 135.103 +* added new example to documentation
 135.104 +* updated doc for w3c alignment
 135.105 +* changes to how 0 is getting added to array in order to align with w3c spec
 135.106 +* changes to vibration.java to align with w3c, changes to vibration.js for backwards compatibility
 135.107 +* changes made to align with w3c spec
 135.108 +
 135.109 +### 0.3.12 (Dec 02, 2014)
 135.110 +* CB-8018 Add `vibrate(pattern)` fallback on vibrate for **Windows Phone 8**
 135.111 +* CB-7977 Mention `deviceready` in plugin docs
 135.112 +* CB-7700 cordova-plugin-vibration documentation translation: cordova-plugin-vibration
 135.113 +* CB-7571 Bump version of nested plugin to match parent plugin
   136.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   136.2 +++ b/Touchgui/plugins/org.apache.cordova.vibration/doc/de/index.md	Thu Jun 04 14:50:33 2015 +0200
   136.3 @@ -0,0 +1,170 @@
   136.4 +<!---
   136.5 +    Licensed to the Apache Software Foundation (ASF) under one
   136.6 +    or more contributor license agreements.  See the NOTICE file
   136.7 +    distributed with this work for additional information
   136.8 +    regarding copyright ownership.  The ASF licenses this file
   136.9 +    to you under the Apache License, Version 2.0 (the
  136.10 +    "License"); you may not use this file except in compliance
  136.11 +    with the License.  You may obtain a copy of the License at
  136.12 +
  136.13 +      http://www.apache.org/licenses/LICENSE-2.0
  136.14 +
  136.15 +    Unless required by applicable law or agreed to in writing,
  136.16 +    software distributed under the License is distributed on an
  136.17 +    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
  136.18 +    KIND, either express or implied.  See the License for the
  136.19 +    specific language governing permissions and limitations
  136.20 +    under the License.
  136.21 +-->
  136.22 +
  136.23 +# org.apache.cordova.vibration
  136.24 +
  136.25 +Dieses Plugin richtet mit dem W3C Vibration Spezifikation http://www.w3.org/TR/vibration/
  136.26 +
  136.27 +Dieses Plugin bietet eine Möglichkeit, das Gerät zu vibrieren.
  136.28 +
  136.29 +## Installation
  136.30 +
  136.31 +    cordova plugin add org.apache.cordova.vibration
  136.32 +    
  136.33 +
  136.34 +## Unterstützte Plattformen
  136.35 +
  136.36 +Navigator.Vibrate  
  136.37 +Navigator.Notification.Vibrate - Amazon Fire OS - Android - BlackBerry 10 - Firefox OS - iOS - Windows Phone 7 und 8
  136.38 +
  136.39 +navigator.notification.vibrateWithPattern,  
  136.40 +navigator.notification.cancelVibration - Android
  136.41 +
  136.42 +## vibrieren (empfohlen)
  136.43 +
  136.44 +Diese Funktion hat drei verschiedene Funktionalitäten, die auf der Grundlage von an sie übergebenen Parameter.
  136.45 +
  136.46 +### Standard vibrieren
  136.47 +
  136.48 +Vibriert das Gerät für einen bestimmten Zeitraum.
  136.49 +
  136.50 +    navigator.vibrate(time)
  136.51 +    
  136.52 +
  136.53 +oder
  136.54 +
  136.55 +    navigator.vibrate([time])
  136.56 +    
  136.57 +
  136.58 +-**Zeit**: Millisekunden das Gerät vibriert. *(Anzahl)*
  136.59 +
  136.60 +#### Beispiel
  136.61 +
  136.62 +    // Vibrate for 3 seconds
  136.63 +    navigator.vibrate(3000);
  136.64 +    
  136.65 +    // Vibrate for 3 seconds
  136.66 +    navigator.vibrate([3000]);
  136.67 +    
  136.68 +
  136.69 +#### iOS Macken
  136.70 +
  136.71 +*   **Zeit**: ignoriert die angegebene Zeit und für eine voreingestellte Zeit vibriert.
  136.72 +    
  136.73 +    navigator.vibrate(3000); // 3000 is ignored
  136.74 +
  136.75 +#### Windows und Blackberry-Kniffe
  136.76 +
  136.77 +*   **Zeit**: Max. Zeit 5000ms (5 s) und min Zeit ist 1ms
  136.78 +    
  136.79 +    navigator.vibrate(8000); // will be truncated to 5000
  136.80 +
  136.81 +### Vibrieren Sie mit einem Muster (Android und Windows nur)
  136.82 +
  136.83 +Vibriert das Gerät mit einem vorgegebenen Muster
  136.84 +
  136.85 +    navigator.vibrate(pattern);   
  136.86 +    
  136.87 +
  136.88 +*   **Muster**: Folge von Dauer (in Millisekunden) für den ein-oder Ausschalten der Vibrator. *(Array von Zahlen)*
  136.89 +
  136.90 +#### Beispiel
  136.91 +
  136.92 +    // Vibrate for 1 second
  136.93 +    // Wait for 1 second
  136.94 +    // Vibrate for 3 seconds
  136.95 +    // Wait for 1 second
  136.96 +    // Vibrate for 5 seconds
  136.97 +    navigator.vibrate([1000, 1000, 3000, 1000, 5000]);
  136.98 +    
  136.99 +
 136.100 +### "Abbrechen" Vibration (nicht in iOS unterstützt)
 136.101 +
 136.102 +Sofort bricht alle derzeit ausgeführten Schwingungen.
 136.103 +
 136.104 +    navigator.vibrate(0)
 136.105 +    
 136.106 +
 136.107 +oder
 136.108 +
 136.109 +    navigator.vibrate([])
 136.110 +    
 136.111 +
 136.112 +oder
 136.113 +
 136.114 +    navigator.vibrate([0])
 136.115 +    
 136.116 +
 136.117 +Übergabe eines Parameters 0, wird ein leeres Array, oder ein Array mit einem Element der Wert 0 auftretender Schwingungen abbrechen.
 136.118 +
 136.119 +## *Notification.Vibrate (veraltet)
 136.120 +
 136.121 +Vibriert das Gerät für einen bestimmten Zeitraum.
 136.122 +
 136.123 +    navigator.notification.vibrate(time)
 136.124 +    
 136.125 +
 136.126 +*   **Zeit**: Millisekunden das Gerät vibriert. *(Anzahl)*
 136.127 +
 136.128 +### Beispiel
 136.129 +
 136.130 +    // Vibrate for 2.5 seconds
 136.131 +    navigator.notification.vibrate(2500);
 136.132 +    
 136.133 +
 136.134 +### iOS Macken
 136.135 +
 136.136 +*   **Zeit**: ignoriert die angegebene Zeit und für eine voreingestellte Zeit vibriert.
 136.137 +    
 136.138 +        navigator.notification.vibrate();
 136.139 +        navigator.notification.vibrate(2500);   // 2500 is ignored
 136.140 +        
 136.141 +
 136.142 +## *Notification.vibrateWithPattern (veraltet)
 136.143 +
 136.144 +Vibriert das Gerät mit einem vorgegebenen Muster.
 136.145 +
 136.146 +    navigator.notification.vibrateWithPattern(pattern, repeat)
 136.147 +    
 136.148 +
 136.149 +*   **Muster**: Folge von Dauer (in Millisekunden) für den ein-oder Ausschalten der Vibrator. *(Array von Zahlen)*
 136.150 +*   **Wiederholen**: optionale Index in das Array Muster an der wiederholte (wird wiederholt, bis abgebrochen) zu starten, oder-1 für Wiederholung (Standard). *(Anzahl)*
 136.151 +
 136.152 +### Beispiel
 136.153 +
 136.154 +    // Immediately start vibrating
 136.155 +    // vibrate for 100ms,
 136.156 +    // wait for 100ms,
 136.157 +    // vibrate for 200ms,
 136.158 +    // wait for 100ms,
 136.159 +    // vibrate for 400ms,
 136.160 +    // wait for 100ms,
 136.161 +    // vibrate for 800ms,
 136.162 +    // (do not repeat)
 136.163 +    navigator.notification.vibrateWithPattern([0, 100, 100, 200, 100, 400, 100, 800]);
 136.164 +    
 136.165 +
 136.166 +## *Notification.cancelVibration (veraltet)
 136.167 +
 136.168 +Sofort bricht alle derzeit ausgeführten Schwingungen.
 136.169 +
 136.170 +    navigator.notification.cancelVibration()
 136.171 +    
 136.172 +
 136.173 +* Note - durch Angleichung an die w3c-Spezifikation, die markierten Methoden abgeschafft werden wird
 136.174 \ No newline at end of file
   137.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   137.2 +++ b/Touchgui/plugins/org.apache.cordova.vibration/doc/es/index.md	Thu Jun 04 14:50:33 2015 +0200
   137.3 @@ -0,0 +1,170 @@
   137.4 +<!---
   137.5 +    Licensed to the Apache Software Foundation (ASF) under one
   137.6 +    or more contributor license agreements.  See the NOTICE file
   137.7 +    distributed with this work for additional information
   137.8 +    regarding copyright ownership.  The ASF licenses this file
   137.9 +    to you under the Apache License, Version 2.0 (the
  137.10 +    "License"); you may not use this file except in compliance
  137.11 +    with the License.  You may obtain a copy of the License at
  137.12 +
  137.13 +      http://www.apache.org/licenses/LICENSE-2.0
  137.14 +
  137.15 +    Unless required by applicable law or agreed to in writing,
  137.16 +    software distributed under the License is distributed on an
  137.17 +    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
  137.18 +    KIND, either express or implied.  See the License for the
  137.19 +    specific language governing permissions and limitations
  137.20 +    under the License.
  137.21 +-->
  137.22 +
  137.23 +# org.apache.cordova.vibration
  137.24 +
  137.25 +Este plugin se alinea con la vibración W3C especificación http://www.w3.org/TR/vibration/
  137.26 +
  137.27 +Este plugin proporciona una manera de vibrar el dispositivo.
  137.28 +
  137.29 +## Instalación
  137.30 +
  137.31 +    cordova plugin add org.apache.cordova.vibration
  137.32 +    
  137.33 +
  137.34 +## Plataformas soportadas
  137.35 +
  137.36 +Navigator.Vibrate  
  137.37 +Navigator.Notification.Vibrate - Amazon fuego OS - sistema operativo Android - BlackBerry 10 - Firefox - iOS - Windows Phone 7 y 8
  137.38 +
  137.39 +navigator.notification.vibrateWithPattern,  
  137.40 +navigator.notification.cancelVibration - Android
  137.41 +
  137.42 +## vibrar (recomendado)
  137.43 +
  137.44 +Esta función tiene tres diferentes funcionalidades basadas en los parámetros pasados a él.
  137.45 +
  137.46 +### Estándar de vibrar
  137.47 +
  137.48 +Vibra el dispositivo para una cantidad dada de tiempo.
  137.49 +
  137.50 +    navigator.vibrate(time)
  137.51 +    
  137.52 +
  137.53 +o
  137.54 +
  137.55 +    navigator.vibrate([time])
  137.56 +    
  137.57 +
  137.58 +-**tiempo**: milisegundos a vibrar el dispositivo. *(Número)*
  137.59 +
  137.60 +#### Ejemplo
  137.61 +
  137.62 +    // Vibrate for 3 seconds
  137.63 +    navigator.vibrate(3000);
  137.64 +    
  137.65 +    // Vibrate for 3 seconds
  137.66 +    navigator.vibrate([3000]);
  137.67 +    
  137.68 +
  137.69 +#### iOS rarezas
  137.70 +
  137.71 +*   **time**: ignora el tiempo especificado y vibra por un tiempo preestablecido.
  137.72 +    
  137.73 +    navigator.vibrate(3000); // 3000 is ignored
  137.74 +
  137.75 +#### Windows y rarezas de Blackberry
  137.76 +
  137.77 +*   **tiempo**: tiempo máximo es 5000ms (5s) y min tiempo 1ms
  137.78 +    
  137.79 +    navigator.vibrate(8000); // will be truncated to 5000
  137.80 +
  137.81 +### Vibrar con un patrón (Android y Windows solamente)
  137.82 +
  137.83 +Vibra el dispositivo con un patrón determinado
  137.84 +
  137.85 +    navigator.vibrate(pattern);   
  137.86 +    
  137.87 +
  137.88 +*   **patrón**: secuencia de duraciones (en milisegundos) que desea activar o desactivar el vibrador. *(Matriz de números)*
  137.89 +
  137.90 +#### Ejemplo
  137.91 +
  137.92 +    // Vibrate for 1 second
  137.93 +    // Wait for 1 second
  137.94 +    // Vibrate for 3 seconds
  137.95 +    // Wait for 1 second
  137.96 +    // Vibrate for 5 seconds
  137.97 +    navigator.vibrate([1000, 1000, 3000, 1000, 5000]);
  137.98 +    
  137.99 +
 137.100 +### Cancelar vibración (no soportada en iOS)
 137.101 +
 137.102 +Inmediatamente se cancela cualquier vibración actualmente en ejecución.
 137.103 +
 137.104 +    navigator.vibrate(0)
 137.105 +    
 137.106 +
 137.107 +o
 137.108 +
 137.109 +    navigator.vibrate([])
 137.110 +    
 137.111 +
 137.112 +o
 137.113 +
 137.114 +    navigator.vibrate([0])
 137.115 +    
 137.116 +
 137.117 +Pasando en un parámetro de 0, una matriz vacía o una matriz con un elemento de valor 0 se cancelará cualquier vibraciones.
 137.118 +
 137.119 +## *Notification.Vibrate (obsoleto)
 137.120 +
 137.121 +Vibra el dispositivo para una cantidad dada de tiempo.
 137.122 +
 137.123 +    navigator.notification.vibrate(time)
 137.124 +    
 137.125 +
 137.126 +*   **tiempo**: milisegundos a vibrar el dispositivo. *(Número)*
 137.127 +
 137.128 +### Ejemplo
 137.129 +
 137.130 +    // Vibrate for 2.5 seconds
 137.131 +    navigator.notification.vibrate(2500);
 137.132 +    
 137.133 +
 137.134 +### iOS rarezas
 137.135 +
 137.136 +*   **time**: ignora el tiempo especificado y vibra por un tiempo preestablecido.
 137.137 +    
 137.138 +        navigator.notification.vibrate();
 137.139 +        navigator.notification.vibrate(2500);   // 2500 is ignored
 137.140 +        
 137.141 +
 137.142 +## *Notification.vibrateWithPattern (obsoleto)
 137.143 +
 137.144 +Vibra el dispositivo con un patrón determinado.
 137.145 +
 137.146 +    navigator.notification.vibrateWithPattern(pattern, repeat)
 137.147 +    
 137.148 +
 137.149 +*   **patrón**: secuencia de duraciones (en milisegundos) que desea activar o desactivar el vibrador. *(Matriz de números)*
 137.150 +*   **repito**: índice opcional en la matriz de patrón en el cual comenzar repitiendo (se repite hasta que se cancele), o -1 para la no repetición (por defecto). *(Número)*
 137.151 +
 137.152 +### Ejemplo
 137.153 +
 137.154 +    // Immediately start vibrating
 137.155 +    // vibrate for 100ms,
 137.156 +    // wait for 100ms,
 137.157 +    // vibrate for 200ms,
 137.158 +    // wait for 100ms,
 137.159 +    // vibrate for 400ms,
 137.160 +    // wait for 100ms,
 137.161 +    // vibrate for 800ms,
 137.162 +    // (do not repeat)
 137.163 +    navigator.notification.vibrateWithPattern([0, 100, 100, 200, 100, 400, 100, 800]);
 137.164 +    
 137.165 +
 137.166 +## *Notification.cancelVibration (obsoleto)
 137.167 +
 137.168 +Inmediatamente se cancela cualquier vibración actualmente en ejecución.
 137.169 +
 137.170 +    navigator.notification.cancelVibration()
 137.171 +    
 137.172 +
 137.173 +* Nota: debido a la alineación con la especificación del w3c, los métodos favoritos a ser eliminados
 137.174 \ No newline at end of file
   138.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   138.2 +++ b/Touchgui/plugins/org.apache.cordova.vibration/doc/fr/index.md	Thu Jun 04 14:50:33 2015 +0200
   138.3 @@ -0,0 +1,170 @@
   138.4 +<!---
   138.5 +    Licensed to the Apache Software Foundation (ASF) under one
   138.6 +    or more contributor license agreements.  See the NOTICE file
   138.7 +    distributed with this work for additional information
   138.8 +    regarding copyright ownership.  The ASF licenses this file
   138.9 +    to you under the Apache License, Version 2.0 (the
  138.10 +    "License"); you may not use this file except in compliance
  138.11 +    with the License.  You may obtain a copy of the License at
  138.12 +
  138.13 +      http://www.apache.org/licenses/LICENSE-2.0
  138.14 +
  138.15 +    Unless required by applicable law or agreed to in writing,
  138.16 +    software distributed under the License is distributed on an
  138.17 +    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
  138.18 +    KIND, either express or implied.  See the License for the
  138.19 +    specific language governing permissions and limitations
  138.20 +    under the License.
  138.21 +-->
  138.22 +
  138.23 +# org.apache.cordova.vibration
  138.24 +
  138.25 +Ce plugin s'aligne avec le W3C vibration spécification http://www.w3.org/TR/vibration/
  138.26 +
  138.27 +Ce plugin permet de vibrer l'appareil.
  138.28 +
  138.29 +## Installation
  138.30 +
  138.31 +    cordova plugin add org.apache.cordova.vibration
  138.32 +    
  138.33 +
  138.34 +## Plates-formes prises en charge
  138.35 +
  138.36 +Navigator.VIBRATE  
  138.37 +Navigator.notification.VIBRATE - Amazon Fire OS - Android - BlackBerry 10 - Firefox OS - iOS - Windows Phone 7 et 8
  138.38 +
  138.39 +navigator.notification.vibrateWithPattern,  
  138.40 +navigator.notification.cancelVibration - Android
  138.41 +
  138.42 +## vibrer (recommandée)
  138.43 +
  138.44 +Cette fonction a trois différentes fonctionnalités basées sur les paramètres passés à elle.
  138.45 +
  138.46 +### Norme vibrer
  138.47 +
  138.48 +Vibre l'appareil pendant un certain temps.
  138.49 +
  138.50 +    navigator.vibrate(time)
  138.51 +    
  138.52 +
  138.53 +ou
  138.54 +
  138.55 +    navigator.vibrate([time])
  138.56 +    
  138.57 +
  138.58 +-**temps**: millisecondes à vibrer l'appareil. *(Nombre)*
  138.59 +
  138.60 +#### Exemple
  138.61 +
  138.62 +    // Vibrate for 3 seconds
  138.63 +    navigator.vibrate(3000);
  138.64 +    
  138.65 +    // Vibrate for 3 seconds
  138.66 +    navigator.vibrate([3000]);
  138.67 +    
  138.68 +
  138.69 +#### iOS Quirks
  138.70 +
  138.71 +*   **temps**: ne tient pas compte de la durée spécifiée et vibre pendant un temps prédéterminé.
  138.72 +    
  138.73 +    navigator.vibrate(3000); // 3000 is ignored
  138.74 +
  138.75 +#### Windows et les bizarreries de Blackberry
  138.76 +
  138.77 +*   **temps**: temps Max est 5000ms (5 s) et heure min est de 1 ms
  138.78 +    
  138.79 +    navigator.vibrate(8000); // will be truncated to 5000
  138.80 +
  138.81 +### Vibrer avec un motif (Android et Windows uniquement)
  138.82 +
  138.83 +Vibre l'appareil avec un motif donné
  138.84 +
  138.85 +    navigator.vibrate(pattern);   
  138.86 +    
  138.87 +
  138.88 +*   **modèle**: séquence de la durée (en millisecondes) pour lequel activer ou désactiver le vibreur. *(Tableau de nombres)*
  138.89 +
  138.90 +#### Exemple
  138.91 +
  138.92 +    // Vibrate for 1 second
  138.93 +    // Wait for 1 second
  138.94 +    // Vibrate for 3 seconds
  138.95 +    // Wait for 1 second
  138.96 +    // Vibrate for 5 seconds
  138.97 +    navigator.vibrate([1000, 1000, 3000, 1000, 5000]);
  138.98 +    
  138.99 +
 138.100 +### Annuler les vibrations (ne pas de prise en charge d'iOS)
 138.101 +
 138.102 +Immédiatement annule des vibrations en cours d'exécution.
 138.103 +
 138.104 +    navigator.vibrate(0)
 138.105 +    
 138.106 +
 138.107 +ou
 138.108 +
 138.109 +    navigator.vibrate([])
 138.110 +    
 138.111 +
 138.112 +ou
 138.113 +
 138.114 +    navigator.vibrate([0])
 138.115 +    
 138.116 +
 138.117 +En passant un paramètre de 0, un tableau vide, ou un tableau contenant un seul élément de valeur 0 annulera toute vibration.
 138.118 +
 138.119 +## *notification.VIBRATE (obsolète)
 138.120 +
 138.121 +Vibre l'appareil pendant un certain temps.
 138.122 +
 138.123 +    navigator.notification.vibrate(time)
 138.124 +    
 138.125 +
 138.126 +*   **temps**: millisecondes à vibrer l'appareil. *(Nombre)*
 138.127 +
 138.128 +### Exemple
 138.129 +
 138.130 +    // Vibrate for 2.5 seconds
 138.131 +    navigator.notification.vibrate(2500);
 138.132 +    
 138.133 +
 138.134 +### iOS Quirks
 138.135 +
 138.136 +*   **temps**: ne tient pas compte de la durée spécifiée et vibre pendant un temps prédéterminé.
 138.137 +    
 138.138 +        navigator.notification.vibrate();
 138.139 +        navigator.notification.vibrate(2500);   // 2500 is ignored
 138.140 +        
 138.141 +
 138.142 +## *notification.vibrateWithPattern (obsolète)
 138.143 +
 138.144 +Vibre l'appareil avec un modèle donné.
 138.145 +
 138.146 +    navigator.notification.vibrateWithPattern(pattern, repeat)
 138.147 +    
 138.148 +
 138.149 +*   **modèle**: séquence de la durée (en millisecondes) pour lequel activer ou désactiver le vibreur. *(Tableau de nombres)*
 138.150 +*   **répéter**: optionnel index dans le tableau de configuration à laquelle commencer à répéter (répétera jusqu'à annulation), ou -1 pour aucune répétition (par défaut). *(Nombre)*
 138.151 +
 138.152 +### Exemple
 138.153 +
 138.154 +    // Immediately start vibrating
 138.155 +    // vibrate for 100ms,
 138.156 +    // wait for 100ms,
 138.157 +    // vibrate for 200ms,
 138.158 +    // wait for 100ms,
 138.159 +    // vibrate for 400ms,
 138.160 +    // wait for 100ms,
 138.161 +    // vibrate for 800ms,
 138.162 +    // (do not repeat)
 138.163 +    navigator.notification.vibrateWithPattern([0, 100, 100, 200, 100, 400, 100, 800]);
 138.164 +    
 138.165 +
 138.166 +## *notification.cancelVibration (obsolète)
 138.167 +
 138.168 +Immédiatement annule des vibrations en cours d'exécution.
 138.169 +
 138.170 +    navigator.notification.cancelVibration()
 138.171 +    
 138.172 +
 138.173 +* Remarque : en raison de l'alignement avec les spécifications w3c, les méthodes étoilées seront progressivement
 138.174 \ No newline at end of file
   139.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   139.2 +++ b/Touchgui/plugins/org.apache.cordova.vibration/doc/index.md	Thu Jun 04 14:50:33 2015 +0200
   139.3 @@ -0,0 +1,175 @@
   139.4 +<!---
   139.5 +    Licensed to the Apache Software Foundation (ASF) under one
   139.6 +    or more contributor license agreements.  See the NOTICE file
   139.7 +    distributed with this work for additional information
   139.8 +    regarding copyright ownership.  The ASF licenses this file
   139.9 +    to you under the Apache License, Version 2.0 (the
  139.10 +    "License"); you may not use this file except in compliance
  139.11 +    with the License.  You may obtain a copy of the License at
  139.12 +
  139.13 +      http://www.apache.org/licenses/LICENSE-2.0
  139.14 +
  139.15 +    Unless required by applicable law or agreed to in writing,
  139.16 +    software distributed under the License is distributed on an
  139.17 +    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
  139.18 +    KIND, either express or implied.  See the License for the
  139.19 +    specific language governing permissions and limitations
  139.20 +    under the License.
  139.21 +-->
  139.22 +
  139.23 +# org.apache.cordova.vibration
  139.24 +
  139.25 +This plugin aligns with the W3C vibration specification http://www.w3.org/TR/vibration/
  139.26 +
  139.27 +This plugin provides a way to vibrate the device.
  139.28 +
  139.29 +This plugin defines global objects including `navigator.vibrate`.
  139.30 +
  139.31 +Although in the global scope, they are not available until after the `deviceready` event.
  139.32 +
  139.33 +    document.addEventListener("deviceready", onDeviceReady, false);
  139.34 +    function onDeviceReady() {
  139.35 +        console.log(navigator.vibrate);
  139.36 +    }
  139.37 +
  139.38 +## Installation
  139.39 +
  139.40 +    cordova plugin add org.apache.cordova.vibration
  139.41 +
  139.42 +## Supported Platforms
  139.43 +
  139.44 +navigator.vibrate,<br />
  139.45 +navigator.notification.vibrate
  139.46 +- Amazon Fire OS
  139.47 +- Android
  139.48 +- BlackBerry 10
  139.49 +- Firefox OS
  139.50 +- iOS
  139.51 +- Windows Phone 7 and 8
  139.52 +
  139.53 +navigator.notification.vibrateWithPattern,<br />navigator.notification.cancelVibration
  139.54 +- Android
  139.55 +- Windows Phone 8
  139.56 +
  139.57 +## vibrate (recommended)
  139.58 +
  139.59 +This function has three different functionalities based on parameters passed to it.
  139.60 +
  139.61 +###Standard vibrate
  139.62 +
  139.63 +Vibrates the device for a given amount of time.
  139.64 +
  139.65 +    navigator.vibrate(time)
  139.66 +
  139.67 +or
  139.68 +
  139.69 +    navigator.vibrate([time])
  139.70 +
  139.71 +
  139.72 +-__time__: Milliseconds to vibrate the device. _(Number)_
  139.73 +
  139.74 +####Example
  139.75 +
  139.76 +    // Vibrate for 3 seconds
  139.77 +    navigator.vibrate(3000);
  139.78 +
  139.79 +    // Vibrate for 3 seconds
  139.80 +    navigator.vibrate([3000]);
  139.81 +
  139.82 +####iOS Quirks
  139.83 +
  139.84 +- __time__: Ignores the specified time and vibrates for a pre-set amount of time.
  139.85 +
  139.86 +    navigator.vibrate(3000); // 3000 is ignored
  139.87 +
  139.88 +####Windows and Blackberry Quirks
  139.89 +
  139.90 +- __time__: Max time is 5000ms (5s) and min time is 1ms
  139.91 +
  139.92 +    navigator.vibrate(8000); // will be truncated to 5000
  139.93 +
  139.94 +###Vibrate with a pattern (Android and Windows only)
  139.95 +Vibrates the device with a given pattern
  139.96 +
  139.97 +    navigator.vibrate(pattern);   
  139.98 +
  139.99 +- __pattern__: Sequence of durations (in milliseconds) for which to turn on or off the vibrator. _(Array of Numbers)_
 139.100 +
 139.101 +####Example
 139.102 +
 139.103 +    // Vibrate for 1 second
 139.104 +    // Wait for 1 second
 139.105 +    // Vibrate for 3 seconds
 139.106 +    // Wait for 1 second
 139.107 +    // Vibrate for 5 seconds
 139.108 +    navigator.vibrate([1000, 1000, 3000, 1000, 5000]);
 139.109 +
 139.110 +####Windows Phone 8 Quirks
 139.111 +
 139.112 +- vibrate(pattern) falls back on vibrate with default duration
 139.113 +
 139.114 +###Cancel vibration (not supported in iOS)
 139.115 +
 139.116 +Immediately cancels any currently running vibration.
 139.117 +
 139.118 +    navigator.vibrate(0)
 139.119 +
 139.120 +or
 139.121 +
 139.122 +    navigator.vibrate([])
 139.123 +
 139.124 +or
 139.125 +
 139.126 +    navigator.vibrate([0])
 139.127 +
 139.128 +Passing in a parameter of 0, an empty array, or an array with one element of value 0 will cancel any vibrations.
 139.129 +
 139.130 +## *notification.vibrate (deprecated)
 139.131 +
 139.132 +Vibrates the device for a given amount of time.
 139.133 +
 139.134 +    navigator.notification.vibrate(time)
 139.135 +
 139.136 +- __time__: Milliseconds to vibrate the device. _(Number)_
 139.137 +
 139.138 +### Example
 139.139 +
 139.140 +    // Vibrate for 2.5 seconds
 139.141 +    navigator.notification.vibrate(2500);
 139.142 +
 139.143 +### iOS Quirks
 139.144 +
 139.145 +- __time__: Ignores the specified time and vibrates for a pre-set amount of time.
 139.146 +
 139.147 +        navigator.notification.vibrate();
 139.148 +        navigator.notification.vibrate(2500);   // 2500 is ignored
 139.149 +
 139.150 +## *notification.vibrateWithPattern (deprecated)
 139.151 +
 139.152 +Vibrates the device with a given pattern.
 139.153 +
 139.154 +    navigator.notification.vibrateWithPattern(pattern, repeat)
 139.155 +
 139.156 +- __pattern__: Sequence of durations (in milliseconds) for which to turn on or off the vibrator. _(Array of Numbers)_
 139.157 +- __repeat__: Optional index into the pattern array at which to start repeating (will repeat until canceled), or -1 for no repetition (default). _(Number)_
 139.158 +
 139.159 +### Example
 139.160 +
 139.161 +    // Immediately start vibrating
 139.162 +    // vibrate for 100ms,
 139.163 +    // wait for 100ms,
 139.164 +    // vibrate for 200ms,
 139.165 +    // wait for 100ms,
 139.166 +    // vibrate for 400ms,
 139.167 +    // wait for 100ms,
 139.168 +    // vibrate for 800ms,
 139.169 +    // (do not repeat)
 139.170 +    navigator.notification.vibrateWithPattern([0, 100, 100, 200, 100, 400, 100, 800]);
 139.171 +
 139.172 +## *notification.cancelVibration (deprecated)
 139.173 +
 139.174 +Immediately cancels any currently running vibration.
 139.175 +
 139.176 +    navigator.notification.cancelVibration()
 139.177 +
 139.178 +*Note - due to alignment with w3c spec, the starred methods will be phased out
   140.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   140.2 +++ b/Touchgui/plugins/org.apache.cordova.vibration/doc/it/index.md	Thu Jun 04 14:50:33 2015 +0200
   140.3 @@ -0,0 +1,170 @@
   140.4 +<!---
   140.5 +    Licensed to the Apache Software Foundation (ASF) under one
   140.6 +    or more contributor license agreements.  See the NOTICE file
   140.7 +    distributed with this work for additional information
   140.8 +    regarding copyright ownership.  The ASF licenses this file
   140.9 +    to you under the Apache License, Version 2.0 (the
  140.10 +    "License"); you may not use this file except in compliance
  140.11 +    with the License.  You may obtain a copy of the License at
  140.12 +
  140.13 +      http://www.apache.org/licenses/LICENSE-2.0
  140.14 +
  140.15 +    Unless required by applicable law or agreed to in writing,
  140.16 +    software distributed under the License is distributed on an
  140.17 +    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
  140.18 +    KIND, either express or implied.  See the License for the
  140.19 +    specific language governing permissions and limitations
  140.20 +    under the License.
  140.21 +-->
  140.22 +
  140.23 +# org.apache.cordova.vibration
  140.24 +
  140.25 +Questo plugin si allinea con il W3C vibrazione specifica http://www.w3.org/TR/vibration/
  140.26 +
  140.27 +Questo plugin consente di vibrare il dispositivo.
  140.28 +
  140.29 +## Installazione
  140.30 +
  140.31 +    cordova plugin add org.apache.cordova.vibration
  140.32 +    
  140.33 +
  140.34 +## Piattaforme supportate
  140.35 +
  140.36 +Navigator.vibrate  
  140.37 +Navigator.Notification.vibrate - Amazon fuoco OS - OS di Firefox - 10 BlackBerry - Android - iOS - Windows Phone 7 e 8
  140.38 +
  140.39 +navigator.notification.vibrateWithPattern,  
  140.40 +navigator.notification.cancelVibration - Android
  140.41 +
  140.42 +## vibrare (consigliato)
  140.43 +
  140.44 +Questa funzione ha tre differenti funzionalità basate su parametri passati ad esso.
  140.45 +
  140.46 +### Standard vibrare
  140.47 +
  140.48 +Vibra il dispositivo per un determinato periodo di tempo.
  140.49 +
  140.50 +    navigator.vibrate(time)
  140.51 +    
  140.52 +
  140.53 +o
  140.54 +
  140.55 +    navigator.vibrate([time])
  140.56 +    
  140.57 +
  140.58 +-**tempo**: millisecondi a vibrare il dispositivo. *(Numero)*
  140.59 +
  140.60 +#### Esempio
  140.61 +
  140.62 +    // Vibrate for 3 seconds
  140.63 +    navigator.vibrate(3000);
  140.64 +    
  140.65 +    // Vibrate for 3 seconds
  140.66 +    navigator.vibrate([3000]);
  140.67 +    
  140.68 +
  140.69 +#### iOS stranezze
  140.70 +
  140.71 +*   **tempo**: ignora il tempo specificato e vibra per un tempo pre-impostato.
  140.72 +    
  140.73 +    navigator.vibrate(3000); // 3000 is ignored
  140.74 +
  140.75 +#### Windows e stranezze di Blackberry
  140.76 +
  140.77 +*   **tempo**: tempo Max 5000ms (5s) edè min tempo di 1ms
  140.78 +    
  140.79 +    navigator.vibrate(8000); // will be truncated to 5000
  140.80 +
  140.81 +### Vibrare con un pattern (Android e solo per Windows)
  140.82 +
  140.83 +Vibra il dispositivo con un determinato modello
  140.84 +
  140.85 +    navigator.vibrate(pattern);   
  140.86 +    
  140.87 +
  140.88 +*   **modello**: sequenza di durate (in millisecondi) per il quale attivare o disattivare il vibratore. *(Matrice di numeri)*
  140.89 +
  140.90 +#### Esempio
  140.91 +
  140.92 +    // Vibrate for 1 second
  140.93 +    // Wait for 1 second
  140.94 +    // Vibrate for 3 seconds
  140.95 +    // Wait for 1 second
  140.96 +    // Vibrate for 5 seconds
  140.97 +    navigator.vibrate([1000, 1000, 3000, 1000, 5000]);
  140.98 +    
  140.99 +
 140.100 +### Annullare le vibrazioni (non supportata in iOS)
 140.101 +
 140.102 +Annulla immediatamente qualsiasi vibrazione attualmente in esecuzione.
 140.103 +
 140.104 +    navigator.vibrate(0)
 140.105 +    
 140.106 +
 140.107 +o
 140.108 +
 140.109 +    navigator.vibrate([])
 140.110 +    
 140.111 +
 140.112 +o
 140.113 +
 140.114 +    navigator.vibrate([0])
 140.115 +    
 140.116 +
 140.117 +Passa un parametro 0, matrice vuota o una matrice con un elemento di valore 0 annullerà eventuali vibrazioni.
 140.118 +
 140.119 +## *Notification.vibrate (obsoleto)
 140.120 +
 140.121 +Vibra il dispositivo per un determinato periodo di tempo.
 140.122 +
 140.123 +    navigator.notification.vibrate(time)
 140.124 +    
 140.125 +
 140.126 +*   **tempo**: millisecondi a vibrare il dispositivo. *(Numero)*
 140.127 +
 140.128 +### Esempio
 140.129 +
 140.130 +    // Vibrate for 2.5 seconds
 140.131 +    navigator.notification.vibrate(2500);
 140.132 +    
 140.133 +
 140.134 +### iOS stranezze
 140.135 +
 140.136 +*   **tempo**: ignora il tempo specificato e vibra per un tempo pre-impostato.
 140.137 +    
 140.138 +        navigator.notification.vibrate();
 140.139 +        navigator.notification.vibrate(2500);   // 2500 is ignored
 140.140 +        
 140.141 +
 140.142 +## *Notification.vibrateWithPattern (obsoleto)
 140.143 +
 140.144 +Vibra il dispositivo con un determinato modello.
 140.145 +
 140.146 +    navigator.notification.vibrateWithPattern(pattern, repeat)
 140.147 +    
 140.148 +
 140.149 +*   **modello**: sequenza di durate (in millisecondi) per il quale attivare o disattivare il vibratore. *(Matrice di numeri)*
 140.150 +*   **ripetere**: opzionale indice nell'array modello presso cui iniziare ripetendo (ripeterà finché non annullato), o -1 per nessuna ripetizione (impostazione predefinita). *(Numero)*
 140.151 +
 140.152 +### Esempio
 140.153 +
 140.154 +    // Immediately start vibrating
 140.155 +    // vibrate for 100ms,
 140.156 +    // wait for 100ms,
 140.157 +    // vibrate for 200ms,
 140.158 +    // wait for 100ms,
 140.159 +    // vibrate for 400ms,
 140.160 +    // wait for 100ms,
 140.161 +    // vibrate for 800ms,
 140.162 +    // (do not repeat)
 140.163 +    navigator.notification.vibrateWithPattern([0, 100, 100, 200, 100, 400, 100, 800]);
 140.164 +    
 140.165 +
 140.166 +## *Notification.cancelVibration (obsoleto)
 140.167 +
 140.168 +Annulla immediatamente qualsiasi vibrazione attualmente in esecuzione.
 140.169 +
 140.170 +    navigator.notification.cancelVibration()
 140.171 +    
 140.172 +
 140.173 +* Nota - a causa di allineamento con le specifiche w3c, saranno essere ritirati i metodi speciali
 140.174 \ No newline at end of file
   141.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   141.2 +++ b/Touchgui/plugins/org.apache.cordova.vibration/doc/ja/index.md	Thu Jun 04 14:50:33 2015 +0200
   141.3 @@ -0,0 +1,170 @@
   141.4 +<!---
   141.5 +    Licensed to the Apache Software Foundation (ASF) under one
   141.6 +    or more contributor license agreements.  See the NOTICE file
   141.7 +    distributed with this work for additional information
   141.8 +    regarding copyright ownership.  The ASF licenses this file
   141.9 +    to you under the Apache License, Version 2.0 (the
  141.10 +    "License"); you may not use this file except in compliance
  141.11 +    with the License.  You may obtain a copy of the License at
  141.12 +
  141.13 +      http://www.apache.org/licenses/LICENSE-2.0
  141.14 +
  141.15 +    Unless required by applicable law or agreed to in writing,
  141.16 +    software distributed under the License is distributed on an
  141.17 +    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
  141.18 +    KIND, either express or implied.  See the License for the
  141.19 +    specific language governing permissions and limitations
  141.20 +    under the License.
  141.21 +-->
  141.22 +
  141.23 +# org.apache.cordova.vibration
  141.24 +
  141.25 +このプラグインに準拠 W3C 振動仕様 http://www.w3.org/TR/vibration/
  141.26 +
  141.27 +このプラグインは、デバイスを振動させる方法を提供します。
  141.28 +
  141.29 +## インストール
  141.30 +
  141.31 +    cordova plugin add org.apache.cordova.vibration
  141.32 +    
  141.33 +
  141.34 +## サポートされているプラットフォーム
  141.35 +
  141.36 +navigator.vibrate  
  141.37 +navigator.notification.vibrate - アマゾン火 OS - アンドロイド - ブラックベリー 10 - Firefox OS - iOS - Windows Phone 7 と 8
  141.38 +
  141.39 +navigator.notification.vibrateWithPattern、  
  141.40 +navigator.notification.cancelVibration - アンドロイド
  141.41 +
  141.42 +## 振動 (推奨)
  141.43 +
  141.44 +この関数は、渡されたパラメーターに基づいて 3 つのさまざまな機能。
  141.45 +
  141.46 +### 標準を振動します。
  141.47 +
  141.48 +一定の時間のため、デバイスが振動します。
  141.49 +
  141.50 +    navigator.vibrate(time)
  141.51 +    
  141.52 +
  141.53 +または
  141.54 +
  141.55 +    navigator.vibrate([time])
  141.56 +    
  141.57 +
  141.58 +-**時刻**: ミリ秒、デバイスを振動させる。*(数)*
  141.59 +
  141.60 +#### 例
  141.61 +
  141.62 +    // Vibrate for 3 seconds
  141.63 +    navigator.vibrate(3000);
  141.64 +    
  141.65 +    // Vibrate for 3 seconds
  141.66 +    navigator.vibrate([3000]);
  141.67 +    
  141.68 +
  141.69 +#### iOS の癖
  141.70 +
  141.71 +*   **時間**: 指定された時間を無視し、時間の事前に設定された量のために振動します。
  141.72 +    
  141.73 +    navigator.vibrate(3000); // 3000 is ignored
  141.74 +
  141.75 +#### Windows とブラックベリー癖
  141.76 +
  141.77 +*   **時間**: 5000 (5 秒) は、最大時間と最小時間は 1 ms
  141.78 +    
  141.79 +    navigator.vibrate(8000); // will be truncated to 5000
  141.80 +
  141.81 +### (人造人間と Windows のみ) パターンで振動します。
  141.82 +
  141.83 +特定のパターンを持つデバイスが振動します。
  141.84 +
  141.85 +    navigator.vibrate(pattern);   
  141.86 +    
  141.87 +
  141.88 +*   **パターン**: シーケンスの継続時間 (ミリ秒単位) をオンまたはオフ、バイブします。*(数字の配列)*
  141.89 +
  141.90 +#### 例
  141.91 +
  141.92 +    // Vibrate for 1 second
  141.93 +    // Wait for 1 second
  141.94 +    // Vibrate for 3 seconds
  141.95 +    // Wait for 1 second
  141.96 +    // Vibrate for 5 seconds
  141.97 +    navigator.vibrate([1000, 1000, 3000, 1000, 5000]);
  141.98 +    
  141.99 +
 141.100 +### [キャンセル] 振動 (iOS ではサポートされていません)
 141.101 +
 141.102 +すぐに、現在実行中の振動をキャンセルします。
 141.103 +
 141.104 +    navigator.vibrate(0)
 141.105 +    
 141.106 +
 141.107 +または
 141.108 +
 141.109 +    navigator.vibrate([])
 141.110 +    
 141.111 +
 141.112 +または
 141.113 +
 141.114 +    navigator.vibrate([0])
 141.115 +    
 141.116 +
 141.117 +0 のパラメーターを渡して、空の配列、または 0 の値の 1 つの要素を持つ配列は任意振動がキャンセルされます。
 141.118 +
 141.119 +## *notification.vibrate (非推奨)
 141.120 +
 141.121 +一定の時間のため、デバイスが振動します。
 141.122 +
 141.123 +    navigator.notification.vibrate(time)
 141.124 +    
 141.125 +
 141.126 +*   **時刻**: ミリ秒、デバイスを振動させる。*(数)*
 141.127 +
 141.128 +### 例
 141.129 +
 141.130 +    // Vibrate for 2.5 seconds
 141.131 +    navigator.notification.vibrate(2500);
 141.132 +    
 141.133 +
 141.134 +### iOS の癖
 141.135 +
 141.136 +*   **時間**: 指定された時間を無視し、時間の事前に設定された量のために振動します。
 141.137 +    
 141.138 +        navigator.notification.vibrate();
 141.139 +        navigator.notification.vibrate(2500);   // 2500 is ignored
 141.140 +        
 141.141 +
 141.142 +## *notification.vibrateWithPattern (非推奨)
 141.143 +
 141.144 +特定のパターンを持つデバイスが振動します。
 141.145 +
 141.146 +    navigator.notification.vibrateWithPattern(pattern, repeat)
 141.147 +    
 141.148 +
 141.149 +*   **パターン**: シーケンスの継続時間 (ミリ秒単位) をオンまたはオフ、バイブします。*(数字の配列)*
 141.150 +*   **繰り返します**: 省略可能な配列のインデックスのパターン (でしょう) を繰り返す取り消されるまで、繰り返しを開始するまたは反復なし (既定値) の場合は-1。*(数)*
 141.151 +
 141.152 +### 例
 141.153 +
 141.154 +    // Immediately start vibrating
 141.155 +    // vibrate for 100ms,
 141.156 +    // wait for 100ms,
 141.157 +    // vibrate for 200ms,
 141.158 +    // wait for 100ms,
 141.159 +    // vibrate for 400ms,
 141.160 +    // wait for 100ms,
 141.161 +    // vibrate for 800ms,
 141.162 +    // (do not repeat)
 141.163 +    navigator.notification.vibrateWithPattern([0, 100, 100, 200, 100, 400, 100, 800]);
 141.164 +    
 141.165 +
 141.166 +## *notification.cancelVibration (非推奨)
 141.167 +
 141.168 +すぐに、現在実行中の振動をキャンセルします。
 141.169 +
 141.170 +    navigator.notification.cancelVibration()
 141.171 +    
 141.172 +
 141.173 +* 注 - w3c の仕様を配置、ため主演メソッドがフェーズ アウトされます。
 141.174 \ No newline at end of file
   142.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   142.2 +++ b/Touchgui/plugins/org.apache.cordova.vibration/doc/ko/index.md	Thu Jun 04 14:50:33 2015 +0200
   142.3 @@ -0,0 +1,170 @@
   142.4 +<!---
   142.5 +    Licensed to the Apache Software Foundation (ASF) under one
   142.6 +    or more contributor license agreements.  See the NOTICE file
   142.7 +    distributed with this work for additional information
   142.8 +    regarding copyright ownership.  The ASF licenses this file
   142.9 +    to you under the Apache License, Version 2.0 (the
  142.10 +    "License"); you may not use this file except in compliance
  142.11 +    with the License.  You may obtain a copy of the License at
  142.12 +
  142.13 +      http://www.apache.org/licenses/LICENSE-2.0
  142.14 +
  142.15 +    Unless required by applicable law or agreed to in writing,
  142.16 +    software distributed under the License is distributed on an
  142.17 +    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
  142.18 +    KIND, either express or implied.  See the License for the
  142.19 +    specific language governing permissions and limitations
  142.20 +    under the License.
  142.21 +-->
  142.22 +
  142.23 +# org.apache.cordova.vibration
  142.24 +
  142.25 +이 플러그인에 W3C 진동 사양 http://www.w3.org/TR/vibration/ 정렬
  142.26 +
  142.27 +이 플러그인에는 장치를 진동 하는 방법을 제공 합니다.
  142.28 +
  142.29 +## 설치
  142.30 +
  142.31 +    cordova plugin add org.apache.cordova.vibration
  142.32 +    
  142.33 +
  142.34 +## 지원 되는 플랫폼
  142.35 +
  142.36 +navigator.vibrate  
  142.37 +navigator.notification.vibrate-아마존 화재 OS-안 드 로이드-블랙베리 10-파이어 폭스 OS-iOS-Windows Phone 7과 8
  142.38 +
  142.39 +navigator.notification.vibrateWithPattern,  
  142.40 +navigator.notification.cancelVibration-안 드 로이드
  142.41 +
  142.42 +## 진동 (권장)
  142.43 +
  142.44 +이 함수는 전달 된 매개 변수에 따라 세 가지 다른 기능.
  142.45 +
  142.46 +### 기준 진동
  142.47 +
  142.48 +주어진 시간 동안 장치를 진동.
  142.49 +
  142.50 +    navigator.vibrate(time)
  142.51 +    
  142.52 +
  142.53 +또는
  142.54 +
  142.55 +    navigator.vibrate([time])
  142.56 +    
  142.57 +
  142.58 +-**시간**: 진동 장치 (밀리초)입니다. *(수)*
  142.59 +
  142.60 +#### 예를 들어
  142.61 +
  142.62 +    // Vibrate for 3 seconds
  142.63 +    navigator.vibrate(3000);
  142.64 +    
  142.65 +    // Vibrate for 3 seconds
  142.66 +    navigator.vibrate([3000]);
  142.67 +    
  142.68 +
  142.69 +#### iOS 단점
  142.70 +
  142.71 +*   **시간**: 지정 된 시간을 무시 하 고 미리 설정 된 시간 동안 진동.
  142.72 +    
  142.73 +    navigator.vibrate(3000); // 3000 is ignored
  142.74 +
  142.75 +#### 윈도 즈와 블랙베리 단점
  142.76 +
  142.77 +*   **시간**: 최대 시간은 2000ms (5s) 이며 최소 시간 1ms
  142.78 +    
  142.79 +    navigator.vibrate(8000); // will be truncated to 5000
  142.80 +
  142.81 +### (안 드 로이드와 Windows에만 해당) 패턴으로 진동
  142.82 +
  142.83 +지정 된 패턴으로 장치를 진동
  142.84 +
  142.85 +    navigator.vibrate(pattern);   
  142.86 +    
  142.87 +
  142.88 +*   **패턴**:의 기간 (밀리초)에서 진동을 켜거나 끌 수 있는 순서. *(숫자의 배열)*
  142.89 +
  142.90 +#### 예를 들어
  142.91 +
  142.92 +    // Vibrate for 1 second
  142.93 +    // Wait for 1 second
  142.94 +    // Vibrate for 3 seconds
  142.95 +    // Wait for 1 second
  142.96 +    // Vibrate for 5 seconds
  142.97 +    navigator.vibrate([1000, 1000, 3000, 1000, 5000]);
  142.98 +    
  142.99 +
 142.100 +### 진동 (iOS에서 지원 되지 않음) 취소
 142.101 +
 142.102 +즉시 모든 현재 실행 중인 진동을 취소합니다.
 142.103 +
 142.104 +    navigator.vibrate(0)
 142.105 +    
 142.106 +
 142.107 +또는
 142.108 +
 142.109 +    navigator.vibrate([])
 142.110 +    
 142.111 +
 142.112 +또는
 142.113 +
 142.114 +    navigator.vibrate([0])
 142.115 +    
 142.116 +
 142.117 +0의 매개 변수 전달, 빈 배열, 또는 0 값의 한 요소 배열은 어떤 진동을 취소할 것 이다.
 142.118 +
 142.119 +## *notification.vibrate (사용 되지 않음)
 142.120 +
 142.121 +주어진 시간 동안 장치를 진동.
 142.122 +
 142.123 +    navigator.notification.vibrate(time)
 142.124 +    
 142.125 +
 142.126 +*   **시간**: 진동 장치 (밀리초)입니다. *(수)*
 142.127 +
 142.128 +### 예를 들어
 142.129 +
 142.130 +    // Vibrate for 2.5 seconds
 142.131 +    navigator.notification.vibrate(2500);
 142.132 +    
 142.133 +
 142.134 +### iOS 단점
 142.135 +
 142.136 +*   **시간**: 지정 된 시간을 무시 하 고 미리 설정 된 시간 동안 진동.
 142.137 +    
 142.138 +        navigator.notification.vibrate();
 142.139 +        navigator.notification.vibrate(2500);   // 2500 is ignored
 142.140 +        
 142.141 +
 142.142 +## *notification.vibrateWithPattern (사용 되지 않음)
 142.143 +
 142.144 +지정 된 패턴으로 장치 진동.
 142.145 +
 142.146 +    navigator.notification.vibrateWithPattern(pattern, repeat)
 142.147 +    
 142.148 +
 142.149 +*   **패턴**:의 기간 (밀리초)에서 진동을 켜거나 끌 수 있는 순서. *(숫자의 배열)*
 142.150 +*   **반복**: 반복 (취소 될 때까지 반복 됩니다), 시작 하는 또는-1 (기본값) 없는 반복에 대 한 패턴 배열에 선택적 인덱스. *(수)*
 142.151 +
 142.152 +### 예를 들어
 142.153 +
 142.154 +    // Immediately start vibrating
 142.155 +    // vibrate for 100ms,
 142.156 +    // wait for 100ms,
 142.157 +    // vibrate for 200ms,
 142.158 +    // wait for 100ms,
 142.159 +    // vibrate for 400ms,
 142.160 +    // wait for 100ms,
 142.161 +    // vibrate for 800ms,
 142.162 +    // (do not repeat)
 142.163 +    navigator.notification.vibrateWithPattern([0, 100, 100, 200, 100, 400, 100, 800]);
 142.164 +    
 142.165 +
 142.166 +## *notification.cancelVibration (사용 되지 않음)
 142.167 +
 142.168 +즉시 모든 현재 실행 중인 진동을 취소합니다.
 142.169 +
 142.170 +    navigator.notification.cancelVibration()
 142.171 +    
 142.172 +
 142.173 +* 참고-때문에 w3c 사양 가진 줄 맞춤, 별표 메서드 밖으로 단계별로 됩니다.
 142.174 \ No newline at end of file
   143.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   143.2 +++ b/Touchgui/plugins/org.apache.cordova.vibration/doc/pl/index.md	Thu Jun 04 14:50:33 2015 +0200
   143.3 @@ -0,0 +1,170 @@
   143.4 +<!---
   143.5 +    Licensed to the Apache Software Foundation (ASF) under one
   143.6 +    or more contributor license agreements.  See the NOTICE file
   143.7 +    distributed with this work for additional information
   143.8 +    regarding copyright ownership.  The ASF licenses this file
   143.9 +    to you under the Apache License, Version 2.0 (the
  143.10 +    "License"); you may not use this file except in compliance
  143.11 +    with the License.  You may obtain a copy of the License at
  143.12 +
  143.13 +      http://www.apache.org/licenses/LICENSE-2.0
  143.14 +
  143.15 +    Unless required by applicable law or agreed to in writing,
  143.16 +    software distributed under the License is distributed on an
  143.17 +    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
  143.18 +    KIND, either express or implied.  See the License for the
  143.19 +    specific language governing permissions and limitations
  143.20 +    under the License.
  143.21 +-->
  143.22 +
  143.23 +# org.apache.cordova.vibration
  143.24 +
  143.25 +Ten plugin wyrównuje z http://www.w3.org/TR/vibration/ specyfikacji W3C wibracji
  143.26 +
  143.27 +Ten plugin umożliwia wibracje urządzenia.
  143.28 +
  143.29 +## Instalacja
  143.30 +
  143.31 +    cordova plugin add org.apache.cordova.vibration
  143.32 +    
  143.33 +
  143.34 +## Obsługiwane platformy
  143.35 +
  143.36 +Navigator.vibrate  
  143.37 +Navigator.Notification.vibrate - Amazon ogień OS - OS Android - BlackBerry 10 - Firefox - iOS - Windows Phone 7 i 8
  143.38 +
  143.39 +navigator.notification.vibrateWithPattern,  
  143.40 +navigator.notification.cancelVibration - Android
  143.41 +
  143.42 +## wibracje (zalecane)
  143.43 +
  143.44 +Funkcja ta ma trzy różne funkcje na podstawie parametrów przekazywanych do niej.
  143.45 +
  143.46 +### Standardowe wibracje
  143.47 +
  143.48 +Wibruje urządzenie na określoną ilość czasu.
  143.49 +
  143.50 +    navigator.vibrate(time)
  143.51 +    
  143.52 +
  143.53 +lub
  143.54 +
  143.55 +    navigator.vibrate([time])
  143.56 +    
  143.57 +
  143.58 +-**czas**: milisekund wibracje urządzenia. *(Liczba)*
  143.59 +
  143.60 +#### Przykład
  143.61 +
  143.62 +    // Vibrate for 3 seconds
  143.63 +    navigator.vibrate(3000);
  143.64 +    
  143.65 +    // Vibrate for 3 seconds
  143.66 +    navigator.vibrate([3000]);
  143.67 +    
  143.68 +
  143.69 +#### Dziwactwa iOS
  143.70 +
  143.71 +*   **czas**: ignoruje określony czas i wibruje na wstępnie określoną ilość czasu.
  143.72 +    
  143.73 +    Navigator.vibrate(3000); 3000 jest ignorowany
  143.74 +
  143.75 +#### Windows i Blackberry dziwactwa
  143.76 +
  143.77 +*   **czas**: Max czas jest 5000ms (5s) i min czas 1ms
  143.78 +    
  143.79 +    navigator.vibrate(8000); // will be truncated to 5000
  143.80 +
  143.81 +### Wibracje z wzorem (Android i Windows tylko)
  143.82 +
  143.83 +Wibruje urządzenie z danego wzoru
  143.84 +
  143.85 +    navigator.vibrate(pattern);   
  143.86 +    
  143.87 +
  143.88 +*   **wzór**: sekwencja czas trwania (w milisekundach), dla której chcesz włączyć lub wyłączyć wibrator. *(Tablica liczb)*
  143.89 +
  143.90 +#### Przykład
  143.91 +
  143.92 +    // Vibrate for 1 second
  143.93 +    // Wait for 1 second
  143.94 +    // Vibrate for 3 seconds
  143.95 +    // Wait for 1 second
  143.96 +    // Vibrate for 5 seconds
  143.97 +    navigator.vibrate([1000, 1000, 3000, 1000, 5000]);
  143.98 +    
  143.99 +
 143.100 +### Anuluj wibracji (nieobsługiwane w iOS)
 143.101 +
 143.102 +Niezwłocznie anuluje aktualnie uruchomione wibracje.
 143.103 +
 143.104 +    navigator.vibrate(0)
 143.105 +    
 143.106 +
 143.107 +lub
 143.108 +
 143.109 +    navigator.vibrate([])
 143.110 +    
 143.111 +
 143.112 +lub
 143.113 +
 143.114 +    navigator.vibrate([0])
 143.115 +    
 143.116 +
 143.117 +Przekazując parametr 0, pustą tablicę lub tablicy z jednym z elementów wartości 0 spowoduje anulowanie wibracji.
 143.118 +
 143.119 +## *Notification.vibrate (przestarzałe)
 143.120 +
 143.121 +Wibruje urządzenie na określoną ilość czasu.
 143.122 +
 143.123 +    navigator.notification.vibrate(time)
 143.124 +    
 143.125 +
 143.126 +*   **czas**: milisekund wibracje urządzenia. *(Liczba)*
 143.127 +
 143.128 +### Przykład
 143.129 +
 143.130 +    // Vibrate for 2.5 seconds
 143.131 +    navigator.notification.vibrate(2500);
 143.132 +    
 143.133 +
 143.134 +### Dziwactwa iOS
 143.135 +
 143.136 +*   **czas**: ignoruje określony czas i wibruje na wstępnie określoną ilość czasu.
 143.137 +    
 143.138 +        navigator.notification.vibrate();
 143.139 +        navigator.notification.vibrate(2500);   // 2500 is ignored
 143.140 +        
 143.141 +
 143.142 +## *Notification.vibrateWithPattern (przestarzałe)
 143.143 +
 143.144 +Wibruje urządzenie z danego wzoru.
 143.145 +
 143.146 +    navigator.notification.vibrateWithPattern(pattern, repeat)
 143.147 +    
 143.148 +
 143.149 +*   **wzór**: sekwencja czas trwania (w milisekundach), dla której chcesz włączyć lub wyłączyć wibrator. *(Tablica liczb)*
 143.150 +*   **Powtórz**: opcjonalny indeks do tablicy wzór który zacząć powtarzać (będzie powtarzać do momentu anulowane), lub -1 nie powtarzania (domyślnie). *(Liczba)*
 143.151 +
 143.152 +### Przykład
 143.153 +
 143.154 +    // Immediately start vibrating
 143.155 +    // vibrate for 100ms,
 143.156 +    // wait for 100ms,
 143.157 +    // vibrate for 200ms,
 143.158 +    // wait for 100ms,
 143.159 +    // vibrate for 400ms,
 143.160 +    // wait for 100ms,
 143.161 +    // vibrate for 800ms,
 143.162 +    // (do not repeat)
 143.163 +    navigator.notification.vibrateWithPattern([0, 100, 100, 200, 100, 400, 100, 800]);
 143.164 +    
 143.165 +
 143.166 +## *Notification.cancelVibration (przestarzałe)
 143.167 +
 143.168 +Niezwłocznie anuluje aktualnie uruchomione wibracje.
 143.169 +
 143.170 +    navigator.notification.cancelVibration()
 143.171 +    
 143.172 +
 143.173 +* Uwaga - ze względu na dostosowanie specyfikacji w3c, oznaczonych gwiazdką metody zostaną wycofane
 143.174 \ No newline at end of file
   144.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   144.2 +++ b/Touchgui/plugins/org.apache.cordova.vibration/doc/ru/index.md	Thu Jun 04 14:50:33 2015 +0200
   144.3 @@ -0,0 +1,170 @@
   144.4 +<!---
   144.5 +    Licensed to the Apache Software Foundation (ASF) under one
   144.6 +    or more contributor license agreements.  See the NOTICE file
   144.7 +    distributed with this work for additional information
   144.8 +    regarding copyright ownership.  The ASF licenses this file
   144.9 +    to you under the Apache License, Version 2.0 (the
  144.10 +    "License"); you may not use this file except in compliance
  144.11 +    with the License.  You may obtain a copy of the License at
  144.12 +
  144.13 +      http://www.apache.org/licenses/LICENSE-2.0
  144.14 +
  144.15 +    Unless required by applicable law or agreed to in writing,
  144.16 +    software distributed under the License is distributed on an
  144.17 +    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
  144.18 +    KIND, either express or implied.  See the License for the
  144.19 +    specific language governing permissions and limitations
  144.20 +    under the License.
  144.21 +-->
  144.22 +
  144.23 +# org.apache.cordova.vibration
  144.24 +
  144.25 +Этот плагин выравнивает с http://www.w3.org/TR/vibration/ спецификации W3C вибрации
  144.26 +
  144.27 +Этот плагин позволяет вибрировать устройство.
  144.28 +
  144.29 +## Установка
  144.30 +
  144.31 +    cordova plugin add org.apache.cordova.vibration
  144.32 +    
  144.33 +
  144.34 +## Поддерживаемые платформы
  144.35 +
  144.36 +Navigator.Vibrate  
  144.37 +Navigator.Notification.Vibrate - Amazon Fire OS - Android - BlackBerry 10 - Firefox OS - iOS - Windows Phone 7 и 8
  144.38 +
  144.39 +navigator.notification.vibrateWithPattern,  
  144.40 +navigator.notification.cancelVibration - Android
  144.41 +
  144.42 +## вибрировать (рекомендуется)
  144.43 +
  144.44 +Эта функция имеет три различных функций, на основе параметров, передаваемых ему.
  144.45 +
  144.46 +### Стандарт вибрировать
  144.47 +
  144.48 +Устройство вибрирует за определенное количество времени.
  144.49 +
  144.50 +    navigator.vibrate(time)
  144.51 +    
  144.52 +
  144.53 +или
  144.54 +
  144.55 +    navigator.vibrate([time])
  144.56 +    
  144.57 +
  144.58 +-**time**: Сколько миллисекунд будет вибрировать устройство. *(Число)*
  144.59 +
  144.60 +#### Пример
  144.61 +
  144.62 +    // Vibrate for 3 seconds
  144.63 +    navigator.vibrate(3000);
  144.64 +    
  144.65 +    // Vibrate for 3 seconds
  144.66 +    navigator.vibrate([3000]);
  144.67 +    
  144.68 +
  144.69 +#### Особенности iOS
  144.70 +
  144.71 +*   **time**: игнорирует указанное время и вибрирует предопределенный отрезок времени.
  144.72 +    
  144.73 +    navigator.vibrate(3000); // 3000 is ignored
  144.74 +
  144.75 +#### Окна и Blackberry причуды
  144.76 +
  144.77 +*   **время**: время Макс 5000ms (5с) и минимальное время 1 мс
  144.78 +    
  144.79 +    navigator.vibrate(8000); // will be truncated to 5000
  144.80 +
  144.81 +### Вибрировать с узором (Android и Windows только)
  144.82 +
  144.83 +Вибрирует на устройства с заданным шаблоном
  144.84 +
  144.85 +    navigator.vibrate(pattern);   
  144.86 +    
  144.87 +
  144.88 +*   **шаблон**: последовательность длительностей (в миллисекундах), для которого требуется включить или выключить вибростол. *(Массив из чисел)*
  144.89 +
  144.90 +#### Пример
  144.91 +
  144.92 +    // Vibrate for 1 second
  144.93 +    // Wait for 1 second
  144.94 +    // Vibrate for 3 seconds
  144.95 +    // Wait for 1 second
  144.96 +    // Vibrate for 5 seconds
  144.97 +    navigator.vibrate([1000, 1000, 3000, 1000, 5000]);
  144.98 +    
  144.99 +
 144.100 +### Отмена вибрации (не поддерживается в iOS)
 144.101 +
 144.102 +Немедленно отменяет любые выполняющиеся вибрации.
 144.103 +
 144.104 +    navigator.vibrate(0)
 144.105 +    
 144.106 +
 144.107 +или
 144.108 +
 144.109 +    navigator.vibrate([])
 144.110 +    
 144.111 +
 144.112 +или
 144.113 +
 144.114 +    navigator.vibrate([0])
 144.115 +    
 144.116 +
 144.117 +Проходя в параметре 0, пустой массив, или массив с одним элементом значения 0 будет отменить любые вибрации.
 144.118 +
 144.119 +## *Notification.Vibrate (устарело)
 144.120 +
 144.121 +Устройство вибрирует за определенное количество времени.
 144.122 +
 144.123 +    navigator.notification.vibrate(time)
 144.124 +    
 144.125 +
 144.126 +*   **time**: Сколько миллисекунд будет вибрировать устройство. *(Число)*
 144.127 +
 144.128 +### Пример
 144.129 +
 144.130 +    // Vibrate for 2.5 seconds
 144.131 +    navigator.notification.vibrate(2500);
 144.132 +    
 144.133 +
 144.134 +### Особенности iOS
 144.135 +
 144.136 +*   **time**: игнорирует указанное время и вибрирует предопределенный отрезок времени.
 144.137 +    
 144.138 +        navigator.notification.vibrate();
 144.139 +        navigator.notification.vibrate(2500);   // 2500 is ignored
 144.140 +        
 144.141 +
 144.142 +## *Notification.vibrateWithPattern (устарело)
 144.143 +
 144.144 +Вибрирует на устройства с заданным шаблоном.
 144.145 +
 144.146 +    navigator.notification.vibrateWithPattern(pattern, repeat)
 144.147 +    
 144.148 +
 144.149 +*   **шаблон**: последовательность длительностей (в миллисекундах), для которого требуется включить или выключить вибростол. *(Массив из чисел)*
 144.150 +*   **повторяю**: дополнительный индекс в массиве шаблон для начала повторять (будет повторять пока не отменен), или -1 для не повторения (по умолчанию). *(Число)*
 144.151 +
 144.152 +### Пример
 144.153 +
 144.154 +    // Immediately start vibrating
 144.155 +    // vibrate for 100ms,
 144.156 +    // wait for 100ms,
 144.157 +    // vibrate for 200ms,
 144.158 +    // wait for 100ms,
 144.159 +    // vibrate for 400ms,
 144.160 +    // wait for 100ms,
 144.161 +    // vibrate for 800ms,
 144.162 +    // (do not repeat)
 144.163 +    navigator.notification.vibrateWithPattern([0, 100, 100, 200, 100, 400, 100, 800]);
 144.164 +    
 144.165 +
 144.166 +## *Notification.cancelVibration (устарело)
 144.167 +
 144.168 +Немедленно отменяет любые выполняющиеся вибрации.
 144.169 +
 144.170 +    navigator.notification.cancelVibration()
 144.171 +    
 144.172 +
 144.173 +* Обратите внимание - из-за соответствие спецификации w3c, Избранные методы будут поэтапно
 144.174 \ No newline at end of file
   145.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   145.2 +++ b/Touchgui/plugins/org.apache.cordova.vibration/doc/zh/index.md	Thu Jun 04 14:50:33 2015 +0200
   145.3 @@ -0,0 +1,170 @@
   145.4 +<!---
   145.5 +    Licensed to the Apache Software Foundation (ASF) under one
   145.6 +    or more contributor license agreements.  See the NOTICE file
   145.7 +    distributed with this work for additional information
   145.8 +    regarding copyright ownership.  The ASF licenses this file
   145.9 +    to you under the Apache License, Version 2.0 (the
  145.10 +    "License"); you may not use this file except in compliance
  145.11 +    with the License.  You may obtain a copy of the License at
  145.12 +
  145.13 +      http://www.apache.org/licenses/LICENSE-2.0
  145.14 +
  145.15 +    Unless required by applicable law or agreed to in writing,
  145.16 +    software distributed under the License is distributed on an
  145.17 +    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
  145.18 +    KIND, either express or implied.  See the License for the
  145.19 +    specific language governing permissions and limitations
  145.20 +    under the License.
  145.21 +-->
  145.22 +
  145.23 +# org.apache.cordova.vibration
  145.24 +
  145.25 +這個外掛程式將對齊與 W3C 振動規範 HTTP://www.w3.org/TR/vibration/
  145.26 +
  145.27 +這個外掛程式提供了方法振動設備。
  145.28 +
  145.29 +## 安裝
  145.30 +
  145.31 +    cordova plugin add org.apache.cordova.vibration
  145.32 +    
  145.33 +
  145.34 +## 支援的平臺
  145.35 +
  145.36 +navigator.vibrate  
  145.37 +navigator.notification.vibrate-亞馬遜火 OS-Android-黑莓 10-火狐瀏覽器作業系統 — — iOS-Windows Phone 7 和 8
  145.38 +
  145.39 +navigator.notification.vibrateWithPattern,  
  145.40 +navigator.notification.cancelVibration-安卓系統
  145.41 +
  145.42 +## 震動 (推薦)
  145.43 +
  145.44 +此函數具有三個不同的功能,基於參數傳遞給它。
  145.45 +
  145.46 +### 標準振動
  145.47 +
  145.48 +為給定時間振動設備。
  145.49 +
  145.50 +    navigator.vibrate(time)
  145.51 +    
  145.52 +
  145.53 +或
  145.54 +
  145.55 +    navigator.vibrate([time])
  145.56 +    
  145.57 +
  145.58 +-**時間**: 毫秒以振動裝置。*(人數)*
  145.59 +
  145.60 +#### 示例
  145.61 +
  145.62 +    // Vibrate for 3 seconds
  145.63 +    navigator.vibrate(3000);
  145.64 +    
  145.65 +    // Vibrate for 3 seconds
  145.66 +    navigator.vibrate([3000]);
  145.67 +    
  145.68 +
  145.69 +#### iOS 的怪癖
  145.70 +
  145.71 +*   **時間**: 忽略指定的時間和震動的一個預先設定的時間。
  145.72 +    
  145.73 +    navigator.vibrate(3000); // 3000 is ignored
  145.74 +
  145.75 +#### Windows 和黑莓的怪癖
  145.76 +
  145.77 +*   **時間**: 最長時間是 5000ms (5s) 和最小時間為 1ms
  145.78 +    
  145.79 +    navigator.vibrate(8000); // will be truncated to 5000
  145.80 +
  145.81 +### 以一種模式 (安卓系統和僅限 Windows) 振動
  145.82 +
  145.83 +振動具有給定模式的設備
  145.84 +
  145.85 +    navigator.vibrate(pattern);   
  145.86 +    
  145.87 +
  145.88 +*   **模式**: 序列的持續時間 (以毫秒為單位) 為其打開或關閉振動器。*(數位陣列)*
  145.89 +
  145.90 +#### 示例
  145.91 +
  145.92 +    // Vibrate for 1 second
  145.93 +    // Wait for 1 second
  145.94 +    // Vibrate for 3 seconds
  145.95 +    // Wait for 1 second
  145.96 +    // Vibrate for 5 seconds
  145.97 +    navigator.vibrate([1000, 1000, 3000, 1000, 5000]);
  145.98 +    
  145.99 +
 145.100 +### 取消振動 (iOS 中不支援)
 145.101 +
 145.102 +立即取消任何當前正在運行的振動。
 145.103 +
 145.104 +    navigator.vibrate(0)
 145.105 +    
 145.106 +
 145.107 +或
 145.108 +
 145.109 +    navigator.vibrate([])
 145.110 +    
 145.111 +
 145.112 +或
 145.113 +
 145.114 +    navigator.vibrate([0])
 145.115 +    
 145.116 +
 145.117 +在一個為 0 的參數中傳遞,空陣列或陣列的一個元素的值為 0 將取消任何振動。
 145.118 +
 145.119 +## *notification.vibrate (已棄用)
 145.120 +
 145.121 +為給定時間振動設備。
 145.122 +
 145.123 +    navigator.notification.vibrate(time)
 145.124 +    
 145.125 +
 145.126 +*   **時間**: 毫秒以振動裝置。*(人數)*
 145.127 +
 145.128 +### 示例
 145.129 +
 145.130 +    // Vibrate for 2.5 seconds
 145.131 +    navigator.notification.vibrate(2500);
 145.132 +    
 145.133 +
 145.134 +### iOS 的怪癖
 145.135 +
 145.136 +*   **時間**: 忽略指定的時間和震動的一個預先設定的時間。
 145.137 +    
 145.138 +        navigator.notification.vibrate();
 145.139 +        navigator.notification.vibrate(2500);   // 2500 is ignored
 145.140 +        
 145.141 +
 145.142 +## *notification.vibrateWithPattern (已棄用)
 145.143 +
 145.144 +振動具有給定模式的設備。
 145.145 +
 145.146 +    navigator.notification.vibrateWithPattern(pattern, repeat)
 145.147 +    
 145.148 +
 145.149 +*   **模式**: 序列的持續時間 (以毫秒為單位) 為其打開或關閉振動器。*(數位陣列)*
 145.150 +*   **重複**: 在其開始重複 (會重複,直到被取消),或-1 為不重複 (預設值) 模式陣列中的可選索引。*(人數)*
 145.151 +
 145.152 +### 示例
 145.153 +
 145.154 +    // Immediately start vibrating
 145.155 +    // vibrate for 100ms,
 145.156 +    // wait for 100ms,
 145.157 +    // vibrate for 200ms,
 145.158 +    // wait for 100ms,
 145.159 +    // vibrate for 400ms,
 145.160 +    // wait for 100ms,
 145.161 +    // vibrate for 800ms,
 145.162 +    // (do not repeat)
 145.163 +    navigator.notification.vibrateWithPattern([0, 100, 100, 200, 100, 400, 100, 800]);
 145.164 +    
 145.165 +
 145.166 +## *notification.cancelVibration (已棄用)
 145.167 +
 145.168 +立即取消任何當前正在運行的振動。
 145.169 +
 145.170 +    navigator.notification.cancelVibration()
 145.171 +    
 145.172 +
 145.173 +* 請注意--對齊方式與 w3c 規範,因出演的方法將被淘汰
 145.174 \ No newline at end of file
   146.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   146.2 +++ b/Touchgui/plugins/org.apache.cordova.vibration/plugin.xml	Thu Jun 04 14:50:33 2015 +0200
   146.3 @@ -0,0 +1,137 @@
   146.4 +<?xml version="1.0" encoding="UTF-8"?>
   146.5 +<!--
   146.6 +  Licensed to the Apache Software Foundation (ASF) under one
   146.7 +  or more contributor license agreements.  See the NOTICE file
   146.8 +  distributed with this work for additional information
   146.9 +  regarding copyright ownership.  The ASF licenses this file
  146.10 +  to you under the Apache License, Version 2.0 (the
  146.11 +  "License"); you may not use this file except in compliance
  146.12 +  with the License.  You may obtain a copy of the License at
  146.13 +
  146.14 +    http://www.apache.org/licenses/LICENSE-2.0
  146.15 +
  146.16 +  Unless required by applicable law or agreed to in writing,
  146.17 +  software distributed under the License is distributed on an
  146.18 +  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
  146.19 +  KIND, either express or implied.  See the License for the
  146.20 +  specific language governing permissions and limitations
  146.21 +  under the License.
  146.22 +-->
  146.23 +
  146.24 +<plugin xmlns="http://apache.org/cordova/ns/plugins/1.0"
  146.25 +    xmlns:android="http://schemas.android.com/apk/res/android"
  146.26 +    id="org.apache.cordova.vibration"
  146.27 +    version="0.3.12">
  146.28 +
  146.29 +    <name>Vibration</name>
  146.30 +    <description>Cordova Vibration Plugin</description>
  146.31 +    <license>Apache 2.0</license>
  146.32 +    <keywords>cordova,vibration</keywords>
  146.33 +    <repo>https://git-wip-us.apache.org/repos/asf/cordova-plugin-vibration.git</repo>
  146.34 +    <issue>https://issues.apache.org/jira/browse/CB/component/12320639</issue>
  146.35 +
  146.36 +    <js-module src="www/vibration.js" name="notification">
  146.37 +        <merges target="navigator.notification" />
  146.38 +        <merges target="navigator" />
  146.39 +    </js-module>
  146.40 +
  146.41 +    <!-- firefoxos -->
  146.42 +    <platform name="firefoxos">
  146.43 +        <config-file target="www/config.xml" parent="/*">
  146.44 +            <feature name="Vibration">
  146.45 +                <param name="firefoxos-package" value="Vibration" />
  146.46 +            </feature>
  146.47 +        </config-file>                                         
  146.48 +        <js-module src="src/firefoxos/VibrationProxy.js" name="VibrationProxy">
  146.49 +            <runs />
  146.50 +        </js-module>
  146.51 +    </platform>
  146.52 +
  146.53 +    <!-- wp7 -->
  146.54 +    <platform name="wp7">
  146.55 +        <config-file target="config.xml" parent="/*">
  146.56 +            <feature name="Vibration">
  146.57 +                <param name="wp-package" value="Vibration"/>
  146.58 +            </feature>
  146.59 +        </config-file>
  146.60 +
  146.61 +        <source-file src="src/wp/Vibration.cs" />
  146.62 +    </platform>
  146.63 +
  146.64 +    <!-- wp8 -->
  146.65 +    <platform name="wp8">
  146.66 +        <config-file target="config.xml" parent="/*">
  146.67 +            <feature name="Vibration">
  146.68 +                <param name="wp-package" value="Vibration"/>
  146.69 +            </feature>
  146.70 +        </config-file>
  146.71 +
  146.72 +        <source-file src="src/wp/Vibration.cs" />
  146.73 +    </platform>
  146.74 +
  146.75 +    <!-- android -->
  146.76 +    <platform name="android">
  146.77 +        <config-file target="res/xml/config.xml" parent="/*">
  146.78 +            <feature name="Vibration">
  146.79 +                <param name="android-package" value="org.apache.cordova.vibration.Vibration"/>
  146.80 +            </feature>
  146.81 +        </config-file>
  146.82 +
  146.83 +        <source-file src="src/android/Vibration.java" target-dir="src/org/apache/cordova/vibration" />
  146.84 +
  146.85 +        <config-file target="AndroidManifest.xml" parent="/manifest">
  146.86 +            <uses-permission android:name="android.permission.VIBRATE"/>
  146.87 +        </config-file>
  146.88 +    </platform>
  146.89 +
  146.90 +    <!-- amazon-fireos -->
  146.91 +    <platform name="amazon-fireos">
  146.92 +        <config-file target="res/xml/config.xml" parent="/*">
  146.93 +            <feature name="Vibration">
  146.94 +                <param name="android-package" value="org.apache.cordova.vibration.Vibration"/>
  146.95 +            </feature>
  146.96 +        </config-file>
  146.97 +
  146.98 +        <source-file src="src/android/Vibration.java" target-dir="src/org/apache/cordova/vibration" />
  146.99 +
 146.100 +        <config-file target="AndroidManifest.xml" parent="/manifest">
 146.101 +            <uses-permission android:name="android.permission.VIBRATE"/>
 146.102 +        </config-file>
 146.103 +    </platform>
 146.104 +    
 146.105 +    <!-- ubuntu -->
 146.106 +    <platform name="ubuntu">
 146.107 +        <header-file src="src/ubuntu/vibration.h" />
 146.108 +        <source-file src="src/ubuntu/vibration.cpp" />
 146.109 +    </platform>
 146.110 +
 146.111 +    <!-- ios -->
 146.112 +    <platform name="ios">
 146.113 +        <config-file target="config.xml" parent="/*">
 146.114 +            <feature name="Vibration">
 146.115 +                <param name="ios-package" value="CDVVibration"/>
 146.116 +            </feature>
 146.117 +        </config-file>
 146.118 +        <header-file src="src/ios/CDVVibration.h" />
 146.119 +	    <source-file src="src/ios/CDVVibration.m" />
 146.120 +
 146.121 +		<framework src="AudioToolbox.framework" weak="true" />
 146.122 +    </platform>
 146.123 +	
 146.124 +    <!-- blackberry10 -->
 146.125 +    <platform name="blackberry10">
 146.126 +        <source-file src="src/blackberry10/index.js" target-dir="Vibration"/>
 146.127 +        <lib-file src="src/blackberry10/native/device/libVibration.so" arch="device" />
 146.128 +        <lib-file src="src/blackberry10/native/simulator/libVibration.so" arch="simulator" />
 146.129 +        <config-file target="www/config.xml" parent="/widget">
 146.130 +            <feature name="Vibration" value="Vibration" />
 146.131 +        </config-file>
 146.132 +    </platform>
 146.133 +
 146.134 +    <!-- tizen -->
 146.135 +    <platform name="tizen">
 146.136 +        <js-module src="src/tizen/VibrationProxy.js" name="VibrationProxy">
 146.137 +            <runs />
 146.138 +        </js-module>
 146.139 +    </platform>
 146.140 +</plugin>
   147.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   147.2 +++ b/Touchgui/plugins/org.apache.cordova.vibration/src/android/Vibration.java	Thu Jun 04 14:50:33 2015 +0200
   147.3 @@ -0,0 +1,126 @@
   147.4 +/*
   147.5 +       Licensed to the Apache Software Foundation (ASF) under one
   147.6 +       or more contributor license agreements.  See the NOTICE file
   147.7 +       distributed with this work for additional information
   147.8 +       regarding copyright ownership.  The ASF licenses this file
   147.9 +       to you under the Apache License, Version 2.0 (the
  147.10 +       "License"); you may not use this file except in compliance
  147.11 +       with the License.  You may obtain a copy of the License at
  147.12 +
  147.13 +         http://www.apache.org/licenses/LICENSE-2.0
  147.14 +
  147.15 +       Unless required by applicable law or agreed to in writing,
  147.16 +       software distributed under the License is distributed on an
  147.17 +       "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
  147.18 +       KIND, either express or implied.  See the License for the
  147.19 +       specific language governing permissions and limitations
  147.20 +       under the License.
  147.21 +*/
  147.22 +package org.apache.cordova.vibration;
  147.23 +
  147.24 +import org.apache.cordova.CallbackContext;
  147.25 +import org.apache.cordova.CordovaPlugin;
  147.26 +import org.json.JSONArray;
  147.27 +import org.json.JSONException;
  147.28 +import android.content.Context;
  147.29 +import android.os.Vibrator;
  147.30 +
  147.31 +/**
  147.32 + * This class provides access to vibration on the device.
  147.33 + */
  147.34 +public class Vibration extends CordovaPlugin {
  147.35 +
  147.36 +    /**
  147.37 +     * Constructor.
  147.38 +     */
  147.39 +    public Vibration() {
  147.40 +    }
  147.41 +
  147.42 +    /**
  147.43 +     * Executes the request and returns PluginResult.
  147.44 +     *
  147.45 +     * @param action            The action to execute.
  147.46 +     * @param args              JSONArray of arguments for the plugin.
  147.47 +     * @param callbackContext   The callback context used when calling back into JavaScript.
  147.48 +     * @return                  True when the action was valid, false otherwise.
  147.49 +     */
  147.50 +    public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException {
  147.51 +        if (action.equals("vibrate")) {
  147.52 +            this.vibrate(args.getLong(0));
  147.53 +        }
  147.54 +        else if (action.equals("vibrateWithPattern")) {
  147.55 +            JSONArray pattern = args.getJSONArray(0);
  147.56 +            int repeat = args.getInt(1);
  147.57 +            //add a 0 at the beginning of pattern to align with w3c
  147.58 +            long[] patternArray = new long[pattern.length()+1];
  147.59 +            patternArray[0] = 0;
  147.60 +            for (int i = 0; i < pattern.length(); i++) {
  147.61 +                patternArray[i+1] = pattern.getLong(i);
  147.62 +            }
  147.63 +            this.vibrateWithPattern(patternArray, repeat);
  147.64 +        }
  147.65 +        else if (action.equals("cancelVibration")) {
  147.66 +            this.cancelVibration();
  147.67 +        }
  147.68 +        else {
  147.69 +            return false;
  147.70 +        }
  147.71 +
  147.72 +        // Only alert and confirm are async.
  147.73 +        callbackContext.success();
  147.74 +
  147.75 +        return true;
  147.76 +    }
  147.77 +
  147.78 +    //--------------------------------------------------------------------------
  147.79 +    // LOCAL METHODS
  147.80 +    //--------------------------------------------------------------------------
  147.81 +
  147.82 +    /**
  147.83 +     * Vibrates the device for a given amount of time.
  147.84 +     *
  147.85 +     * @param time      Time to vibrate in ms.
  147.86 +     */
  147.87 +    public void vibrate(long time) {
  147.88 +        // Start the vibration, 0 defaults to half a second.
  147.89 +        if (time == 0) {
  147.90 +            time = 500;
  147.91 +        }
  147.92 +        Vibrator vibrator = (Vibrator) this.cordova.getActivity().getSystemService(Context.VIBRATOR_SERVICE);
  147.93 +        vibrator.vibrate(time);
  147.94 +    }
  147.95 +
  147.96 +    /**
  147.97 +     * Vibrates the device with a given pattern.
  147.98 +     *
  147.99 +     * @param pattern     Pattern with which to vibrate the device.
 147.100 +     *                    Pass in an array of longs that
 147.101 +     *                    are the durations for which to
 147.102 +     *                    turn on or off the vibrator in
 147.103 +     *                    milliseconds. The first value
 147.104 +     *                    indicates the number of milliseconds
 147.105 +     *                    to wait before turning the vibrator
 147.106 +     *                    on. The next value indicates the
 147.107 +     *                    number of milliseconds for which
 147.108 +     *                    to keep the vibrator on before
 147.109 +     *                    turning it off. Subsequent values
 147.110 +     *                    alternate between durations in
 147.111 +     *                    milliseconds to turn the vibrator
 147.112 +     *                    off or to turn the vibrator on.
 147.113 +     *
 147.114 +     * @param repeat      Optional index into the pattern array at which
 147.115 +     *                    to start repeating, or -1 for no repetition (default).
 147.116 +     */
 147.117 +    public void vibrateWithPattern(long[] pattern, int repeat) {
 147.118 +        Vibrator vibrator = (Vibrator) this.cordova.getActivity().getSystemService(Context.VIBRATOR_SERVICE);
 147.119 +        vibrator.vibrate(pattern, repeat);
 147.120 +    }
 147.121 +
 147.122 +    /**
 147.123 +     * Immediately cancels any currently running vibration.
 147.124 +     */
 147.125 +    public void cancelVibration() {
 147.126 +        Vibrator vibrator = (Vibrator) this.cordova.getActivity().getSystemService(Context.VIBRATOR_SERVICE);
 147.127 +        vibrator.cancel();
 147.128 +    }
 147.129 +}
   148.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   148.2 +++ b/Touchgui/plugins/org.apache.cordova.vibration/src/blackberry10/index.js	Thu Jun 04 14:50:33 2015 +0200
   148.3 @@ -0,0 +1,80 @@
   148.4 +/*
   148.5 + *
   148.6 + * Licensed to the Apache Software Foundation (ASF) under one
   148.7 + * or more contributor license agreements.  See the NOTICE file
   148.8 + * distributed with this work for additional information
   148.9 + * regarding copyright ownership.  The ASF licenses this file
  148.10 + * to you under the Apache License, Version 2.0 (the
  148.11 + * "License"); you may not use this file except in compliance
  148.12 + * with the License.  You may obtain a copy of the License at
  148.13 + *
  148.14 + *   http://www.apache.org/licenses/LICENSE-2.0
  148.15 + *
  148.16 + * Unless required by applicable law or agreed to in writing,
  148.17 + * software distributed under the License is distributed on an
  148.18 + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
  148.19 + * KIND, either express or implied.  See the License for the
  148.20 + * specific language governing permissions and limitations
  148.21 + * under the License.
  148.22 + *
  148.23 +*/
  148.24 +
  148.25 +var vibration;
  148.26 +
  148.27 +module.exports = {
  148.28 +    vibrate: function (success, fail, args, env) {
  148.29 +        var result = new PluginResult(args, env),
  148.30 +            duration = args[0],
  148.31 +            response = vibration.getInstance().vibrate(duration);
  148.32 +        result.ok(response, false);
  148.33 +    }
  148.34 +};
  148.35 +
  148.36 +///////////////////////////////////////////////////////////////////
  148.37 +// JavaScript wrapper for JNEXT plugin
  148.38 +///////////////////////////////////////////////////////////////////
  148.39 +
  148.40 +JNEXT.Vibration = function () {
  148.41 +    var self = this,
  148.42 +        hasInstance = false;
  148.43 +
  148.44 +    self.vibrate = function (duration) {
  148.45 +        //This is how Javascript calls into native
  148.46 +        return JNEXT.invoke(self.m_id, "vibrate " + duration);
  148.47 +    };
  148.48 +
  148.49 +    self.init = function () {
  148.50 +        //Checks that the jnext library is present and loads it
  148.51 +        if (!JNEXT.require("libVibration")) {
  148.52 +            return false;
  148.53 +        }
  148.54 +
  148.55 +        //Creates the native object that this interface will call
  148.56 +        self.m_id = JNEXT.createObject("libVibration.Vibration");
  148.57 +
  148.58 +        if (self.m_id === "") {
  148.59 +            return false;
  148.60 +        }
  148.61 +
  148.62 +        //Registers for the JNEXT event loop
  148.63 +        JNEXT.registerEvents(self);
  148.64 +    };
  148.65 +
  148.66 +    self.m_id = "";
  148.67 +
  148.68 +    //Used by JNEXT library to get the ID
  148.69 +    self.getId = function () {
  148.70 +        return self.m_id;
  148.71 +    };
  148.72 +
  148.73 +    //Not truly required but useful for instance management
  148.74 +    self.getInstance = function () {
  148.75 +        if (!hasInstance) {
  148.76 +            self.init();
  148.77 +            hasInstance = true;
  148.78 +        }
  148.79 +        return self;
  148.80 +    };
  148.81 +};
  148.82 +
  148.83 +vibration = new JNEXT.Vibration();
   149.1 Binary file Touchgui/plugins/org.apache.cordova.vibration/src/blackberry10/native/device/libVibration.so has changed
   150.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   150.2 +++ b/Touchgui/plugins/org.apache.cordova.vibration/src/blackberry10/native/public/plugin.cpp	Thu Jun 04 14:50:33 2015 +0200
   150.3 @@ -0,0 +1,341 @@
   150.4 +/*
   150.5 + *
   150.6 + * Licensed to the Apache Software Foundation (ASF) under one
   150.7 + * or more contributor license agreements.  See the NOTICE file
   150.8 + * distributed with this work for additional information
   150.9 + * regarding copyright ownership.  The ASF licenses this file
  150.10 + * to you under the Apache License, Version 2.0 (the
  150.11 + * "License"); you may not use this file except in compliance
  150.12 + * with the License.  You may obtain a copy of the License at
  150.13 + *
  150.14 + *   http://www.apache.org/licenses/LICENSE-2.0
  150.15 + *
  150.16 + * Unless required by applicable law or agreed to in writing,
  150.17 + * software distributed under the License is distributed on an
  150.18 + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
  150.19 + * KIND, either express or implied.  See the License for the
  150.20 + * specific language governing permissions and limitations
  150.21 + * under the License.
  150.22 + *
  150.23 +*/
  150.24 +
  150.25 +#include "plugin.h"
  150.26 +#include "tokenizer.h"
  150.27 +
  150.28 +#ifdef _WINDOWS
  150.29 +#include <windows.h>
  150.30 +BOOL APIENTRY DllMain( HANDLE hModule,
  150.31 +                       DWORD ul_reason_for_call,
  150.32 +                       LPVOID lpReserved )
  150.33 +{
  150.34 +    return TRUE;
  150.35 +}
  150.36 +#else
  150.37 +#include <errno.h>
  150.38 +#include <string.h>
  150.39 +
  150.40 +extern int errno;
  150.41 +#endif
  150.42 +
  150.43 +SendPluginEv SendPluginEvent;
  150.44 +
  150.45 +string g_GetSysErrMsg( void )
  150.46 +{
  150.47 +    string strError = "Unknown";
  150.48 +    // Problem loading
  150.49 +#ifdef _WINDOWS
  150.50 +    int nErrorCode = GetLastError();
  150.51 +    LPTSTR s;
  150.52 +    if ( ::FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
  150.53 +    NULL, nErrorCode, 0, ( LPTSTR ) &s, 0, NULL ) )
  150.54 +    {
  150.55 +        strError = s;
  150.56 +    }
  150.57 +    else
  150.58 +    {
  150.59 +        char szBuf[ 20 ];
  150.60 +        _snprintf_s( szBuf, _countof(szBuf), 19, "%d", nErrorCode );
  150.61 +        strError = szBuf;
  150.62 +    }
  150.63 +#else
  150.64 +    char szError[80];
  150.65 +    if ( strerror_r( errno, szError, sizeof(szError)  ) )
  150.66 +    {
  150.67 +        strError = "no description found";
  150.68 +    }
  150.69 +    else
  150.70 +    {
  150.71 +        strError = szError;
  150.72 +    }
  150.73 +#endif
  150.74 +    return strError;
  150.75 +}
  150.76 +
  150.77 +void g_sleep( unsigned int mseconds )
  150.78 +{
  150.79 +#ifdef _WINDOWS
  150.80 +    Sleep( mseconds );
  150.81 +#else
  150.82 +    usleep( mseconds * 1000 );
  150.83 +#endif
  150.84 +}
  150.85 +
  150.86 +string& g_trim( string& str )
  150.87 +{
  150.88 +    // Whitespace characters
  150.89 +    char whspc[] = " \t\r\n\v\f";
  150.90 +
  150.91 +    // Whack off first part
  150.92 +    size_t pos = str.find_first_not_of( whspc );
  150.93 +
  150.94 +    if ( pos != string::npos )
  150.95 +        str.replace( 0, pos, "" );
  150.96 +
  150.97 +    // Whack off trailing stuff
  150.98 +    pos = str.find_last_not_of( whspc );
  150.99 +
 150.100 +    if ( pos != string::npos )
 150.101 +        str.replace( pos + 1, str.length() - pos, "" );
 150.102 +
 150.103 +    return str;
 150.104 +}
 150.105 +
 150.106 +void g_tokenize( const string& str, const string& delimiters, vector<string>& tokens )
 150.107 +{
 150.108 +    tokenize( str, tokens, delimiters );
 150.109 +}
 150.110 +
 150.111 +char* SetEventFunc( SendPluginEv funcPtr )
 150.112 +{
 150.113 +    static char * szObjList = onGetObjList();
 150.114 +    SendPluginEvent = funcPtr;
 150.115 +    return szObjList;
 150.116 +}
 150.117 +
 150.118 +
 150.119 +const int nMAXSIZE = 512;
 150.120 +char* g_pszRetVal = NULL;
 150.121 +
 150.122 +//-----------------------------------------------------------
 150.123 +// Map from an object Id to an object instance
 150.124 +//-----------------------------------------------------------
 150.125 +typedef std::map<string, JSExt*> StringToJExt_T;
 150.126 +
 150.127 +//-----------------------------------------------------------
 150.128 +// Map from a browser context to an id mapping
 150.129 +//-----------------------------------------------------------
 150.130 +typedef std::map<void*, StringToJExt_T*> VoidToMap_T;
 150.131 +
 150.132 +VoidToMap_T g_context2Map;
 150.133 +
 150.134 +class GlobalSharedModule
 150.135 +{
 150.136 +
 150.137 +public:
 150.138 +    GlobalSharedModule( void )
 150.139 +    {
 150.140 +        g_pszRetVal = new char[ nMAXSIZE ];
 150.141 +    }
 150.142 +
 150.143 +    ~GlobalSharedModule()
 150.144 +    {
 150.145 +        delete [] g_pszRetVal;
 150.146 +
 150.147 +        VoidToMap_T::iterator posMaps;
 150.148 +
 150.149 +        for ( posMaps = g_context2Map.begin(); posMaps != g_context2Map.end(); ++posMaps )
 150.150 +        {
 150.151 +            StringToJExt_T& id2Obj = *posMaps->second;
 150.152 +            StringToJExt_T::iterator posMap;
 150.153 +
 150.154 +            for ( posMap = id2Obj.begin(); posMap != id2Obj.end(); ++posMap )
 150.155 +            {
 150.156 +                JSExt* pJSExt = posMap->second;
 150.157 +
 150.158 +                if ( pJSExt->CanDelete() )
 150.159 +                {
 150.160 +                    delete pJSExt;
 150.161 +                }
 150.162 +            }
 150.163 +
 150.164 +            id2Obj.erase( id2Obj.begin(), id2Obj.end() );
 150.165 +        }
 150.166 +
 150.167 +        g_context2Map.erase( g_context2Map.begin(), g_context2Map.end() );
 150.168 +    }
 150.169 +};
 150.170 +
 150.171 +GlobalSharedModule g_sharedModule;
 150.172 +
 150.173 +char* g_str2global( const string& strRetVal )
 150.174 +{
 150.175 +    int nLen = strRetVal.size();
 150.176 +
 150.177 +    if ( nLen >= nMAXSIZE )
 150.178 +    {
 150.179 +        delete [] g_pszRetVal;
 150.180 +        g_pszRetVal = new char[ nLen + 1 ];
 150.181 +    }
 150.182 +
 150.183 +    else
 150.184 +    {
 150.185 +        // To minimaize the number of memory reallocations, the assumption
 150.186 +        // is that in most times this will be the case
 150.187 +        delete [] g_pszRetVal;
 150.188 +        g_pszRetVal = new char[ nMAXSIZE ];
 150.189 +    }
 150.190 +
 150.191 +    strcpy( g_pszRetVal, strRetVal.c_str() );
 150.192 +    return g_pszRetVal;
 150.193 +}
 150.194 +
 150.195 +bool g_unregisterObject( const string& strObjId, void* pContext )
 150.196 +{
 150.197 +    // Called by the plugin extension implementation
 150.198 +    // if the extension handles the deletion of its object
 150.199 +
 150.200 +    StringToJExt_T * pID2Obj = NULL;
 150.201 +
 150.202 +    VoidToMap_T::iterator iter = g_context2Map.find( pContext );
 150.203 +
 150.204 +    if ( iter != g_context2Map.end() )
 150.205 +    {
 150.206 +        pID2Obj = iter->second;
 150.207 +    }
 150.208 +    else
 150.209 +    {
 150.210 +        return false;
 150.211 +    }
 150.212 +
 150.213 +    StringToJExt_T& mapID2Obj = *pID2Obj;
 150.214 +
 150.215 +    StringToJExt_T::iterator r = mapID2Obj.find( strObjId );
 150.216 +
 150.217 +    if ( r == mapID2Obj.end() )
 150.218 +    {
 150.219 +        return false;
 150.220 +    }
 150.221 +
 150.222 +    mapID2Obj.erase( strObjId );
 150.223 +    return true;
 150.224 +}
 150.225 +
 150.226 +char* InvokeFunction( const char* szCommand, void* pContext )
 150.227 +{
 150.228 +    StringToJExt_T * pID2Obj = NULL;
 150.229 +
 150.230 +    VoidToMap_T::iterator iter = g_context2Map.find( pContext );
 150.231 +
 150.232 +    if ( iter != g_context2Map.end() )
 150.233 +    {
 150.234 +        pID2Obj = iter->second;
 150.235 +    }
 150.236 +    else
 150.237 +    {
 150.238 +        pID2Obj = new StringToJExt_T;
 150.239 +        g_context2Map[ pContext ] = pID2Obj;
 150.240 +    }
 150.241 +
 150.242 +    StringToJExt_T& mapID2Obj = *pID2Obj;
 150.243 +
 150.244 +    string strFullCommand = szCommand;
 150.245 +    vector<string> arParams;
 150.246 +    g_tokenize( strFullCommand, " ", arParams );
 150.247 +    string strCommand = arParams[ 0 ];
 150.248 +    string strRetVal = szERROR;
 150.249 +
 150.250 +    if ( strCommand == szCREATE )
 150.251 +    {
 150.252 +        string strClassName = arParams[ 1 ];
 150.253 +        string strObjId = arParams[ 2 ];
 150.254 +
 150.255 +        StringToJExt_T::iterator r = mapID2Obj.find( strObjId );
 150.256 +
 150.257 +        if ( r != mapID2Obj.end() )
 150.258 +        {
 150.259 +            strRetVal += strObjId;
 150.260 +            strRetVal += " :Object already exists.";
 150.261 +            return g_str2global( strRetVal );
 150.262 +        }
 150.263 +
 150.264 +        JSExt* pJSExt = onCreateObject( strClassName, strObjId );
 150.265 +
 150.266 +        if ( pJSExt == NULL )
 150.267 +        {
 150.268 +            strRetVal += strObjId;
 150.269 +            strRetVal += " :Unknown object type ";
 150.270 +            strRetVal += strClassName;
 150.271 +            return g_str2global( strRetVal );
 150.272 +        }
 150.273 +
 150.274 +        pJSExt->m_pContext = pContext;
 150.275 +        mapID2Obj[ strObjId ] = pJSExt;
 150.276 +
 150.277 +        strRetVal = szOK;
 150.278 +        strRetVal += strObjId;
 150.279 +        return g_str2global( strRetVal );
 150.280 +    }
 150.281 +    else
 150.282 +    if ( strCommand == szINVOKE )
 150.283 +    {
 150.284 +        string strObjId = arParams[ 1 ];
 150.285 +        string strMethod = arParams[ 2 ];
 150.286 +
 150.287 +        StringToJExt_T::iterator r = mapID2Obj.find( strObjId );
 150.288 +
 150.289 +        if ( r == mapID2Obj.end() )
 150.290 +        {
 150.291 +            strRetVal += strObjId;
 150.292 +            strRetVal += " :No object found for id.";
 150.293 +            return g_str2global( strRetVal );
 150.294 +        }
 150.295 +
 150.296 +        JSExt* pJSExt = r->second;
 150.297 +
 150.298 +        size_t nLoc = strFullCommand.find( strObjId );
 150.299 +
 150.300 +        if ( nLoc == string::npos )
 150.301 +        {
 150.302 +            strRetVal += strObjId;
 150.303 +            strRetVal += " :Internal InvokeMethod error.";
 150.304 +            return g_str2global( strRetVal );
 150.305 +        }
 150.306 +
 150.307 +        if ( strMethod == szDISPOSE )
 150.308 +        {
 150.309 +            StringToJExt_T::iterator r = mapID2Obj.find( strObjId );
 150.310 +
 150.311 +            if ( r == mapID2Obj.end() )
 150.312 +            {
 150.313 +                strRetVal = szERROR;
 150.314 +                strRetVal += strObjId;
 150.315 +                return g_str2global( strRetVal );
 150.316 +            }
 150.317 +
 150.318 +            JSExt * pJSExt = mapID2Obj[ strObjId ];
 150.319 +
 150.320 +            if ( pJSExt->CanDelete() )
 150.321 +            {
 150.322 +                delete pJSExt;
 150.323 +            }
 150.324 +
 150.325 +            mapID2Obj.erase( strObjId );
 150.326 +            strRetVal = szOK;
 150.327 +            strRetVal += strObjId;
 150.328 +            return g_str2global( strRetVal );
 150.329 +        }
 150.330 +
 150.331 +        size_t nSuffixLoc = nLoc + strObjId.size();
 150.332 +        string strInvoke = strFullCommand.substr( nSuffixLoc );
 150.333 +        strInvoke = g_trim( strInvoke );
 150.334 +        strRetVal = pJSExt->InvokeMethod( strInvoke );
 150.335 +        return g_str2global( strRetVal );
 150.336 +    }
 150.337 +
 150.338 +    strRetVal += " :Unknown command ";
 150.339 +    strRetVal += strCommand;
 150.340 +    return g_str2global( strRetVal );
 150.341 +}
 150.342 +
 150.343 +//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 150.344 +
   151.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   151.2 +++ b/Touchgui/plugins/org.apache.cordova.vibration/src/blackberry10/native/public/plugin.h	Thu Jun 04 14:50:33 2015 +0200
   151.3 @@ -0,0 +1,91 @@
   151.4 +/*
   151.5 + *
   151.6 + * Licensed to the Apache Software Foundation (ASF) under one
   151.7 + * or more contributor license agreements.  See the NOTICE file
   151.8 + * distributed with this work for additional information
   151.9 + * regarding copyright ownership.  The ASF licenses this file
  151.10 + * to you under the Apache License, Version 2.0 (the
  151.11 + * "License"); you may not use this file except in compliance
  151.12 + * with the License.  You may obtain a copy of the License at
  151.13 + *
  151.14 + *   http://www.apache.org/licenses/LICENSE-2.0
  151.15 + *
  151.16 + * Unless required by applicable law or agreed to in writing,
  151.17 + * software distributed under the License is distributed on an
  151.18 + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
  151.19 + * KIND, either express or implied.  See the License for the
  151.20 + * specific language governing permissions and limitations
  151.21 + * under the License.
  151.22 + *
  151.23 +*/
  151.24 +
  151.25 +#ifndef _PLUGIN_H
  151.26 +#define _PLUGIN_H
  151.27 +
  151.28 +#include <map>
  151.29 +#include <string>
  151.30 +#include <vector>
  151.31 +#include <unistd.h>
  151.32 +//#include "tokenizer.h"
  151.33 +
  151.34 +using namespace std;
  151.35 +
  151.36 +//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  151.37 +//%% Functions exported by this DLL
  151.38 +//%% Should always be only SetEventFunc and InvokeFunction
  151.39 +//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  151.40 +// g++ requires extern "C" otherwise the names of SetEventFunc and InvokeFunction
  151.41 +// are mangled C++ style. MS Visual Studio doesn't seem to care though.
  151.42 +extern "C"
  151.43 +{
  151.44 +    typedef void (*SendPluginEv)( const char* szEvent, void* pContext );
  151.45 +    char* SetEventFunc(SendPluginEv funcPtr);
  151.46 +    char* InvokeFunction( const char* szCommand, void* pContext );
  151.47 +}
  151.48 +
  151.49 +// JNEXT Framework function of the form:
  151.50 +// typedef void (*SendPluginEv)( const char* szEvent );
  151.51 +// used to notify JavaScript of an asynchronous event
  151.52 +extern SendPluginEv SendPluginEvent;
  151.53 +
  151.54 +/////////////////////////////////////////////////////////////////////////
  151.55 +// Constants and methods common to all JNEXT extensions types
  151.56 +/////////////////////////////////////////////////////////////////////////
  151.57 +#define szERROR         "Error "
  151.58 +#define szOK            "Ok "
  151.59 +
  151.60 +#define szDISPOSE       "Dispose"
  151.61 +#define szINVOKE        "InvokeMethod"
  151.62 +#define szCREATE        "CreateObj"
  151.63 +
  151.64 +/////////////////////////////////////////////////////////////////////////
  151.65 +// Utility functions
  151.66 +/////////////////////////////////////////////////////////////////////////
  151.67 +string& g_trim( string& str );
  151.68 +void g_tokenize(const string& str,const string& delimiters, vector<string>& tokens);
  151.69 +char* g_str2static( const string& strRetVal );
  151.70 +void g_sleep( unsigned int mseconds );
  151.71 +bool g_unregisterObject( const string& strObjId, void* pContext );
  151.72 +
  151.73 +
  151.74 +/////////////////////////////////////////////////////////////////////////
  151.75 +// Abstract extension object
  151.76 +/////////////////////////////////////////////////////////////////////////
  151.77 +class JSExt
  151.78 +{
  151.79 +public:
  151.80 +    virtual ~JSExt() {};
  151.81 +    virtual string InvokeMethod( const string& strCommand ) = 0;
  151.82 +    virtual bool CanDelete( void ) = 0;
  151.83 +    virtual void TryDelete( void ) {}
  151.84 +public:
  151.85 +    void* m_pContext;
  151.86 +};
  151.87 +
  151.88 +/////////////////////////////////////////////////////////////////////////
  151.89 +// Callback functions to be implemented by the plugin implementation
  151.90 +/////////////////////////////////////////////////////////////////////////
  151.91 +extern char* onGetObjList( void );
  151.92 +extern JSExt* onCreateObject( const string& strClassName, const string& strObjId );
  151.93 +
  151.94 +#endif
   152.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   152.2 +++ b/Touchgui/plugins/org.apache.cordova.vibration/src/blackberry10/native/public/tokenizer.cpp	Thu Jun 04 14:50:33 2015 +0200
   152.3 @@ -0,0 +1,222 @@
   152.4 +/************************************************************************
   152.5 +The zlib/libpng License
   152.6 +
   152.7 +Copyright (c) 2006 Joerg Wiedenmann
   152.8 +
   152.9 +This software is provided 'as-is', without any express or implied warranty.
  152.10 +In no event will the authors be held liable for any damages arising from
  152.11 +the use of this software.
  152.12 +
  152.13 +Permission is granted to anyone to use this software for any purpose,
  152.14 +including commercial applications, and to alter it and redistribute it
  152.15 +freely, subject to the following restrictions:
  152.16 +
  152.17 +1. The origin of this software must not be misrepresented;
  152.18 +you must not claim that you wrote the original software.
  152.19 +If you use this software in a product, an acknowledgment
  152.20 +in the product documentation would be appreciated but is
  152.21 +not required.
  152.22 +
  152.23 +2. Altered source versions must be plainly marked as such,
  152.24 +and must not be misrepresented as being the original software.
  152.25 +
  152.26 +3. This notice may not be removed or altered from any source distribution.
  152.27 +
  152.28 +***********************************************************************/
  152.29 +
  152.30 +/********************************************************************
  152.31 +	created:	2006-01-28
  152.32 +	filename: 	tokenizer.cpp
  152.33 +	author:		Jrg Wiedenmann
  152.34 +	
  152.35 +	purpose:	A tokenizer function which provides a very
  152.36 +				customizable way of breaking up strings.
  152.37 +
  152.38 +	history:	2006-01-28, Original version
  152.39 +				2006-03-04, Fixed a small parsing bug, thanks Elias.
  152.40 +*********************************************************************/
  152.41 +
  152.42 +#include "tokenizer.h"
  152.43 +
  152.44 +using namespace std;
  152.45 +
  152.46 +void tokenize ( const string& str, vector<string>& result,
  152.47 +			   const string& delimiters, const string& delimiters_preserve,
  152.48 +			   const string& quote, const string& esc )
  152.49 +{
  152.50 +	// clear the vector
  152.51 +	if ( false == result.empty() )
  152.52 +	{
  152.53 +		result.clear();
  152.54 +	}
  152.55 +
  152.56 +	string::size_type pos = 0; // the current position (char) in the string
  152.57 +	char ch = 0; // buffer for the current character
  152.58 +	char delimiter = 0;	// the buffer for the delimiter char which
  152.59 +							// will be added to the tokens if the delimiter
  152.60 +							// is preserved
  152.61 +	char current_quote = 0; // the char of the current open quote
  152.62 +	bool quoted = false; // indicator if there is an open quote
  152.63 +	string token;  // string buffer for the token
  152.64 +	bool token_complete = false; // indicates if the current token is
  152.65 +								 // read to be added to the result vector
  152.66 +	string::size_type len = str.length();  // length of the input-string
  152.67 +
  152.68 +	// for every char in the input-string
  152.69 +	while ( len > pos )
  152.70 +	{
  152.71 +		// get the character of the string and reset the delimiter buffer
  152.72 +		ch = str.at(pos);
  152.73 +		delimiter = 0;
  152.74 +
  152.75 +		// assume ch isn't a delimiter
  152.76 +		bool add_char = true;
  152.77 +
  152.78 +		// check ...
  152.79 +
  152.80 +		// ... if the delimiter is an escaped character
  152.81 +		bool escaped = false; // indicates if the next char is protected
  152.82 +		if ( false == esc.empty() ) // check if esc-chars are  provided
  152.83 +		{
  152.84 +			if ( string::npos != esc.find_first_of(ch) )
  152.85 +			{
  152.86 +				// get the escaped char
  152.87 +				++pos;
  152.88 +				if ( pos < len ) // if there are more chars left
  152.89 +				{
  152.90 +					// get the next one
  152.91 +					ch = str.at(pos);
  152.92 +
  152.93 +					// add the escaped character to the token
  152.94 +					add_char = true;
  152.95 +				}
  152.96 +				else // cannot get any more characters
  152.97 +				{
  152.98 +					// don't add the esc-char
  152.99 +					add_char = false;
 152.100 +				}
 152.101 +
 152.102 +				// ignore the remaining delimiter checks
 152.103 +				escaped = true;
 152.104 +			}
 152.105 +		}
 152.106 +
 152.107 +		// ... if the delimiter is a quote
 152.108 +		if ( false == quote.empty() && false == escaped )
 152.109 +		{
 152.110 +			// if quote chars are provided and the char isn't protected
 152.111 +			if ( string::npos != quote.find_first_of(ch) )
 152.112 +			{
 152.113 +				// if not quoted, set state to open quote and set
 152.114 +				// the quote character
 152.115 +				if ( false == quoted )
 152.116 +				{
 152.117 +					quoted = true;
 152.118 +					current_quote = ch;
 152.119 +
 152.120 +					// don't add the quote-char to the token
 152.121 +					add_char = false;
 152.122 +				}
 152.123 +				else // if quote is open already
 152.124 +				{
 152.125 +					// check if it is the matching character to close it
 152.126 +					if ( current_quote == ch )
 152.127 +					{
 152.128 +						// close quote and reset the quote character
 152.129 +						quoted = false;
 152.130 +						current_quote = 0;
 152.131 +
 152.132 +						// don't add the quote-char to the token
 152.133 +						add_char = false;
 152.134 +					}
 152.135 +				} // else
 152.136 +			}
 152.137 +		}
 152.138 +
 152.139 +		// ... if the delimiter isn't preserved
 152.140 +		if ( false == delimiters.empty() && false == escaped &&
 152.141 +			 false == quoted )
 152.142 +		{
 152.143 +			// if a delimiter is provided and the char isn't protected by
 152.144 +			// quote or escape char
 152.145 +			if ( string::npos != delimiters.find_first_of(ch) )
 152.146 +			{
 152.147 +				// if ch is a delimiter and the token string isn't empty
 152.148 +				// the token is complete
 152.149 +				if ( false == token.empty() ) // BUGFIX: 2006-03-04
 152.150 +				{
 152.151 +					token_complete = true;
 152.152 +				}
 152.153 +
 152.154 +				// don't add the delimiter to the token
 152.155 +				add_char = false;
 152.156 +			}
 152.157 +		}
 152.158 +
 152.159 +		// ... if the delimiter is preserved - add it as a token
 152.160 +		bool add_delimiter = false;
 152.161 +		if ( false == delimiters_preserve.empty() && false == escaped &&
 152.162 +			 false == quoted )
 152.163 +		{
 152.164 +			// if a delimiter which will be preserved is provided and the
 152.165 +			// char isn't protected by quote or escape char
 152.166 +			if ( string::npos != delimiters_preserve.find_first_of(ch) )
 152.167 +			{
 152.168 +				// if ch is a delimiter and the token string isn't empty
 152.169 +				// the token is complete
 152.170 +				if ( false == token.empty() ) // BUGFIX: 2006-03-04
 152.171 +				{
 152.172 +					token_complete = true;
 152.173 +				}
 152.174 +
 152.175 +				// don't add the delimiter to the token
 152.176 +				add_char = false;
 152.177 +
 152.178 +				// add the delimiter
 152.179 +				delimiter = ch;
 152.180 +				add_delimiter = true;
 152.181 +			}
 152.182 +		}
 152.183 +
 152.184 +
 152.185 +		// add the character to the token
 152.186 +		if ( true == add_char )
 152.187 +		{
 152.188 +			// add the current char
 152.189 +			token.push_back( ch );
 152.190 +		}
 152.191 +
 152.192 +		// add the token if it is complete
 152.193 +		if ( true == token_complete && false == token.empty() )
 152.194 +		{
 152.195 +			// add the token string
 152.196 +			result.push_back( token );
 152.197 +
 152.198 +			// clear the contents
 152.199 +			token.clear();
 152.200 +
 152.201 +			// build the next token
 152.202 +			token_complete = false;
 152.203 +		}
 152.204 +
 152.205 +		// add the delimiter
 152.206 +		if ( true == add_delimiter )
 152.207 +		{
 152.208 +			// the next token is the delimiter
 152.209 +			string delim_token;
 152.210 +			delim_token.push_back( delimiter );
 152.211 +			result.push_back( delim_token );
 152.212 +
 152.213 +			// REMOVED: 2006-03-04, Bugfix
 152.214 +		}
 152.215 +
 152.216 +		// repeat for the next character
 152.217 +		++pos;
 152.218 +	} // while
 152.219 +
 152.220 +	// add the final token
 152.221 +	if ( false == token.empty() )
 152.222 +	{
 152.223 +		result.push_back( token );
 152.224 +	}
 152.225 +}
   153.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   153.2 +++ b/Touchgui/plugins/org.apache.cordova.vibration/src/blackberry10/native/public/tokenizer.h	Thu Jun 04 14:50:33 2015 +0200
   153.3 @@ -0,0 +1,55 @@
   153.4 +/************************************************************************
   153.5 +The zlib/libpng License
   153.6 +
   153.7 +Copyright (c) 2006 Joerg Wiedenmann
   153.8 +
   153.9 +This software is provided 'as-is', without any express or implied warranty.
  153.10 +In no event will the authors be held liable for any damages arising from
  153.11 +the use of this software.
  153.12 +
  153.13 +Permission is granted to anyone to use this software for any purpose,
  153.14 +including commercial applications, and to alter it and redistribute it
  153.15 +freely, subject to the following restrictions:
  153.16 +
  153.17 +1. The origin of this software must not be misrepresented;
  153.18 +	you must not claim that you wrote the original software.
  153.19 +	If you use this software in a product, an acknowledgment
  153.20 +	in the product documentation would be appreciated but is
  153.21 +	not required.
  153.22 +
  153.23 +2. Altered source versions must be plainly marked as such,
  153.24 +	and must not be misrepresented as being the original software.
  153.25 +
  153.26 +3. This notice may not be removed or altered from any source distribution.
  153.27 +
  153.28 +***********************************************************************/
  153.29 +
  153.30 +/********************************************************************
  153.31 +	created:	2006-01-28
  153.32 +	filename: 	tokenizer.cpp
  153.33 +	author:		Jrg Wiedenmann
  153.34 +
  153.35 +	purpose:	A tokenizer function which provides a very
  153.36 +				customizable way of breaking up strings.
  153.37 +*********************************************************************/
  153.38 +
  153.39 +#include <vector>
  153.40 +#include <string>
  153.41 +using namespace std;
  153.42 +
  153.43 +// Function to break up a string into tokens
  153.44 +//
  153.45 +// Parameters:
  153.46 +//-----------
  153.47 +// str = the input string that will be tokenized
  153.48 +// result = the tokens for str
  153.49 +// delimiters = the delimiter characters
  153.50 +// delimiters preserve = same as above, but the delimiter characters
  153.51 +//		will be put into the result as a token
  153.52 +// quote = characters to protect the enclosed characters
  153.53 +// esc = characters to protect a single character
  153.54 +//
  153.55 +
  153.56 +void tokenize ( const string& str, vector<string>& result,
  153.57 +			const string& delimiters, const string& delimiters_preserve = "",
  153.58 +			const string& quote = "\"", const string& esc = "\\" );
   154.1 Binary file Touchgui/plugins/org.apache.cordova.vibration/src/blackberry10/native/simulator/libVibration.so has changed
   155.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   155.2 +++ b/Touchgui/plugins/org.apache.cordova.vibration/src/blackberry10/native/src/vibration_js.cpp	Thu Jun 04 14:50:33 2015 +0200
   155.3 @@ -0,0 +1,116 @@
   155.4 +/*
   155.5 + *
   155.6 + * Licensed to the Apache Software Foundation (ASF) under one
   155.7 + * or more contributor license agreements.  See the NOTICE file
   155.8 + * distributed with this work for additional information
   155.9 + * regarding copyright ownership.  The ASF licenses this file
  155.10 + * to you under the Apache License, Version 2.0 (the
  155.11 + * "License"); you may not use this file except in compliance
  155.12 + * with the License.  You may obtain a copy of the License at
  155.13 + *
  155.14 + *   http://www.apache.org/licenses/LICENSE-2.0
  155.15 + *
  155.16 + * Unless required by applicable law or agreed to in writing,
  155.17 + * software distributed under the License is distributed on an
  155.18 + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
  155.19 + * KIND, either express or implied.  See the License for the
  155.20 + * specific language governing permissions and limitations
  155.21 + * under the License.
  155.22 + *
  155.23 +*/
  155.24 +
  155.25 +#include <string>
  155.26 +#include <sstream>
  155.27 +#include <sys/stat.h>
  155.28 +#include <sys/types.h>
  155.29 +#include <stdio.h>
  155.30 +#include <stdlib.h>
  155.31 +#include "vibration_js.hpp"
  155.32 +#include <bps/vibration.h>
  155.33 +
  155.34 +using namespace std;
  155.35 +
  155.36 +/**
  155.37 + * Default constructor.
  155.38 + */
  155.39 +Vibration::Vibration(const std::string& id) : m_id(id){
  155.40 +	bps_initialize();
  155.41 +}
  155.42 +
  155.43 +/**
  155.44 + * Vibration destructor.
  155.45 + */
  155.46 +Vibration::~Vibration() {
  155.47 +	bps_shutdown();
  155.48 +}
  155.49 +
  155.50 +/**
  155.51 + * This method returns the list of objects implemented by this native extension.
  155.52 + */
  155.53 +char* onGetObjList() {
  155.54 +    static char name[] = "Vibration";
  155.55 +    return name;
  155.56 +}
  155.57 +
  155.58 +/**
  155.59 + * This method is used by JNext to instantiate the Vibration object when
  155.60 + * an object is created on the JavaScript server side.
  155.61 + */
  155.62 +JSExt* onCreateObject(const string& className, const string& id) {
  155.63 +    if (className == "Vibration") {
  155.64 +        return new Vibration(id);
  155.65 +    }
  155.66 +    return NULL;
  155.67 +}
  155.68 +
  155.69 +/**
  155.70 + * Method used by JNext to determine if the object can be deleted.
  155.71 + */
  155.72 +bool Vibration::CanDelete() {
  155.73 +    return true;
  155.74 +}
  155.75 +
  155.76 +/**
  155.77 + * It will be called from JNext JavaScript side with passed string.
  155.78 + * This method implements the interface for the JavaScript to native binding
  155.79 + * for invoking native code. This method is triggered when JNext.invoke is
  155.80 + * called on the JavaScript side with this native objects id.
  155.81 + */
  155.82 +string Vibration::InvokeMethod(const string& command) {
  155.83 +
  155.84 +    // parse command and args from string
  155.85 +    int indexOfFirstSpace = command.find_first_of(" ");
  155.86 +    string strCommand = command.substr(0, indexOfFirstSpace);
  155.87 +    string strValue = command.substr(indexOfFirstSpace + 1, command.length());
  155.88 +    char info[1024];
  155.89 +
  155.90 +    //Process the vibrate command
  155.91 +    if (strCommand == "vibrate") {
  155.92 +    	//Get the duration
  155.93 +    	int duration = atoi(strValue.substr(0, strValue.length()).c_str());
  155.94 +
  155.95 +    	if (duration <= 0) {
  155.96 +    		//Default to 1 second
  155.97 +    		duration = 1000;
  155.98 +    	} else if (duration > 5000) {
  155.99 +    		//Max 5 seconds
 155.100 +    		duration = 5000;
 155.101 +    	}
 155.102 +
 155.103 +    	//Vibrate
 155.104 +		int value = vibration_request(VIBRATION_INTENSITY_HIGH , duration);
 155.105 +
 155.106 +		//Check return
 155.107 +		if (value == BPS_SUCCESS) {
 155.108 +			sprintf(info, "Vibration successful.");
 155.109 +		} else if(value == BPS_FAILURE) {
 155.110 +			sprintf(info, "Vibration failed.");
 155.111 +		} else {
 155.112 +			sprintf(info, "Vibration unknown error: %d", value);
 155.113 +		}
 155.114 +		return info;
 155.115 +    } else {
 155.116 +    	sprintf(info, "Unsupported method: %s", strCommand.c_str());
 155.117 +    }
 155.118 +    return info;
 155.119 +}
   156.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   156.2 +++ b/Touchgui/plugins/org.apache.cordova.vibration/src/blackberry10/native/src/vibration_js.hpp	Thu Jun 04 14:50:33 2015 +0200
   156.3 @@ -0,0 +1,42 @@
   156.4 +/*
   156.5 + *
   156.6 + * Licensed to the Apache Software Foundation (ASF) under one
   156.7 + * or more contributor license agreements.  See the NOTICE file
   156.8 + * distributed with this work for additional information
   156.9 + * regarding copyright ownership.  The ASF licenses this file
  156.10 + * to you under the Apache License, Version 2.0 (the
  156.11 + * "License"); you may not use this file except in compliance
  156.12 + * with the License.  You may obtain a copy of the License at
  156.13 + *
  156.14 + *   http://www.apache.org/licenses/LICENSE-2.0
  156.15 + *
  156.16 + * Unless required by applicable law or agreed to in writing,
  156.17 + * software distributed under the License is distributed on an
  156.18 + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
  156.19 + * KIND, either express or implied.  See the License for the
  156.20 + * specific language governing permissions and limitations
  156.21 + * under the License.
  156.22 + *
  156.23 +*/
  156.24 +
  156.25 +#ifndef VIBRATION_JS_HPP_
  156.26 +#define VIBRATION_JS_HPP_
  156.27 +
  156.28 +#include <string>
  156.29 +#include "../public/plugin.h"
  156.30 +
  156.31 +class Vibration: public JSExt {
  156.32 +
  156.33 +public:
  156.34 +    explicit Vibration(const std::string& id);
  156.35 +    virtual ~Vibration();
  156.36 +
  156.37 +    // Interfaces of JSExt
  156.38 +    virtual bool CanDelete();
  156.39 +    virtual std::string InvokeMethod(const std::string& command);
  156.40 +
  156.41 +private:
  156.42 +    std::string m_id;
  156.43 +};
  156.44 +
  156.45 +#endif /* VIBRATION_JS_HPP_ */
   157.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   157.2 +++ b/Touchgui/plugins/org.apache.cordova.vibration/src/firefoxos/VibrationProxy.js	Thu Jun 04 14:50:33 2015 +0200
   157.3 @@ -0,0 +1,35 @@
   157.4 +/*
   157.5 + *
   157.6 + * Licensed to the Apache Software Foundation (ASF) under one
   157.7 + * or more contributor license agreements.  See the NOTICE file
   157.8 + * distributed with this work for additional information
   157.9 + * regarding copyright ownership.  The ASF licenses this file
  157.10 + * to you under the Apache License, Version 2.0 (the
  157.11 + * "License"); you may not use this file except in compliance
  157.12 + * with the License.  You may obtain a copy of the License at
  157.13 + *
  157.14 + *   http://www.apache.org/licenses/LICENSE-2.0
  157.15 + *
  157.16 + * Unless required by applicable law or agreed to in writing,
  157.17 + * software distributed under the License is distributed on an
  157.18 + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
  157.19 + * KIND, either express or implied.  See the License for the
  157.20 + * specific language governing permissions and limitations
  157.21 + * under the License.
  157.22 + *
  157.23 +*/
  157.24 +
  157.25 +var cordova = require('cordova');
  157.26 +
  157.27 +module.exports = {
  157.28 +
  157.29 +    vibrate: function(success, fail, milliseconds) {
  157.30 +        if (navigator.notification.vibrate) {
  157.31 +            navigator.vibrate(milliseconds);
  157.32 +        } else {
  157.33 +            console.log ("cordova/plugin/firefoxos/vibration, vibrate API does not exist");
  157.34 +        }
  157.35 +    }
  157.36 +};
  157.37 +
  157.38 +require("cordova/exec/proxy").add("Vibration", module.exports);
  157.39 \ No newline at end of file
   158.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   158.2 +++ b/Touchgui/plugins/org.apache.cordova.vibration/src/ios/CDVVibration.h	Thu Jun 04 14:50:33 2015 +0200
   158.3 @@ -0,0 +1,29 @@
   158.4 +/*
   158.5 + Licensed to the Apache Software Foundation (ASF) under one
   158.6 + or more contributor license agreements.  See the NOTICE file
   158.7 + distributed with this work for additional information
   158.8 + regarding copyright ownership.  The ASF licenses this file
   158.9 + to you under the Apache License, Version 2.0 (the
  158.10 + "License"); you may not use this file except in compliance
  158.11 + with the License.  You may obtain a copy of the License at
  158.12 +
  158.13 + http://www.apache.org/licenses/LICENSE-2.0
  158.14 +
  158.15 + Unless required by applicable law or agreed to in writing,
  158.16 + software distributed under the License is distributed on an
  158.17 + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
  158.18 + KIND, either express or implied.  See the License for the
  158.19 + specific language governing permissions and limitations
  158.20 + under the License.
  158.21 + */
  158.22 +
  158.23 +#import <Foundation/Foundation.h>
  158.24 +#import <UIKit/UIKit.h>
  158.25 +#import <AudioToolbox/AudioServices.h>
  158.26 +#import <Cordova/CDVPlugin.h>
  158.27 +
  158.28 +@interface CDVVibration : CDVPlugin {}
  158.29 +
  158.30 +- (void)vibrate:(CDVInvokedUrlCommand*)command;
  158.31 +
  158.32 +@end
   159.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   159.2 +++ b/Touchgui/plugins/org.apache.cordova.vibration/src/ios/CDVVibration.m	Thu Jun 04 14:50:33 2015 +0200
   159.3 @@ -0,0 +1,29 @@
   159.4 +/*
   159.5 + Licensed to the Apache Software Foundation (ASF) under one
   159.6 + or more contributor license agreements.  See the NOTICE file
   159.7 + distributed with this work for additional information
   159.8 + regarding copyright ownership.  The ASF licenses this file
   159.9 + to you under the Apache License, Version 2.0 (the
  159.10 + "License"); you may not use this file except in compliance
  159.11 + with the License.  You may obtain a copy of the License at
  159.12 +
  159.13 + http://www.apache.org/licenses/LICENSE-2.0
  159.14 +
  159.15 + Unless required by applicable law or agreed to in writing,
  159.16 + software distributed under the License is distributed on an
  159.17 + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
  159.18 + KIND, either express or implied.  See the License for the
  159.19 + specific language governing permissions and limitations
  159.20 + under the License.
  159.21 + */
  159.22 +
  159.23 +#import "CDVVibration.h"
  159.24 +
  159.25 +@implementation CDVVibration
  159.26 +
  159.27 +- (void)vibrate:(CDVInvokedUrlCommand*)command
  159.28 +{
  159.29 +    AudioServicesPlaySystemSound(kSystemSoundID_Vibrate);
  159.30 +}
  159.31 +
  159.32 +@end
   160.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   160.2 +++ b/Touchgui/plugins/org.apache.cordova.vibration/src/tizen/VibrationProxy.js	Thu Jun 04 14:50:33 2015 +0200
   160.3 @@ -0,0 +1,30 @@
   160.4 +/*
   160.5 + *
   160.6 + * Licensed to the Apache Software Foundation (ASF) under one
   160.7 + * or more contributor license agreements.  See the NOTICE file
   160.8 + * distributed with this work for additional information
   160.9 + * regarding copyright ownership.  The ASF licenses this file
  160.10 + * to you under the Apache License, Version 2.0 (the
  160.11 + * "License"); you may not use this file except in compliance
  160.12 + * with the License.  You may obtain a copy of the License at
  160.13 + *
  160.14 + *   http://www.apache.org/licenses/LICENSE-2.0
  160.15 + *
  160.16 + * Unless required by applicable law or agreed to in writing,
  160.17 + * software distributed under the License is distributed on an
  160.18 + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
  160.19 + * KIND, either express or implied.  See the License for the
  160.20 + * specific language governing permissions and limitations
  160.21 + * under the License.
  160.22 + *
  160.23 +*/
  160.24 +
  160.25 +module.exports = {
  160.26 +    vibrate: function(milliseconds) {
  160.27 +        if (navigator.vibrate) {
  160.28 +            navigator.vibrate(milliseconds);
  160.29 +        }
  160.30 +    }
  160.31 +};
  160.32 +
  160.33 +require("cordova/tizen/commandProxy").add("Vibration", module.exports);
   161.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   161.2 +++ b/Touchgui/plugins/org.apache.cordova.vibration/src/ubuntu/vibration.cpp	Thu Jun 04 14:50:33 2015 +0200
   161.3 @@ -0,0 +1,64 @@
   161.4 +/*
   161.5 + *
   161.6 + * Copyright 2013 Canonical Ltd.
   161.7 + *
   161.8 + * Licensed under the Apache License, Version 2.0 (the "License");
   161.9 + * you may not use this file except in compliance with the License.
  161.10 + * You may obtain a copy of the License at
  161.11 + *
  161.12 + *   http://www.apache.org/licenses/LICENSE-2.0
  161.13 + *
  161.14 + * Unless required by applicable law or agreed to in writing,
  161.15 + * software distributed under the License is distributed on an
  161.16 + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
  161.17 + * KIND, either express or implied.  See the License for the
  161.18 + * specific language governing permissions and limitations
  161.19 + * under the License.
  161.20 + *
  161.21 +*/
  161.22 +
  161.23 +#include "vibration.h"
  161.24 +
  161.25 +void Vibration::vibrate(int, int, int mills) {
  161.26 +    QSharedPointer<QFeedbackHapticsEffect> vibrate = QSharedPointer<QFeedbackHapticsEffect>::create();
  161.27 +    vibrate->setIntensity(1.0);
  161.28 +    vibrate->setDuration(mills);
  161.29 +
  161.30 +    vibrate->start();
  161.31 +
  161.32 +    _effects.append(vibrate);
  161.33 +}
  161.34 +
  161.35 +void Vibration::cancelVibration(int, int) {
  161.36 +    _timers.clear();
  161.37 +    _effects.clear();
  161.38 +}
  161.39 +
  161.40 +void Vibration::vibrateWithPattern(int, int, const QList<int> &pattern, int repeat) {
  161.41 +    QSharedPointer<QTimer> timer = QSharedPointer<QTimer>::create();
  161.42 +    QSharedPointer<int> k = QSharedPointer<int>::create();
  161.43 +
  161.44 +    QSharedPointer<QFeedbackHapticsEffect> vibrate = QSharedPointer<QFeedbackHapticsEffect>::create();
  161.45 +    vibrate->setIntensity(1.0);
  161.46 +
  161.47 +    _effects.append(vibrate);
  161.48 +    _timers.append(timer);
  161.49 +
  161.50 +    timer->connect(timer.data(), &QTimer::timeout, [=, timer = timer.data()] () {
  161.51 +        if (*k >= pattern.size()) {
  161.52 +            if (repeat < 0 || repeat >= pattern.size()) {
  161.53 +                timer->stop();
  161.54 +                return;
  161.55 +            }
  161.56 +            *k = repeat;
  161.57 +        }
  161.58 +        bool idle = (*k % 2 == 0);
  161.59 +        if (!idle) {
  161.60 +            vibrate->setDuration(pattern[*k]);
  161.61 +            vibrate->start();
  161.62 +        }
  161.63 +        timer->start(pattern[*k]);
  161.64 +        (*k)++;
  161.65 +    });
  161.66 +    timer->start(1);
  161.67 +}
   162.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   162.2 +++ b/Touchgui/plugins/org.apache.cordova.vibration/src/ubuntu/vibration.h	Thu Jun 04 14:50:33 2015 +0200
   162.3 @@ -0,0 +1,54 @@
   162.4 +/*
   162.5 + *
   162.6 + * Copyright 2013 Canonical Ltd.
   162.7 + *
   162.8 + * Licensed under the Apache License, Version 2.0 (the "License");
   162.9 + * you may not use this file except in compliance with the License.
  162.10 + * You may obtain a copy of the License at
  162.11 + *
  162.12 + *   http://www.apache.org/licenses/LICENSE-2.0
  162.13 + *
  162.14 + * Unless required by applicable law or agreed to in writing,
  162.15 + * software distributed under the License is distributed on an
  162.16 + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
  162.17 + * KIND, either express or implied.  See the License for the
  162.18 + * specific language governing permissions and limitations
  162.19 + * under the License.
  162.20 + *
  162.21 +*/
  162.22 +
  162.23 +#ifndef _VIBRATION_H_SFAFKNVX3456
  162.24 +#define _VIBRATION_H_SFAFKNVX3456
  162.25 +
  162.26 +#include <QtCore>
  162.27 +#include <QFeedbackHapticsEffect>
  162.28 +#include <cplugin.h>
  162.29 +
  162.30 +class Vibration: public CPlugin {
  162.31 +    Q_OBJECT
  162.32 +public:
  162.33 +    explicit Vibration(Cordova *cordova): CPlugin(cordova) {
  162.34 +    }
  162.35 +
  162.36 +    virtual const QString fullName() override {
  162.37 +        return Vibration::fullID();
  162.38 +    }
  162.39 +
  162.40 +    virtual const QString shortName() override {
  162.41 +        return "Vibration";
  162.42 +    }
  162.43 +
  162.44 +    static const QString fullID() {
  162.45 +        return "Vibration";
  162.46 +    }
  162.47 +public slots:
  162.48 +    void vibrate(int, int, int mills);
  162.49 +    void cancelVibration(int, int);
  162.50 +    void vibrateWithPattern(int, int, const QList<int> &pattern, int);
  162.51 +
  162.52 +private:
  162.53 +    QList<QSharedPointer<QFeedbackEffect>> _effects;
  162.54 +    QList<QSharedPointer<QTimer>> _timers;
  162.55 +};
  162.56 +
  162.57 +#endif
   163.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   163.2 +++ b/Touchgui/plugins/org.apache.cordova.vibration/src/wp/Vibration.cs	Thu Jun 04 14:50:33 2015 +0200
   163.3 @@ -0,0 +1,77 @@
   163.4 +/*  
   163.5 +	Licensed under the Apache License, Version 2.0 (the "License");
   163.6 +	you may not use this file except in compliance with the License.
   163.7 +	You may obtain a copy of the License at
   163.8 +	
   163.9 +	http://www.apache.org/licenses/LICENSE-2.0
  163.10 +	
  163.11 +	Unless required by applicable law or agreed to in writing, software
  163.12 +	distributed under the License is distributed on an "AS IS" BASIS,
  163.13 +	WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  163.14 +	See the License for the specific language governing permissions and
  163.15 +	limitations under the License.
  163.16 +*/
  163.17 +
  163.18 +using System;
  163.19 +using System.Windows;
  163.20 +using System.Windows.Controls;
  163.21 +using Microsoft.Devices;
  163.22 +using System.Runtime.Serialization;
  163.23 +using System.Threading;
  163.24 +using System.Windows.Resources;
  163.25 +using Microsoft.Phone.Controls;
  163.26 +using System.Diagnostics;
  163.27 +
  163.28 +
  163.29 +namespace WPCordovaClassLib.Cordova.Commands
  163.30 +{
  163.31 +    public class Vibration : BaseCommand
  163.32 +    {
  163.33 +        private static readonly int DEFAULT_DURATION = 200;
  163.34 +
  163.35 +        public void vibrate(string vibrateDuration)
  163.36 +        {
  163.37 +            int msecs = DEFAULT_DURATION; // set default
  163.38 +
  163.39 +            try
  163.40 +            {
  163.41 +                string[] args = JSON.JsonHelper.Deserialize<string[]>(vibrateDuration);
  163.42 +
  163.43 +                msecs = int.Parse(args[0]);
  163.44 +                if (msecs < 1)
  163.45 +                {
  163.46 +                    msecs = 1;
  163.47 +                }
  163.48 +            }
  163.49 +            catch (FormatException)
  163.50 +            {
  163.51 +
  163.52 +            }
  163.53 +
  163.54 +            vibrateMs(msecs);
  163.55 +
  163.56 +            // TODO: may need to add listener to trigger DispatchCommandResult when the vibration ends...
  163.57 +            DispatchCommandResult();
  163.58 +        }
  163.59 +
  163.60 +        private static void vibrateMs(int msecs)
  163.61 +        {
  163.62 +            VibrateController.Default.Start(TimeSpan.FromMilliseconds(msecs));
  163.63 +        }
  163.64 +
  163.65 +        public void vibrateWithPattern(string options)
  163.66 +        {
  163.67 +            // falling back to vibrate
  163.68 +            vibrateMs(DEFAULT_DURATION);
  163.69 +
  163.70 +            // TODO: may need to add listener to trigger DispatchCommandResult when the vibration ends...
  163.71 +            DispatchCommandResult();
  163.72 +        }
  163.73 +
  163.74 +        public void cancelVibration(string options)
  163.75 +        {
  163.76 +            VibrateController.Default.Stop();
  163.77 +            DispatchCommandResult();
  163.78 +        }
  163.79 +    }
  163.80 +}
   164.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   164.2 +++ b/Touchgui/plugins/org.apache.cordova.vibration/tests/plugin.xml	Thu Jun 04 14:50:33 2015 +0200
   164.3 @@ -0,0 +1,31 @@
   164.4 +<?xml version="1.0" encoding="UTF-8"?>
   164.5 +<!--
   164.6 +  Licensed to the Apache Software Foundation (ASF) under one
   164.7 +  or more contributor license agreements.  See the NOTICE file
   164.8 +  distributed with this work for additional information
   164.9 +  regarding copyright ownership.  The ASF licenses this file
  164.10 +  to you under the Apache License, Version 2.0 (the
  164.11 +  "License"); you may not use this file except in compliance
  164.12 +  with the License.  You may obtain a copy of the License at
  164.13 +
  164.14 +    http://www.apache.org/licenses/LICENSE-2.0
  164.15 +
  164.16 +  Unless required by applicable law or agreed to in writing,
  164.17 +  software distributed under the License is distributed on an
  164.18 +  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
  164.19 +  KIND, either express or implied.  See the License for the
  164.20 +  specific language governing permissions and limitations
  164.21 +  under the License.
  164.22 +-->
  164.23 +
  164.24 +<plugin xmlns="http://apache.org/cordova/ns/plugins/1.0"
  164.25 +    xmlns:rim="http://www.blackberry.com/ns/widgets"
  164.26 +    xmlns:android="http://schemas.android.com/apk/res/android"
  164.27 +    id="org.apache.cordova.vibration.tests"
  164.28 +    version="0.3.12">
  164.29 +    <name>Cordova Vibration Plugin Tests</name>
  164.30 +    <license>Apache 2.0</license>
  164.31 +
  164.32 +    <js-module src="tests.js" name="tests">
  164.33 +    </js-module>
  164.34 +</plugin>
   165.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   165.2 +++ b/Touchgui/plugins/org.apache.cordova.vibration/tests/tests.js	Thu Jun 04 14:50:33 2015 +0200
   165.3 @@ -0,0 +1,313 @@
   165.4 +/*
   165.5 + *
   165.6 + * Licensed to the Apache Software Foundation (ASF) under one
   165.7 + * or more contributor license agreements.  See the NOTICE file
   165.8 + * distributed with this work for additional information
   165.9 + * regarding copyright ownership.  The ASF licenses this file
  165.10 + * to you under the Apache License, Version 2.0 (the
  165.11 + * "License"); you may not use this file except in compliance
  165.12 + * with the License.  You may obtain a copy of the License at
  165.13 + *
  165.14 + *   http://www.apache.org/licenses/LICENSE-2.0
  165.15 + *
  165.16 + * Unless required by applicable law or agreed to in writing,
  165.17 + * software distributed under the License is distributed on an
  165.18 + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
  165.19 + * KIND, either express or implied.  See the License for the
  165.20 + * specific language governing permissions and limitations
  165.21 + * under the License.
  165.22 + *
  165.23 + */
  165.24 +
  165.25 +exports.defineAutoTests = function () {
  165.26 +
  165.27 +    describe('Vibration (navigator.notification.vibrate)', function () {
  165.28 +        it("navigator.notification should exist", function () {
  165.29 +            expect(navigator.notification).toBeDefined();
  165.30 +        });
  165.31 +
  165.32 +        it("should contain a vibrate function", function () {
  165.33 +            expect(typeof navigator.notification.vibrate).toBeDefined();
  165.34 +            expect(typeof navigator.notification.vibrate).toBe("function");
  165.35 +        });
  165.36 +    });
  165.37 +};
  165.38 +
  165.39 +exports.defineManualTests = function (contentEl, createActionButton) {
  165.40 +    var logMessage = function (message, color) {
  165.41 +        var log = document.getElementById('info');
  165.42 +        var logLine = document.createElement('div');
  165.43 +        if (color) {
  165.44 +            logLine.style.color = color;
  165.45 +        }
  165.46 +        logLine.innerHTML = message;
  165.47 +        log.appendChild(logLine);
  165.48 +    }
  165.49 +
  165.50 +    var clearLog = function () {
  165.51 +        var log = document.getElementById('info');
  165.52 +        log.innerHTML = '';
  165.53 +    }
  165.54 +
  165.55 +    //-------------------------------------------------------------------------
  165.56 +    // Vibrations
  165.57 +    //-------------------------------------------------------------------------
  165.58 +
  165.59 +    //old vibrate call
  165.60 +    var vibrateOld = function(){
  165.61 +        clearLog();
  165.62 +        navigator.notification.vibrate(2500);
  165.63 +        logMessage("navigator.notification.vibrate(2500)", "green");
  165.64 +    };
  165.65 +
  165.66 +    //old vibrate with pattern call
  165.67 +    var vibrateWithPatternOld = function(){
  165.68 +        clearLog();
  165.69 +        navigator.notification.vibrateWithPattern([1000, 3000, 2000, 5000]);
  165.70 +        logMessage("navigator.notification.vibrateWithPattern([1000, 3000, 2000, 5000])", "green");
  165.71 +    };
  165.72 +
  165.73 +    //old cancel vibrate call
  165.74 +    var cancelOld = function(){
  165.75 +        clearLog();
  165.76 +        navigator.notification.cancelVibration();
  165.77 +        logMessage("navigator.notification.cancelVibration()", "green");
  165.78 +    };
  165.79 +
  165.80 +    //new standard vibrate call that aligns to w3c spec with param long
  165.81 +    var vibrateWithInt = function() {
  165.82 +        clearLog();
  165.83 +        navigator.vibrate(3000);
  165.84 +        logMessage("navigator.vibrate(3000)", "green");
  165.85 +    };
  165.86 +
  165.87 +    //new standard vibrate call that aligns to w3c spec with param array
  165.88 +    var vibrateWithArray = function() {
  165.89 +        clearLog();
  165.90 +        navigator.vibrate([3000]);
  165.91 +        logMessage("navigator.vibrate([3000])", "green");
  165.92 +    };
  165.93 +
  165.94 +    //vibrate with a pattern using w3c spec
  165.95 +    var vibrateWithPattern = function() {
  165.96 +        clearLog();
  165.97 +        navigator.vibrate([1000, 2000, 3000, 2000, 5000]);
  165.98 +        logMessage("navigator.vibrate([1000, 2000, 3000, 2000, 5000])", "green");
  165.99 +    };
 165.100 +
 165.101 +    //cancel existing vibration using w3c spec navigator.vibrate(0)
 165.102 +    var cancelWithZero = function() {
 165.103 +        clearLog();
 165.104 +        navigator.vibrate(0);
 165.105 +        logMessage("navigator.vibrate(0)", "green");
 165.106 +    };
 165.107 +
 165.108 +    //cancel existing vibration using w3c spec navigator.vibrate([])
 165.109 +    var cancelWithEmpty = function() {
 165.110 +        clearLog();
 165.111 +        navigator.vibrate([]);
 165.112 +        logMessage("navigator.vibrate([])", "green");
 165.113 +    };
 165.114 +
 165.115 +    //reference to the timeout variable
 165.116 +    var timeout;
 165.117 +
 165.118 +    //special long vibrate used to test cancel
 165.119 +    var longVibrate = function() {
 165.120 +        clearLog();
 165.121 +        navigator.vibrate(60000);
 165.122 +        vibrateOn = true;
 165.123 +        logMessage("navigator.vibrate(60000)", "green");
 165.124 +        timeout = setTimeout(resetVibrateOn, 60000); //if user doesn't cancel vibrate, reset vibrateOn var after 60 seconds
 165.125 +    };
 165.126 +
 165.127 +    //special long vibrate with pattern used to test cancel
 165.128 +    var longVibrateWithPattern = function() {
 165.129 +        clearLog();
 165.130 +        navigator.vibrate([1000, 2000, 3000, 2000, 5000, 2000, 30000]);
 165.131 +        vibrateOn = true;
 165.132 +        logMessage("navigator.vibrate([1000, 2000, 3000, 2000, 5000, 2000, 30000])", "green");
 165.133 +        timeout = setTimeout(resetVibrateOn, 45000); //if user doesn't cancel vibrate, reset vibrateOn var after 45 seconds
 165.134 +    };
 165.135 +
 165.136 +    //initiate two vibrations to test cancel
 165.137 +    var multipleVibrations = function() {
 165.138 +        clearLog();
 165.139 +        navigator.vibrate(20000);
 165.140 +        navigator.vibrate(45000);
 165.141 +        vibrateOn = true;
 165.142 +        logMessage("navigator.vibrate(15000)\nnavigator.vibrate(45000)", "green");
 165.143 +        timeout = setTimeout(resetVibrateOn, 45000); //if user doesn't cancel vibrate, reset vibrateOn var after 45 seconds
 165.144 +    }
 165.145 +
 165.146 +    function resetVibrateOn() {
 165.147 +        vibrateOn = false;
 165.148 +    }
 165.149 +
 165.150 +    //check whether there is an ongoing vibration
 165.151 +    var vibrateOn = false;
 165.152 +
 165.153 +
 165.154 +
 165.155 +
 165.156 +    var vibrate_tests = '<h1>Vibrate Tests</h1>' +
 165.157 +        '<h3>Starred tests only work for Android and Windows. </h3>' +
 165.158 +        '<h3>iOS ignores the time given for a vibrate </h3>' +
 165.159 +        '<div id="vibrate_old"></div>' +
 165.160 +        'Expected result: Vibrate once for 2.5 seconds.' +
 165.161 +        '<p/> <div id="vibrateWithPattern_old"></div>' +
 165.162 +        'Expected result: Pause for 1s, vibrate for 3s, pause for 2s, vibrate for 5s.' +
 165.163 +        '<p/> <div id="cancelVibrate_old"></div>' +
 165.164 +        'Expected result: Press once to initiate vibrate for 60 seconds. Press again to cancel vibrate immediately.' +
 165.165 +        '<p/> <div id="cancelVibrateWithPattern_old"></div>' +
 165.166 +        'Expected result: Press once to initiate vibrate with pattern for 45s. Press again to cancel vibrate immediately.' +
 165.167 +        '<p/> <div id="vibrate_int"></div>' +
 165.168 +        'Expected result: Vibrate once for 3 seconds.' +
 165.169 +        '<p/> <div id="vibrate_array"></div>' +
 165.170 +        'Expected result: Vibrate once for 3 seconds.' +
 165.171 +        '<p/> <div id="vibrate_with_pattern"></div>' +
 165.172 +        'Expected result: Vibrate for 1s, pause for 2s, vibrate for 3s, pause for 2s, vibrate for 5s.' +
 165.173 +        '<p/> <div id="cancel_zero"></div>' +
 165.174 +        'Expected result: Press once to initiate vibrate for 60 seconds. Press again to cancel vibrate immediately.' +
 165.175 +        '<p/><div id="cancel_array"></div>' +
 165.176 +        'Expected result: Press once to initiate vibrate for 60 seconds. Press again to cancel vibrate immediately.' +
 165.177 +        '<p/> <div id="cancelWithPattern_zero"></div>' +
 165.178 +        'Expected result: Press once to initiate vibrate with pattern for 45s. Press again to cancel vibrate immediately.' +
 165.179 +        '<p/> <div id="cancelWithPattern_array"></div>' +
 165.180 +        'Expected result: Press once to initiate vibrate with pattern for 45s. Press again to cancel vibrate immediately.' +
 165.181 +        '<p/> <div id="cancelMultipleVibrations"></div>' +
 165.182 +        'Expected result: Press once to initiate two vibrations simultaneously (one for 20s the other for 45s so total of 45s). Press again to cancel both vibrations immediately.';
 165.183 +
 165.184 +
 165.185 +    contentEl.innerHTML = '<div id="info"></div>' + vibrate_tests;
 165.186 +
 165.187 +    //standard vibrate with old call
 165.188 +    createActionButton('Vibrate (Old)', function () {
 165.189 +        vibrateOld();
 165.190 +    }, 'vibrate_old');
 165.191 +
 165.192 +    //vibrate with pattern with old call
 165.193 +    createActionButton('* Vibrate with a pattern (Old)', function () {
 165.194 +        vibrateWithPatternOld();
 165.195 +    }, 'vibrateWithPattern_old');
 165.196 +
 165.197 +    //cancel vibrate with old call
 165.198 +    createActionButton('* Cancel vibration (Old)', function() {
 165.199 +
 165.200 +        if (!vibrateOn)
 165.201 +        {
 165.202 +            longVibrate();
 165.203 +        }
 165.204 +        else
 165.205 +        {
 165.206 +            cancelOld();
 165.207 +            resetVibrateOn();
 165.208 +            clearTimeout(timeout); //clear the timeout since user has canceled the vibrate
 165.209 +        }
 165.210 +    }, 'cancelVibrate_old');
 165.211 +
 165.212 +    //cancel vibrate with pattern with old call
 165.213 +    createActionButton('* Cancel vibration with pattern (Old)', function() {
 165.214 +
 165.215 +        if (!vibrateOn)
 165.216 +        {
 165.217 +            longVibrateWithPattern();
 165.218 +        }
 165.219 +        else
 165.220 +        {
 165.221 +            cancelOld();
 165.222 +            resetVibrateOn();
 165.223 +            clearTimeout(timeout); //clear the timeout since user has canceled the vibrate
 165.224 +        }
 165.225 +    }, 'cancelVibrateWithPattern_old');
 165.226 +
 165.227 +    //standard vibrate with new call param int
 165.228 +    createActionButton('Vibrate with int', function() {
 165.229 +        vibrateWithInt();
 165.230 +    }, 'vibrate_int');
 165.231 +
 165.232 +    //standard vibrate with new call param array
 165.233 +    createActionButton('Vibrate with array', function() {
 165.234 +        vibrateWithArray();
 165.235 +    }, 'vibrate_array');
 165.236 +
 165.237 +    //vibrate with a pattern
 165.238 +    createActionButton('* Vibrate with a pattern', function() {
 165.239 +        vibrateWithPattern();
 165.240 +    }, 'vibrate_with_pattern');
 165.241 +
 165.242 +    //cancel any existing vibrations with param 0
 165.243 +    createActionButton('* Cancel vibration with 0', function() {
 165.244 +
 165.245 +        if (!vibrateOn)
 165.246 +        {
 165.247 +            longVibrate();
 165.248 +        }
 165.249 +        else
 165.250 +        {
 165.251 +            cancelWithZero();
 165.252 +            resetVibrateOn();
 165.253 +            clearTimeout(timeout); //clear the timeout since user has canceled the vibrate
 165.254 +        }
 165.255 +    }, 'cancel_zero');
 165.256 +
 165.257 +    //cancel any existing vibrations with param []
 165.258 +    createActionButton('* Cancel vibration with []', function() {
 165.259 +
 165.260 +        if (!vibrateOn)
 165.261 +        {
 165.262 +            longVibrate();
 165.263 +        }
 165.264 +        else
 165.265 +        {
 165.266 +            cancelWithEmpty();
 165.267 +            resetVibrateOn();
 165.268 +            clearTimeout(timeout); //clear the timeout since user has canceled the vibrate
 165.269 +        }
 165.270 +    }, 'cancel_array');
 165.271 +
 165.272 +    //cancel vibration with pattern with param 0
 165.273 +    createActionButton('* Cancel vibration with pattern with 0', function() {
 165.274 +
 165.275 +        if (!vibrateOn)
 165.276 +        {
 165.277 +            longVibrateWithPattern();
 165.278 +        }
 165.279 +        else
 165.280 +        {
 165.281 +            cancelWithZero();
 165.282 +            resetVibrateOn();
 165.283 +            clearTimeout(timeout); //clear the timeout since user has canceled the vibrate
 165.284 +        }
 165.285 +    }, 'cancelWithPattern_zero');
 165.286 +
 165.287 +    //cancel vibration with pattern with param []
 165.288 +    createActionButton('* Cancel vibration with pattern with []', function() {
 165.289 +
 165.290 +        if (!vibrateOn)
 165.291 +        {
 165.292 +            longVibrateWithPattern();
 165.293 +        }
 165.294 +        else
 165.295 +        {
 165.296 +            cancelWithEmpty();
 165.297 +            resetVibrateOn();
 165.298 +            clearTimeout(timeout); //clear the timeout since user has canceled the vibrate
 165.299 +        }
 165.300 +    }, 'cancelWithPattern_array');
 165.301 +
 165.302 +    //cancel multiple vibrations
 165.303 +    createActionButton('* Cancel multiple vibrations', function() {
 165.304 +
 165.305 +        if (!vibrateOn)
 165.306 +        {
 165.307 +            multipleVibrations();
 165.308 +        }
 165.309 +        else
 165.310 +        {
 165.311 +            cancelWithZero();
 165.312 +            resetVibrateOn();
 165.313 +            clearTimeout(timeout); //clear the timeout since user has canceled the vibrate
 165.314 +        }
 165.315 +    }, 'cancelMultipleVibrations');
 165.316 +};
   166.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   166.2 +++ b/Touchgui/plugins/org.apache.cordova.vibration/www/blackberry10/vibrate.js	Thu Jun 04 14:50:33 2015 +0200
   166.3 @@ -0,0 +1,26 @@
   166.4 +/*
   166.5 + *
   166.6 + * Licensed to the Apache Software Foundation (ASF) under one
   166.7 + * or more contributor license agreements.  See the NOTICE file
   166.8 + * distributed with this work for additional information
   166.9 + * regarding copyright ownership.  The ASF licenses this file
  166.10 + * to you under the Apache License, Version 2.0 (the
  166.11 + * "License"); you may not use this file except in compliance
  166.12 + * with the License.  You may obtain a copy of the License at
  166.13 + *
  166.14 + *   http://www.apache.org/licenses/LICENSE-2.0
  166.15 + *
  166.16 + * Unless required by applicable law or agreed to in writing,
  166.17 + * software distributed under the License is distributed on an
  166.18 + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
  166.19 + * KIND, either express or implied.  See the License for the
  166.20 + * specific language governing permissions and limitations
  166.21 + * under the License.
  166.22 + *
  166.23 +*/
  166.24 +
  166.25 +var vibrate = function(duration) {
  166.26 +    navigator.vibrate(duration);
  166.27 +};
  166.28 +
  166.29 +module.exports = vibrate;
   167.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   167.2 +++ b/Touchgui/plugins/org.apache.cordova.vibration/www/vibration.js	Thu Jun 04 14:50:33 2015 +0200
   167.3 @@ -0,0 +1,119 @@
   167.4 +/*
   167.5 + *
   167.6 + * Licensed to the Apache Software Foundation (ASF) under one
   167.7 + * or more contributor license agreements.  See the NOTICE file
   167.8 + * distributed with this work for additional information
   167.9 + * regarding copyright ownership.  The ASF licenses this file
  167.10 + * to you under the Apache License, Version 2.0 (the
  167.11 + * "License"); you may not use this file except in compliance
  167.12 + * with the License.  You may obtain a copy of the License at
  167.13 + *
  167.14 + *   http://www.apache.org/licenses/LICENSE-2.0
  167.15 + *
  167.16 + * Unless required by applicable law or agreed to in writing,
  167.17 + * software distributed under the License is distributed on an
  167.18 + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
  167.19 + * KIND, either express or implied.  See the License for the
  167.20 + * specific language governing permissions and limitations
  167.21 + * under the License.
  167.22 + *
  167.23 +*/
  167.24 +
  167.25 +var exec = require('cordova/exec');
  167.26 +
  167.27 +/**
  167.28 + * Provides access to the vibration mechanism on the device.
  167.29 + */
  167.30 +
  167.31 +module.exports = {
  167.32 +
  167.33 +    /**
  167.34 +     * Vibrates the device for a given amount of time or for a given pattern or immediately cancels any ongoing vibrations (depending on the parameter).
  167.35 +     *
  167.36 +     * @param {Integer} param       The number of milliseconds to vibrate (if 0, cancels vibration)
  167.37 +     *
  167.38 +     *
  167.39 +     * @param {Array of Integer} param    Pattern with which to vibrate the device.
  167.40 +     *                                      Pass in an array of integers that
  167.41 +     *                                      are the durations for which to
  167.42 +     *                                      turn on or off the vibrator in
  167.43 +     *                                      milliseconds. The FIRST value
  167.44 +     *                                      indicates the
  167.45 +     *                                      number of milliseconds for which
  167.46 +     *                                      to keep the vibrator ON before
  167.47 +     *                                      turning it off. The NEXT value indicates the
  167.48 +     *                                      number of milliseconds for which
  167.49 +     *                                      to keep the vibrator OFF before
  167.50 +     *                                      turning it on. Subsequent values
  167.51 +     *                                      alternate between durations in
  167.52 +     *                                      milliseconds to turn the vibrator
  167.53 +     *                                      off or to turn the vibrator on.
  167.54 +     *                                      (if empty, cancels vibration)
  167.55 +     */
  167.56 +    vibrate: function(param) {
  167.57 +
  167.58 +        /* Aligning with w3c spec */
  167.59 +        
  167.60 +        //vibrate
  167.61 +        if ((typeof param == 'number') && param != 0)
  167.62 +            exec(null, null, "Vibration", "vibrate", [param]);
  167.63 +
  167.64 +        //vibrate with array ( i.e. vibrate([3000]) )
  167.65 +        else if ((typeof param == 'object') && param.length == 1)
  167.66 +        {
  167.67 +            //cancel if vibrate([0])
  167.68 +            if (param[0] == 0)
  167.69 +                exec(null, null, "Vibration", "cancelVibration", []);
  167.70 +
  167.71 +            //else vibrate
  167.72 +            else
  167.73 +                exec(null, null, "Vibration", "vibrate", [param[0]]);
  167.74 +        }
  167.75 +
  167.76 +        //vibrate with a pattern
  167.77 +        else if ((typeof param == 'object') && param.length > 1)
  167.78 +        {
  167.79 +            var repeat = -1; //no repeat
  167.80 +            exec(null, null, "Vibration", "vibrateWithPattern", [param, repeat]);
  167.81 +        }
  167.82 +
  167.83 +        //cancel vibration (param = 0 or [])
  167.84 +        else
  167.85 +            exec(null, null, "Vibration", "cancelVibration", []);
  167.86 +    },
  167.87 +
  167.88 +    /**
  167.89 +     * Vibrates the device with a given pattern.
  167.90 +     *
  167.91 +     * @param {Array of Integer} pattern    Pattern with which to vibrate the device.
  167.92 +     *                                      Pass in an array of integers that
  167.93 +     *                                      are the durations for which to
  167.94 +     *                                      turn on or off the vibrator in
  167.95 +     *                                      milliseconds. The first value
  167.96 +     *                                      indicates the number of milliseconds
  167.97 +     *                                      to wait before turning the vibrator
  167.98 +     *                                      on. The next value indicates the
  167.99 +     *                                      number of milliseconds for which
 167.100 +     *                                      to keep the vibrator on before
 167.101 +     *                                      turning it off. Subsequent values
 167.102 +     *                                      alternate between durations in
 167.103 +     *                                      milliseconds to turn the vibrator
 167.104 +     *                                      off or to turn the vibrator on.
 167.105 +     *
 167.106 +     * @param {Integer} repeat              Optional index into the pattern array at which
 167.107 +     *                                      to start repeating (will repeat until canceled),
 167.108 +     *                                      or -1 for no repetition (default).
 167.109 +     */
 167.110 +    vibrateWithPattern: function(pattern, repeat) {
 167.111 +        repeat = (typeof repeat !== "undefined") ? repeat : -1;
 167.112 +        pattern.unshift(0); //add a 0 at beginning for backwards compatibility from w3c spec
 167.113 +        exec(null, null, "Vibration", "vibrateWithPattern", [pattern, repeat]);
 167.114 +    },
 167.115 +
 167.116 +    /**
 167.117 +     * Immediately cancels any currently running vibration.
 167.118 +     */
 167.119 +    cancelVibration: function() {
 167.120 +        exec(null, null, "Vibration", "cancelVibration", []);
 167.121 +    }
 167.122 +};
   168.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   168.2 +++ b/Touchgui/plugins/wp8.json	Thu Jun 04 14:50:33 2015 +0200
   168.3 @@ -0,0 +1,16 @@
   168.4 +{
   168.5 +    "prepare_queue": {
   168.6 +        "installed": [],
   168.7 +        "uninstalled": []
   168.8 +    },
   168.9 +    "config_munge": {
  168.10 +        "files": {}
  168.11 +    },
  168.12 +    "installed_plugins": {
  168.13 +        "org.apache.cordova.device": {},
  168.14 +        "org.apache.cordova.splashscreen": {},
  168.15 +        "org.apache.cordova.vibration": {},
  168.16 +        "org.apache.cordova.dialogs": {}
  168.17 +    },
  168.18 +    "dependent_plugins": {}
  168.19 +}
  168.20 \ No newline at end of file
   169.1 Binary file Touchgui/screenshot.png has changed
   170.1 Binary file Touchgui/screenshot0a.png has changed
   171.1 Binary file Touchgui/screenshot1a.png has changed
   172.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   172.2 +++ b/Touchgui/www/css/main.css	Thu Jun 04 14:50:33 2015 +0200
   172.3 @@ -0,0 +1,42 @@
   172.4 +.center{
   172.5 +    text-align: center;
   172.6 +}
   172.7 +
   172.8 +h1{
   172.9 +    font-style: italic;
  172.10 +}
  172.11 +
  172.12 +#notifier_circle{
  172.13 +    display: inline-block;
  172.14 +    margin-top: 18px;
  172.15 +    -webkit-animation-name: spin;
  172.16 +    -webkit-animation-duration: 3s;
  172.17 +    -webkit-animation-iteration-count: infinite;
  172.18 +    -webkit-animation-timing-function: linear;
  172.19 +    -moz-animation-name: spin;
  172.20 +    -moz-animation-duration: 3s;
  172.21 +    -moz-animation-iteration-count: infinite;
  172.22 +    -moz-animation-timing-function: linear;
  172.23 +    -ms-animation-name: spin;
  172.24 +    -ms-animation-duration: 3s;
  172.25 +    -ms-animation-iteration-count: infinite;
  172.26 +    -ms-animation-timing-function: linear;
  172.27 +    
  172.28 +    border-radius: 50%;
  172.29 + }
  172.30 +
  172.31 +.green{
  172.32 +    background-image: -moz-radial-gradient(45px 45px 45deg, circle cover, #80EE9F 0%, #1BCA37 100%, #AFEAAA 95%);
  172.33 +    background-image: -webkit-radial-gradient(45px 45px, circle cover, #80EE9F, #1BCA37);
  172.34 +    background-image: radial-gradient(45px 45px 45deg, circle cover, #80EE9F 0%, #1BCA37 100%, #AFEAAA 95%);
  172.35 +}
  172.36 +
  172.37 +.gray{
  172.38 +    background-image: -moz-radial-gradient(45px 45px 45deg, circle cover, rgba(182, 180, 180, 0.59) 0%, rgba(178, 190, 180, 0) 100%, black 95%);
  172.39 +    background-image: -webkit-radial-gradient(45px 45px, circle cover, rgba(182, 180, 180, 0.59), rgba(178, 190, 180, 0));
  172.40 +    background-image: radial-gradient(45px 45px 45deg, circle cover, rgba(182, 180, 180, 0.59) 0%, rgba(178, 190, 180, 0) 100%, black 95%);
  172.41 +}
  172.42 +
  172.43 +.redtext{
  172.44 +	color:red;
  172.45 +}
  172.46 \ No newline at end of file
   173.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   173.2 +++ b/Touchgui/www/index.html	Thu Jun 04 14:50:33 2015 +0200
   173.3 @@ -0,0 +1,65 @@
   173.4 +<!DOCTYPE html><!--HTML5 doctype-->
   173.5 +<html>
   173.6 +<head>
   173.7 +	<title>Touch Buzzer Companion App</title>
   173.8 +	<meta http-equiv="Content-type" content="text/html; charset=utf-8">
   173.9 +	<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=0" />
  173.10 +	<style type="text/css">
  173.11 +		/* Prevent copy paste for all elements except text fields */
  173.12 +		*  { -webkit-user-select:none; -webkit-tap-highlight-color:rgba(255, 255, 255, 0); }
  173.13 +		input, textarea  { -webkit-user-select:text; }
  173.14 +		body { background-color:white; color:black }
  173.15 +	</style>  
  173.16 +    <!--  jQuery  -->
  173.17 +    <script src="lib/jquery/jquery-2.1.1.js"></script>
  173.18 +    <!--  App Framework  -->
  173.19 +    <link rel="stylesheet" type="text/css" href="lib/appframework/af.ui.css"></link>
  173.20 +    <script type="text/javascript" src="lib/appframework/jq.appframework.min.js"></script>
  173.21 +<!--    <script type="text/javascript" src="lib/appframework/appframework.js"></script>-->
  173.22 +    <script type="text/javascript" charset="utf-8" src="lib/appframework/appframework.ui.min.js"></script>
  173.23 +
  173.24 +    <link rel="stylesheet" type="text/css" href="css/main.css"></link>
  173.25 +    <script src="intelxdk.js"></script>
  173.26 +    <script src="cordova.js"></script>
  173.27 +    
  173.28 +    <script src='xhr.js'></script>
  173.29 +    <script type="text/javascript">
  173.30 +        var onDeviceReady=function(){                             // called when Cordova is ready
  173.31 +           if( window.Cordova && navigator.splashscreen ) {     // Cordova API detected
  173.32 +                navigator.splashscreen.hide() ;                 // hide splash screen
  173.33 +            }
  173.34 +        } ;
  173.35 +        document.addEventListener("deviceready", onDeviceReady, false) ;
  173.36 +     </script>
  173.37 +</head>
  173.38 +<body>
  173.39 +	<div id="afui">
  173.40 +        
  173.41 +        <div id="content">
  173.42 +
  173.43 +            <div id="main" title="TouchNotifier" class="panel" data-footer="none">
  173.44 +                <div class="center">
  173.45 +                    <h1>Are you Expecting Anyone?</h1>
  173.46 +                    <div id="notifier_circle" class="gray">
  173.47 +                        
  173.48 +                    </div>
  173.49 +                </div>          
  173.50 +                <div>
  173.51 +                    <b>Log:</b><br>
  173.52 +                    <div id="feedback_log" class="redtext"></div>
  173.53 +                </div>
  173.54 +            </div>
  173.55 +            
  173.56 +            <div class="panel" data-title="TouchNotifier Companion" modal="true" selected="true">
  173.57 +                <p>Please provide an IP address & port to your TouchNotifier IoT project (Touch Sensor & Buzzer) on your development platform.</p>
  173.58 +                <b>Note:</b> This is needed for establishing a connection betweeen your Companion App and Node.js/IoT application.
  173.59 +                <p>
  173.60 +                <input id="ip_address" type="text" placeholder="Enter your IoT dev platform's IP Address">
  173.61 +                <input id="port" type="text" placeholder="Enter your corresponding port number">
  173.62 +                <a class="block button" onclick="validateIP()">Submit</a>
  173.63 +            </div>
  173.64 +        </div>
  173.65 +    </div>
  173.66 +</body>
  173.67 +<script type="text/javascript" src="js/main.js"></script>
  173.68 +</html>
   174.1 Binary file Touchgui/www/js/.DS_Store has changed
   175.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   175.2 +++ b/Touchgui/www/js/main.js	Thu Jun 04 14:50:33 2015 +0200
   175.3 @@ -0,0 +1,77 @@
   175.4 +/*jslint unparam: true */
   175.5 +
   175.6 +/* jshint strict: true, -W097, unused:false  */
   175.7 +/*global window, document, d3, $, io, navigator, setTimeout */
   175.8 +
   175.9 +//Set the size of the Notifier Circle
  175.10 +$("#notifier_circle").width(0.8 * window.innerWidth);
  175.11 +$("#notifier_circle").height(0.8 * window.innerWidth);
  175.12 +
  175.13 +
  175.14 +/*
  175.15 +Function: validateIP()
  175.16 +Parameter: none
  175.17 +Description: Attempt to connect to server/Intel IoT platform
  175.18 +*/
  175.19 +function validateIP() {
  175.20 +    'use strict';
  175.21 +    var socket,
  175.22 +    //Get values from text fields
  175.23 +        ip_addr = $("#ip_address").val(),
  175.24 +        port = $("#port").val(),
  175.25 +        script = document.createElement("script");
  175.26 +
  175.27 +    //create script tag for socket.io.js file located on your IoT platform (development board)
  175.28 +    script.setAttribute("src", "http://" + ip_addr + ":" + port + "/socket.io/socket.io.js");
  175.29 +    document.head.appendChild(script);
  175.30 +    
  175.31 +    //Wait 1 second before connecting
  175.32 +    setTimeout(function () {
  175.33 +        try {
  175.34 +            //Connect to Server
  175.35 +            socket = io.connect("http://" + ip_addr + ":" + port);
  175.36 +
  175.37 +            //Attach a 'connected' event handler to the socket
  175.38 +            socket.on("connected", function (message) {
  175.39 +                navigator.notification.alert(
  175.40 +                    'Welcome',  // message
  175.41 +                    "",                     // callback
  175.42 +                    'Hi There!',            // title
  175.43 +                    'Ok'                  // buttonName
  175.44 +                );
  175.45 +            });
  175.46 +
  175.47 +            //Set all Back button to not show
  175.48 +            $.ui.showBackButton = false;
  175.49 +            //Load page with transition
  175.50 +            $.ui.loadContent("#main", false, false, "fade");
  175.51 +
  175.52 +            socket.on("message", function (message) {
  175.53 +                //alert("Is anyone there? "+message);
  175.54 +                if (message === "present") {
  175.55 +                    $("#notifier_circle").attr("class", "green");
  175.56 +                    //Update log
  175.57 +                    $("#feedback_log").append(Date().substr(0, 21) + " Someone is Present!<br>");
  175.58 +                    //Prompt user with Cordova notification alert
  175.59 +                    navigator.notification.alert(
  175.60 +                        'Someone is Present!',  // message
  175.61 +                        "",                     // callback
  175.62 +                        'Check Your Door',            // title
  175.63 +                        'Ok'                  // buttonName
  175.64 +                    );
  175.65 +                    //Wait 2 seconds then turn back to gray
  175.66 +                    setTimeout(function () {
  175.67 +                        $("#notifier_circle").attr("class", "gray");
  175.68 +                    }, 3000);
  175.69 +                }
  175.70 +            });
  175.71 +        } catch (e) {
  175.72 +            navigator.notification.alert(
  175.73 +                "Server Not Available!",  // message
  175.74 +                "",                     // callback
  175.75 +                'Connection Error!',            // title
  175.76 +                'Ok'                  // buttonName
  175.77 +            );
  175.78 +        }
  175.79 +    }, 1000);
  175.80 +}
   176.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   176.2 +++ b/Touchgui/www/lib/appframework/af.ui.css	Thu Jun 04 14:50:33 2015 +0200
   176.3 @@ -0,0 +1,3507 @@
   176.4 +/*! intel-appframework - v2.1.0 - 2014-09-22 */
   176.5 +
   176.6 +/**********************************************************
   176.7 +    GENERAL UI ELEMENTS
   176.8 +**********************************************************/
   176.9 +
  176.10 +* {
  176.11 +    -webkit-user-select:none; /* Prevent copy paste for all elements except text fields */
  176.12 +    -webkit-tap-highlight-color:rgba(0, 0, 0, 0); /* set highlight color for user interaction */
  176.13 +    -moz-tap-highlight-color:rgba(0, 0, 0, 0); /* set highlight color for user interaction */
  176.14 +    -ms-touch-action:none;
  176.15 +    -moz-user-select:-moz-none;
  176.16 +    -webkit-touch-callout: none; /* prevent the popup menu on any links*/
  176.17 +    margin:0;
  176.18 +    padding:0;
  176.19 +    -webkit-box-sizing:border-box;
  176.20 +    -moz-box-sizing:border-box;
  176.21 +    box-sizing:border-box;
  176.22 +}
  176.23 +
  176.24 +body {
  176.25 +    overflow-x:hidden;
  176.26 +    -webkit-text-size-adjust:none;
  176.27 +    font-family:'Helvetica Neue', Helvetica, Arial, sans-serif;
  176.28 +    color:#000;
  176.29 +    font-size:14px;
  176.30 +    display:-webkit-box;
  176.31 +    background: #CBD2D8;
  176.32 +    /* We want to layout our first container vertically */
  176.33 +    -webkit-box-orient: vertical;
  176.34 +    /* we want our child elements to stretch to fit the container */
  176.35 +    -webkit-box-align:stretch;
  176.36 +} /* General styles that apply to elements not contained within other classes and styles */
  176.37 +
  176.38 +
  176.39 +#afui input,textarea { -webkit-user-select:text; -moz-user-select:-moz-text;-moz-user-select:text;} /* allow users to select text that appears in input fields */
  176.40 +
  176.41 +#afui img { border:none; } /* Remove default borders for images */
  176.42 +
  176.43 +
  176.44 +#afui p {
  176.45 +    display:block;
  176.46 +    margin:6px 0;
  176.47 +
  176.48 +    font-size:14px;
  176.49 +    line-height:20px;
  176.50 +    color:inherit
  176.51 +}
  176.52 +
  176.53 +
  176.54 +#afui #afui_modal {
  176.55 +    background: inherit;
  176.56 +    color:inherit;
  176.57 +    -webkit-backface-visibility: hidden;
  176.58 +    z-index:9999 !important;
  176.59 +    width:100%;
  176.60 +    height:100%;
  176.61 +    display:none;
  176.62 +    position:absolute; top:0;
  176.63 +    overflow:hidden;    
  176.64 +    display: -webkit-box;
  176.65 +    display: -moz-box;
  176.66 +    display: box;
  176.67 +    display: -ms-flexbox;
  176.68 +    -webkit-box-orient: vertical;
  176.69 +    -moz-box-orient: vertical;
  176.70 +    -ms-box-orient: vertical;
  176.71 +    box-orient: vertical;
  176.72 +    display: -webkit-flex;
  176.73 +    display: -moz-flex;
  176.74 +    display: -ms-flex;
  176.75 +    display: flex;
  176.76 +    -webkit-flex-direction: column;
  176.77 +    -moz-flex-direction: column;
  176.78 +    -ms-flex-direction: column;
  176.79 +    flex-direction: column;
  176.80 +}
  176.81 +
  176.82 +
  176.83 +#afui #modalContainer > * {
  176.84 +    -webkit-backface-visibility: hidden;
  176.85 +    -webkit-perspective: 1000;
  176.86 +    background:inherit;
  176.87 +    color:inherit;
  176.88 +}
  176.89 +
  176.90 +
  176.91 +
  176.92 +#afui .afScrollPanel { width:100%; min-height:100%; }
  176.93 +
  176.94 +#afui {
  176.95 +    position:absolute;
  176.96 +    width:100%;
  176.97 +    top:0;
  176.98 +    bottom:0;
  176.99 +    overflow:hidden;
 176.100 +}
 176.101 +
 176.102 +#afui,.flexContainer {
 176.103 +       display: -webkit-box;
 176.104 +    display:    -moz-box;
 176.105 +    display:         box;
 176.106 +    display: -ms-flexbox;
 176.107 +
 176.108 +    -webkit-box-orient: vertical;
 176.109 +       -moz-box-orient: vertical;
 176.110 +        -ms-box-orient: vertical;
 176.111 +            box-orient: vertical;
 176.112 +
 176.113 +    /* current syntax */
 176.114 +    display: -webkit-flex;
 176.115 +    display:    -moz-flex;
 176.116 +    display:     -ms-flex;    
 176.117 +    display:         flex;
 176.118 +
 176.119 +    -webkit-flex-direction: column;
 176.120 +       -moz-flex-direction: column;
 176.121 +        -ms-flex-direction: column;
 176.122 +            flex-direction: column;
 176.123 +}
 176.124 +
 176.125 +#afui > #splashscreen {
 176.126 +    position:absolute;
 176.127 +    top:0;bottom:0;
 176.128 +    width:100%;
 176.129 +    left:0;
 176.130 +    min-height:100%;
 176.131 +    background:rgba(29,29,28,1) !important;
 176.132 +    color:white !important;
 176.133 +    font-size:30px;
 176.134 +    text-align:center;
 176.135 +    z-index:9999;
 176.136 +    display:block;
 176.137 +    margin-left: auto !important; margin-right: auto !important;
 176.138 +    padding-top:80px !important;
 176.139 +}
 176.140 +
 176.141 +
 176.142 +/**********************************************************
 176.143 +    header
 176.144 +**********************************************************/
 176.145 +#afui .header {
 176.146 +    position:relative;
 176.147 +    overflow: hidden;
 176.148 +    display:block;
 176.149 +    z-index:250;
 176.150 +    -webkit-box-sizing:border-box; box-sizing:border-box;
 176.151 +    height:44px;
 176.152 +    left:0; right:0;
 176.153 +    
 176.154 +} /* This is masthead bar that appears at the top of the UI */
 176.155 +
 176.156 +
 176.157 +
 176.158 +
 176.159 +#afui .header h1 {
 176.160 +    
 176.161 +    position: absolute;
 176.162 +    width: 45%;
 176.163 +    z-index: 1;
 176.164 +    height: 44px;
 176.165 +    font-size: 18px;
 176.166 +    font-weight: bold;
 176.167 +    left: 27.5%;
 176.168 +    color: inherit;
 176.169 +    padding: 10px 0;
 176.170 +    text-shadow: rgba(0,0,0,0.8) 0 -1px 0;
 176.171 +    text-align: center;
 176.172 +    white-space: nowrap;
 176.173 +    text-overflow: ellipsis;
 176.174 +    overflow: hidden;
 176.175 +} /* This is text that appears in the header at the top of the screen */
 176.176 +
 176.177 +
 176.178 +/**********************************************************
 176.179 +    CONTENT AREA
 176.180 +**********************************************************/
 176.181 +
 176.182 +#afui #content, #afui_modal #modalContainer {
 176.183 +    z-index:180;
 176.184 +    
 176.185 +    position:relative;
 176.186 +    /* previous syntax */
 176.187 +        -webkit-box-flex: 1;
 176.188 +           -moz-box-flex: 1;
 176.189 +            -ms-box-flex: 1;
 176.190 +                box-flex: 1;
 176.191 + 
 176.192 +        /* current syntax */
 176.193 +        -webkit-flex: 1;
 176.194 +           -moz-flex: 1;
 176.195 +            -ms-flex: 1;
 176.196 +                flex: 1;
 176.197 +    overflow:hidden;
 176.198 +
 176.199 +    background:inherit;
 176.200 +    color:inherit;
 176.201 +} /* Accounts for positioning of the content area, which is everything below the header and above the navbar. */
 176.202 +
 176.203 +
 176.204 +#afui .panel {
 176.205 +    z-index:180;
 176.206 +    width:100%;
 176.207 +    height:100%;
 176.208 +    display:none;
 176.209 +    position:absolute; top:0; left:0;
 176.210 +    overflow-y:auto;
 176.211 +    overflow-x:hidden;
 176.212 +    -webkit-overflow-scrolling:touch;
 176.213 +    -webkit-backface-visibility: hidden;   
 176.214 +    padding:10px;
 176.215 +    padding-top:0px;
 176.216 +} /* This class is applied to the divs that contain the various "views" or pages of the app. */
 176.217 +
 176.218 +
 176.219 +/**********************************************************
 176.220 +    scroller CSS
 176.221 +**********************************************************/
 176.222 +#afui .y-scroll, #afui .panel.y-scroll {
 176.223 +    overflow-x:hidden;
 176.224 +    overflow-y:auto;
 176.225 +}   
 176.226 +#afui .x-scroll, #afui .panel.x-scroll {
 176.227 +    overflow-x:auto;
 176.228 +    overflow-y:hidden;
 176.229 +}
 176.230 +#afui .no-scroll, #afui .panel.no-scroll {
 176.231 +    overflow:hidden;
 176.232 +}
 176.233 +
 176.234 +
 176.235 +/**********************************************************
 176.236 +    Navbar
 176.237 +**********************************************************/
 176.238 +/* Nav bar appears locked to the bottom of the screen. It is the primary navigation. can contain text or graphical navigation */
 176.239 +
 176.240 +#afui .footer {  
 176.241 +    z-index:180;
 176.242 +    height:49px;
 176.243 +    display:block;
 176.244 +    left:0;
 176.245 +    right:0;
 176.246 +    position:relative;
 176.247 +    padding:0 3px;
 176.248 +}
 176.249 +
 176.250 +
 176.251 +#afui footer>a:not(.button) {
 176.252 +    -webkit-box-sizing:border-box;
 176.253 +    box-sizing: border-box;
 176.254 +    top: 3px;
 176.255 +    height: 43px;
 176.256 +    overflow: hidden;
 176.257 +    font-size:12px;
 176.258 +    font-weight:normal;
 176.259 +    text-decoration: none;
 176.260 +    color: #fff;
 176.261 +    text-align: center;
 176.262 +    display: inline-block;
 176.263 +    width: 25%;
 176.264 +    -webkit-backface-visibility: hidden;
 176.265 +    -webkit-perspective: 1000;
 176.266 +    line-height: 67px;
 176.267 +    position: relative;
 176.268 +    margin: 0;
 176.269 +}
 176.270 +
 176.271 +
 176.272 +#afui footer>a:not(.button) .af-badge {
 176.273 +    right:auto;
 176.274 +    margin-left:-16px;
 176.275 +}
 176.276 +
 176.277 +
 176.278 +#afui footer>a.icon:not(.button):before {
 176.279 +    position:absolute;
 176.280 +    top:2px;
 176.281 +    left:0;
 176.282 +    font-size: 25px;
 176.283 +    margin:auto;
 176.284 +    width: 100%;
 176.285 +}
 176.286 +
 176.287 +
 176.288 +#afui footer>a.pressed:not(.button) {
 176.289 +    
 176.290 +}
 176.291 +
 176.292 +
 176.293 +#afui footer>a.icon.pressed:not(.button):before {
 176.294 +    
 176.295 +}
 176.296 +
 176.297 +/* Custom footers - always hidden */
 176.298 +#afui footer, #afui header, #afui nav, #afui aside {    display:none; }
 176.299 +
 176.300 +/* Show the active header/footer/navs */
 176.301 +#afui .footer footer, #afui #menu nav, #afui .header header, #afui #aside_menu aside {display:block; height:100%;}
 176.302 +
 176.303 +#afui > #menu.tabletMenu {
 176.304 +    z-index:1;
 176.305 +    width:200px;
 176.306 +    bottom:0;    
 176.307 +    display:none;
 176.308 +    position:absolute; top:0; left:0;
 176.309 +    border-right: 1px solid rgba(128,128,128,0.5);
 176.310 +    
 176.311 +}
 176.312 +
 176.313 +#afui > #aside_menu {
 176.314 +    z-index:1;
 176.315 +    width:200px;
 176.316 +    bottom:0;
 176.317 +    height:100%;
 176.318 +    display:none;
 176.319 +    position:absolute; top:0; right:0;
 176.320 +    border-left: 1px solid rgba(128,128,128,0.5);
 176.321 +}
 176.322 +
 176.323 +
 176.324 +#afui #menu_scroller, #afui #aside_menu_scroller {
 176.325 +    padding-bottom:10px;
 176.326 +    overflow-y:auto;
 176.327 +    overflow-x:hidden;
 176.328 +    -webkit-backface-visibility: hidden;
 176.329 +    -webkit-overflow-scrolling:touch;
 176.330 +}
 176.331 +
 176.332 +
 176.333 +#afui #menu_scroller > *,  #afui #aside_menu_scroller > * {
 176.334 +    -webkit-backface-visibility: hidden;
 176.335 +    -webkit-perspective: 1000;
 176.336 +}
 176.337 +
 176.338 +
 176.339 +#afui #menu .list li, 
 176.340 +#afui #menu .list .divider, 
 176.341 +#afui #menu .list li:first-child, 
 176.342 +#afui #menu  .list li:last-child,
 176.343 +
 176.344 +#afui #aside_menu .list li, 
 176.345 +#afui #aside_menu .list .divider, 
 176.346 +#afui #aside_menu .list li:first-child, 
 176.347 +#afui #aside_menu  .list li:last-child
 176.348 + {
 176.349 +
 176.350 +    font-weight:bold;
 176.351 +    font-size:1em;
 176.352 +    line-height:1em;
 176.353 +    border-color:#101012;
 176.354 +    -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .08);
 176.355 +    box-shadow: inset 0 1px 0 rgba(255, 255, 255, .08);
 176.356 +
 176.357 +}
 176.358 +
 176.359 +#afui #menu .list > li > a,
 176.360 +#afui #aside_menu .list > li > a    
 176.361 +{
 176.362 +    color:#ccc;
 176.363 +    margin-left:6px;
 176.364 +    font-weight: normal;
 176.365 +}
 176.366 +
 176.367 +
 176.368 +#afui #menu .list, 
 176.369 +#afui #menu .list .divider,
 176.370 +#afui #aside_menu .list, 
 176.371 +#afui #aside_menu .list .divider
 176.372 +{   background:inherit; }
 176.373 +
 176.374 +
 176.375 +#afui #menu .list .divider, #afui #aside_menu .list .divider {
 176.376 +    background:#333;
 176.377 +    color:#fff;
 176.378 +    font-weight:bold;
 176.379 +    font-size:1em;
 176.380 +    line-height:1em;
 176.381 +    padding:6px;
 176.382 +    top:0px;
 176.383 +    border:none;
 176.384 +    -webkit-box-shadow:none; box-shadow: none;
 176.385 +}
 176.386 +
 176.387 +
 176.388 +#afui #menu .list > li > a:after, #afui #aside_menu .list > li > a:after  { margin-top: -8px; }
 176.389 +
 176.390 +/* End side menu css */
 176.391 +
 176.392 +
 176.393 +
 176.394 +#afui .splashscreen {
 176.395 +    background:rgba(29,29,28,1) !important;
 176.396 +    padding-left:40px;
 176.397 +    padding-top:30px !important;
 176.398 +    min-height:100%;
 176.399 +}
 176.400 +
 176.401 +
 176.402 +#afui h2 {
 176.403 +    display:block;
 176.404 +    height:34px;
 176.405 +    font-weight: bold;
 176.406 +    font-size:18px;
 176.407 +    color:#000;
 176.408 +    padding:6px 0;
 176.409 +    margin-bottom:8px;
 176.410 +} /* Header class used for non-navigable header bars (h1 is reserved for the header) */
 176.411 +
 176.412 +
 176.413 +#afui .collapsed:after {
 176.414 +    float:right;
 176.415 +    content:'';
 176.416 +    border-left:5px solid transparent;
 176.417 +    border-right:5px solid transparent;
 176.418 +    border-top:6px solid #000;
 176.419 +    display:block;
 176.420 +    position:absolute;
 176.421 +    top:14px;right:14px;
 176.422 +}
 176.423 +
 176.424 +#afui .collapsed:before {
 176.425 +    float:right;
 176.426 +    content:'';
 176.427 +    color:transparent;
 176.428 +    background:transparent;
 176.429 +    width:14px; height:14px;
 176.430 +    display:block;
 176.431 +    border:2px solid #000;
 176.432 +    border-radius:3px;
 176.433 +    position:absolute;
 176.434 +    top:8px;right:10px;
 176.435 +}
 176.436 +
 176.437 +#afui .expanded:after {
 176.438 +    float:right;content:'';
 176.439 +    border-left: 5px solid transparent;
 176.440 +    border-right: 5px solid transparent;
 176.441 +    border-bottom: 6px solid #000;
 176.442 +    display:block;
 176.443 +    position:absolute;
 176.444 +    top:13px;right:14px;
 176.445 +}
 176.446 +
 176.447 +#afui .expanded:before {
 176.448 +    float:right;
 176.449 +    content:'';
 176.450 +    color:transparent;
 176.451 +    background:transparent;
 176.452 +    width:14px; height:14px;
 176.453 +    display:block;
 176.454 +    border:2px solid #000;
 176.455 +    border-radius:3px;
 176.456 +    position:absolute;
 176.457 +    top:8px;right:10px;
 176.458 +}
 176.459 +
 176.460 +
 176.461 +/**********************************************************
 176.462 +    UI
 176.463 +**********************************************************/
 176.464 +
 176.465 +.ui-icon {
 176.466 +    background:                         #666;
 176.467 +    background:                         rgba(0,0,0,.4);
 176.468 +    background-repeat: no-repeat;
 176.469 +    border-radius:                      9px;
 176.470 +}
 176.471 +
 176.472 +
 176.473 +.ui-loader { display: none; position: absolute; opacity: .85; z-index: 100; left: 50%; width: 200px; margin-left: -100px; margin-top: -35px; padding: 10px 30px; background: #666;background:rgba(0,0,0,.4);border-radius:9px;color:white;}
 176.474 +.ui-loader.heavy {opacity:1;}
 176.475 +.ui-loader h1 { font-size: 15px; text-align: center; }
 176.476 +.ui-loader .ui-icon { position: static; display: block; opacity: .9; margin: 0 auto; width: 35px; height: 35px; background-color: transparent; }
 176.477 +
 176.478 +
 176.479 +.spin  {
 176.480 +    -webkit-transform: rotate(360deg);
 176.481 +    -webkit-animation-name: spin;
 176.482 +    -webkit-animation-duration: 1s;
 176.483 +    -webkit-animation-iteration-count:  infinite;
 176.484 +}
 176.485 +@-webkit-keyframes spin {
 176.486 +    from {-webkit-transform: rotate(0deg);}
 176.487 +    to {-webkit-transform: rotate(360deg);}
 176.488 +}
 176.489 +
 176.490 +
 176.491 +.ui-icon-loading {
 176.492 +    background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACMAAAAjBAMAAADs965qAAAAA3NCSVQICAjb4U/gAAAAMFBMVEX////x8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHvvEhiAAAAEHRSTlMAESIzRFVmd4iZqrvM3e7/dpUBFQAAAAlwSFlzAAAK6wAACusBgosNWgAAABx0RVh0U29mdHdhcmUAQWRvYmUgRmlyZXdvcmtzIENTNXG14zYAAAEaSURBVCiRY2AgATCapaUqoIiIzN5z5syZJiQRltW7gUJ3705C6OraDRG6GwATkli1evdusNBTuKJVq3c4MjBX3733DqqMfdWqFWDbau+9ewIRspy5KgHMYL737g1EX+fMaVAjbN+9KwDLzZxZAHPMu3cXwEbNnAl397p3YDslOmD6GBjs/v8AURodzXAh3v+/QZRHRyNciPP/f4hQA1yIHVMICtzLC9CFzMuL0IXEy0vQhdjK0+BsRqgv0tIMYEKCggJgmbS0QJgiQUEIwy0tVQCmCCokmhYaCFMElWMKDQ01BIkoKcKEGFRDQ1yMlISUgEIwe5iAQi7GxkpKSjBFwMh2cXEGCSkiOVcFLIQswsAgZGxshCpCBgAA0FNYp5zwDegAAAAASUVORK5CYII=);
 176.493 +    width: 40px;
 176.494 +    height: 40px;
 176.495 +    border-radius: 20px;
 176.496 +    background-size: 35px 35px;
 176.497 +}
 176.498 +
 176.499 +
 176.500 +#afui .ui-corner-all { border-radius:.6em; }
 176.501 +
 176.502 +
 176.503 +#afui_mask { position:absolute;top:45%;z-index:999999; }
 176.504 +
 176.505 +.afui_panel_mask { position:absolute;top:0;bottom:0;left:0;right:0;z-index:2000;background-color:rgba(0,0,0,0.1);display:none}
 176.506 +
 176.507 +#afui .hasMenu{
 176.508 +    left:0;
 176.509 +}
 176.510 +
 176.511 +
 176.512 +#afui .menuButton {
 176.513 +    position: relative;
 176.514 +    top: 5px;
 176.515 +    right: -8px;
 176.516 +    height: 36px;
 176.517 +    width: 36px;
 176.518 +    z-index:2;
 176.519 +    float:right;
 176.520 +}
 176.521 +
 176.522 +
 176.523 +#afui .menuButton:after {
 176.524 +    border-bottom: 9px double white;
 176.525 +    border-top: 3px solid white;
 176.526 +    top: 9px;
 176.527 +    left: 3px;
 176.528 +    content: "";
 176.529 +    height: 3px;
 176.530 +    position: absolute;
 176.531 +    width: 15px;
 176.532 +}
 176.533 +
 176.534 +#afui .hasMenu.on {
 176.535 +    -webkit-transform:translate3d(200px,0,0);
 176.536 +    transform:translate(200px,0);
 176.537 +}
 176.538 +
 176.539 +
 176.540 +
 176.541 +
 176.542 +
 176.543 +#afui .modalbutton {
 176.544 +    position:absolute;
 176.545 +    top:0;
 176.546 +    right:5px;
 176.547 +    height:32px;
 176.548 +    width:58px;
 176.549 +    line-height:32px;
 176.550 +    z-index:9999;
 176.551 +}
 176.552 +
 176.553 +
 176.554 +#afui .closebutton  {
 176.555 +    position:absolute;
 176.556 +    top:6px; right:6px;
 176.557 +    display:block;
 176.558 +    height:24px ;
 176.559 +    width:24px ;
 176.560 +    border-radius:12px;
 176.561 +    border:1px solid #666;
 176.562 +    background:#fff;
 176.563 +    color:#333;
 176.564 +    font-weight: bold;
 176.565 +    font-size:21px;
 176.566 +    line-height:18px;
 176.567 +    text-align:center;
 176.568 +    text-decoration:none;
 176.569 +}
 176.570 +
 176.571 +#afui .closebutton:before { content:'x'; }
 176.572 +
 176.573 +#afui .closebutton.selected,.closebutton.modalButton.selected {
 176.574 +    color:#fff;
 176.575 +    background:#333;
 176.576 +}
 176.577 +
 176.578 +#afui .panel > .list, 
 176.579 +#afui .panel > .afScrollPanel > .list {
 176.580 +    margin:0px -10px;
 176.581 +}
 176.582 +
 176.583 +#afui .panel > .list.inset, 
 176.584 +#afui .panel > .afScrollPanel > .list.inset {
 176.585 +    margin:0px;
 176.586 +}
 176.587 +
 176.588 +
 176.589 +/* Chevrons */
 176.590 +@font-face {
 176.591 +    font-family: 'chevron';
 176.592 +    src: url(data:application/x-font-woff;charset=utf-8;base64,d09GRgABAAAAAAQAAA0AAAAABZgAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABGRlRNAAABMAAAABoAAAAcZ/T02kdERUYAAAFMAAAAHwAAACAAMgAGT1MvMgAAAWwAAABHAAAAVj7i2r5jbWFwAAABtAAAAEMAAAFS8BX0J2dhc3AAAAH4AAAACAAAAAj//wADZ2x5ZgAAAgAAAABsAAAAbMHrMoZoZWFkAAACbAAAADAAAAA2/JaSB2hoZWEAAAKcAAAAHgAAACQDav/GaG10eAAAArwAAAATAAAAFAN1AB1sb2NhAAAC0AAAAAwAAAAMAA4ANm1heHAAAALcAAAAHQAAACAASAAbbmFtZQAAAvwAAADdAAABhigr581wb3N0AAAD3AAAACIAAAA8nFVDO3icY2BgYGQAgjO2i86D6LO3V7LCaABOtwcoAAB4nGNgZGBg4ANiCQYQYGJgZGBmYAGSLGAeAwAEkAA5AHicY2BkVGCcwMDKwMGozGjJwMBgB6WvM4gxFDMwMDGwMjPAgQCCyRCQ5prC4PCB4UMIY8P/AwwajA0MDg0MDIwgOQBg6QqyAHicY2BgYGaAYBkGRgYQ8AHyGMF8FgYDIM0BhEwgiQ8MH0L+/0dmCTDzb4DqAgNGNgY4lxGkh4kBFTAyDHsAAFhbChsAAAAAAf//AAIAAQAA/8ABwAGAAAIAABEBIQHA/kABgP5AAAAAAAEAHf/tARMBcwAXAAAlFA8BBiIvASY1ND8BJyY1ND8BNjIfARYBEwmkCRoJFAkJenoJCRQIHAikCbANCqMJCRMKDQ0JenkKDQ0JEwoKowl4nGNgZGBgAOLcX7xy8fw2Xxm4GQ8ARRjO3l7JiqD/H2A8wNgA5HIwMIFEAUPwC7d4nGNgZGBgbPh/gEGD8QADwz8HIAkUQQGsAIQZBTAAAHicYzzAAAFTIRSjAoMsABVQAZUAAAAAAAAAAAAADgA2eJxjYGRgYGBlkGAA0QwMTEDMCGY7gPkMAAUvAGQAAAB4nHWOTWoCQRBG3+hoCIbgKmTZkE02M3RPwIUHmAO4cC/SjII40P7gSbLKEbL0GB4gR8gx/JzUJgsbin68rqqvgSc+ybidjAfGxj3xu3GfN07Gufy38YARF+Oh/K86s/xR5rmbunFP/Grcp8Yb5/JfxgNeOBsP5X9YsiJyJNGyheUqHlMrmMk2HNiw0Buz2Bw2C0Hd9e27O6kj4qgoleaYqv7v+3NBrwUTVSUKfGhNu93XbWqiq0rvps5yRcEXk6LyQU33/jaXTexYW0bo8pnHtFtrRyj93dkrAWI51wAAAHicY2BiwA9YgZiRgYmRiZGZvTQv083AwABCm5oAACfXBG0AAA==) format('woff'),
 176.593 +         url(data:application/x-font-ttf;charset=utf-8;base64,AAEAAAANAIAAAwBQRkZUTWf09NoAAAV8AAAAHEdERUYAMgAGAAAFXAAAACBPUy8yPuLavgAAAVgAAABWY21hcPAV9CcAAAHEAAABUmdhc3D//wADAAAFVAAAAAhnbHlmwesyhgAAAyQAAABsaGVhZPyWkgcAAADcAAAANmhoZWEDav/GAAABFAAAACRobXR4A3UAHQAAAbAAAAAUbG9jYQAOADYAAAMYAAAADG1heHAASAAbAAABOAAAACBuYW1lKCvnzQAAA5AAAAGGcG9zdJxVQzsAAAUYAAAAPAABAAAAAQAAbfoNHl8PPPUACwHAAAAAAM3bqQUAAAAAzdupBQAA/8ABwAGAAAAACAACAAAAAAAAAAEAAAGA/8AAKAHAAAD+QAHAAAEAAAAAAAAAAAAAAAAAAAAFAAEAAAAFABgAAQAAAAAAAgAAAAEAAQAAAEAAAAAAAAAAAQEgAZAABQAIASMBOQAAAD4BIwE5AAAA1wAWAHMAAAIABQMAAAAAAAAAAAAAEAAAAAAAAAAAAAAAUGZFZABA8ADwVAGA/8AAKAGAAECAAAABAAAAAAAAAcAAAAAAAAAAlQAAAAAAAAEgAB0AAAADAAAAAwAAABwAAQAAAAAATAADAAEAAAAcAAQAMAAAAAgACAACAAAAAPAA8FT//wAAAADwAPBU//8AABADD7AAAQAAAAAAAAAAAAABBgAAAQAAAAAAAAABAgAAAAIAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgA2AAEAAP/AAcABgAACAAARASEBwP5AAYD+QAAAAAABAB3/7QETAXMAFwAAJRQPAQYiLwEmNTQ/AScmNTQ/ATYyHwEWARMJpAkaCRQJCXp6CQkUCBwIpAmwDQqjCQkTCg0NCXp5Cg0NCRMKCqMJAAAADACWAAEAAAAAAAEABwAQAAEAAAAAAAIABwAoAAEAAAAAAAMAIwB4AAEAAAAAAAQABwCsAAEAAAAAAAUACwDMAAEAAAAAAAYABwDoAAMAAQQJAAEADgAAAAMAAQQJAAIADgAYAAMAAQQJAAMARgAwAAMAAQQJAAQADgCcAAMAAQQJAAUAFgC0AAMAAQQJAAYADgDYAGMAaABlAHYAcgBvAG4AAGNoZXZyb24AAFIAZQBnAHUAbABhAHIAAFJlZ3VsYXIAAEYAbwBuAHQARgBvAHIAZwBlACAAMgAuADAAIAA6ACAAYwBoAGUAdgByAG8AbgAgADoAIAAxADAALQA2AC0AMgAwADEAMwAARm9udEZvcmdlIDIuMCA6IGNoZXZyb24gOiAxMC02LTIwMTMAAGMAaABlAHYAcgBvAG4AAGNoZXZyb24AAFYAZQByAHMAaQBvAG4AIAAxAC4AMAAAVmVyc2lvbiAxLjAAAGMAaABlAHYAcgBvAG4AAGNoZXZyb24AAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAQACAQIBAwd1bmlGMDAwB3VuaUYwNTQAAAAB//8AAgABAAAADgAAABgAAAAAAAIAAQADAAQAAQAEAAAAAgAAAAAAAQAAAADMPaLPAAAAAM3bqQUAAAAAzdupBQ==) format('truetype');
 176.594 +    font-weight: normal;
 176.595 +    font-style: normal;
 176.596 +}
 176.597 +
 176.598 +#afui .chevron {
 176.599 +    font-family: 'chevron';
 176.600 +    speak: none;
 176.601 +    font-style: normal;
 176.602 +    font-weight: normal;
 176.603 +    font-variant: normal;
 176.604 +    text-transform: none;
 176.605 +    line-height: 1;
 176.606 +    -webkit-font-smoothing: antialiased;
 176.607 +}
 176.608 +#afui .chevron:before {
 176.609 +    content: "\f054";
 176.610 +}
 176.611 +
 176.612 +#afui .chevron.left {
 176.613 +    -webkit-transform:rotate(180deg);
 176.614 +    transform:rotate(180deg);
 176.615 +}
 176.616 +
 176.617 +
 176.618 +@media handheld, only screen and (min-width: 768px) {
 176.619 +    #afui .footer.hasMenu.splitview, #afui .header.hasMenu.splitview, #afui  #content.hasMenu.splitview  {
 176.620 +        position:relative;        
 176.621 +        right:0px;
 176.622 +        margin-left:256px;
 176.623 +        -webkit-transition: transform 0ms;
 176.624 +        -webkit-transform:none;
 176.625 +        transition:transform 0ms;
 176.626 +        transform:none ; 
 176.627 +        width: -webkit-calc(100% - 256px);
 176.628 +        width: calc(100% - 256px);
 176.629 +    }
 176.630 +
 176.631 +    #afui > #aside_menu.splitview {
 176.632 +        width:256px;
 176.633 +    }
 176.634 +    
 176.635 +        
 176.636 +    #afui > #menu.tabletMenu.splitview {
 176.637 +        z-index:1;
 176.638 +        width:256px;
 176.639 +        bottom:0;
 176.640 +        height:100% ;
 176.641 +        display:block;
 176.642 +        position:absolute ; top:0;
 176.643 +        left:0px;
 176.644 +        -webkit-transform:none;
 176.645 +        -webkit-transition:none;
 176.646 +        transform:none;
 176.647 +        transition:none;        
 176.648 +    }
 176.649 +    
 176.650 +    #afui .splitview .menuButton { display:none;    }
 176.651 +}
 176.652 +
 176.653 +@media print {
 176.654 +      body {
 176.655 +          overflow:visible;
 176.656 +      }
 176.657 +      #afui #content{
 176.658 +        overflow: visible;
 176.659 +        left:0;         
 176.660 +      }
 176.661 +      #afui {
 176.662 +        overflow:visible;
 176.663 +      }
 176.664 +      #afui .panel {
 176.665 +        overflow-x:visible !important;
 176.666 +        overflow-y:visible !important;
 176.667 +        overflow:visible !important;
 176.668 +      }
 176.669 +}
 176.670 +
 176.671 +/* blue #0190d6
 176.672 +
 176.673 + */
 176.674 +
 176.675 +@-ms-viewport {
 176.676 +  width: device-width;
 176.677 +}
 176.678 +
 176.679 +#afui {
 176.680 +    background:white;
 176.681 +    color:#53575E;
 176.682 +}
 176.683 +
 176.684 +#afui .header{
 176.685 +    background:#0088D1;
 176.686 +    border:none;
 176.687 +    border-bottom:1px solid #0088D1;
 176.688 +    color:white;
 176.689 +}
 176.690 +
 176.691 +#afui  .header h1 {
 176.692 +    text-shadow:none;
 176.693 +    width:45%;
 176.694 +}
 176.695 +
 176.696 +#afui .backButton {
 176.697 +    background:rgba(249,249,249,1);
 176.698 +    color:#fff;
 176.699 +    display: block;
 176.700 +    position: absolute;
 176.701 +    line-height:44px;
 176.702 +    left: 25px;
 176.703 +    text-overflow: ellipsis;
 176.704 +    font-size: 14px;
 176.705 +    padding:0;
 176.706 +    text-shadow: none;
 176.707 +    background-color: transparent;
 176.708 +    border:none;
 176.709 +    border-color:transparent;
 176.710 +    height: 44px;
 176.711 +    top:0;
 176.712 +    border-radius:0;
 176.713 +    box-shadow:none;
 176.714 +    margin: 0;
 176.715 +    padding-left: 0;
 176.716 +    text-align: center;
 176.717 +    width:50px;
 176.718 +    padding:0 !important;
 176.719 +    margin:0 !important;
 176.720 +}
 176.721 +
 176.722 +#afui .backButton::before {
 176.723 +    z-index: -1;
 176.724 +    font-size:22px;
 176.725 +    position: absolute;
 176.726 +    top: 10px;
 176.727 +    left: -20px;
 176.728 +    text-align: center;
 176.729 +    border-radius:0;
 176.730 +    border: none;
 176.731 +    border-color:transparent;
 176.732 +    box-shadow: none;
 176.733 +    -webkit-transform: none;
 176.734 +    transform: none;
 176.735 +    font-family: 'chevron';
 176.736 +    speak: none;
 176.737 +    font-style: normal;
 176.738 +    font-weight: normal;
 176.739 +    font-variant: normal;
 176.740 +    text-transform: none;
 176.741 +    line-height: 1;
 176.742 +    -webkit-font-smoothing: antialiased;
 176.743 +    content: "\f054";
 176.744 +    -webkit-transform:rotate(180deg);
 176.745 +    transform:rotate(180deg);
 176.746 +    background-color: transparent;
 176.747 +}
 176.748 +
 176.749 +#afui header .backButton {
 176.750 +    position:absolute;
 176.751 +}
 176.752 +
 176.753 +#afui  .footer {
 176.754 +     background:#0088D1;
 176.755 +    border:none;
 176.756 +    border-top:1px solid #0088D1;
 176.757 +    box-shadow:none;
 176.758 +}
 176.759 +
 176.760 +#afui footer>a:not(.button) {
 176.761 + 
 176.762 +}
 176.763 +
 176.764 +#afui footer>a.pressed:not(.button) {
 176.765 +    border-radius:0;    
 176.766 +    background:#00AEEF;
 176.767 +}
 176.768 +
 176.769 +#afui footer>a.icon.pressed:not(.button):before {
 176.770 +    color:inherit;
 176.771 +}
 176.772 +
 176.773 +#afui .af-badge {
 176.774 +    border:none;
 176.775 +}
 176.776 +
 176.777 +#afui .list {
 176.778 +    background:inherit;
 176.779 +    color:inherit;
 176.780 +    border-color:#303030;
 176.781 +    font-weight:normal;
 176.782 +}
 176.783 +
 176.784 +#afui .af-badge {
 176.785 +    box-shadow:none;
 176.786 +}
 176.787 +
 176.788 +#afui .list .divider { color:black; }
 176.789 +
 176.790 +#afui .panel, #afui #modalContainer, #afui #modal {
 176.791 +    color:inherit;
 176.792 +    background:inherit;
 176.793 +}
 176.794 +
 176.795 +#afui .panel h2 { color:#0088D1;}
 176.796 +
 176.797 +#afui .collapsed:after {border-top: 6px solid;}
 176.798 +#afui .collapsed:before {border:2px solid;}
 176.799 +#afui .expanded:after {border-bottom: 6px solid;}
 176.800 +#afui .expanded:before {border:2px solid;}
 176.801 +
 176.802 +#afui .collapsed:before,#afui .expanded:before {
 176.803 +    border-color: inherit;
 176.804 +}
 176.805 +
 176.806 +#afui .collapsed:after, #afui .expanded:after{
 176.807 +    border-top-color:inherit;
 176.808 +    border-top-color:inherit;
 176.809 +}
 176.810 +
 176.811 +#afui select, #afui textarea, #afui input[type="text"],
 176.812 +#afui input[type=search], #afui input[type="password"],
 176.813 +#afui input[type="datetime"], #afui input[type="datetime-local"],
 176.814 +#afui input[type="date"], #afui input[type="month"],
 176.815 +#afui input[type="time"], #afui input[type="week"],
 176.816 +#afui input[type="number"], #afui input[type="email"],
 176.817 +#afui input[type="url"], #afui input[type="tel"],
 176.818 +#afui input[type="color"], #afui .input-group {
 176.819 +    background:inherit;
 176.820 +    color:inherit;
 176.821 +}
 176.822 +
 176.823 +#afui input.toggle+label:after { color:inherit; }
 176.824 +
 176.825 +#afui input.toggle+label { border-radius:0; }
 176.826 +
 176.827 +#afui input.toggle+label > span {
 176.828 +    border-radius:0;
 176.829 +    top:0;
 176.830 +    width:27px;
 176.831 +    height:23px;
 176.832 +}
 176.833 +
 176.834 +#afui label { color:inherit; }
 176.835 +
 176.836 +#afui input[type="radio"]:checked+label:before,#afui input[type="checkbox"]:checked+label:before {
 176.837 +    background: #33B5E5;
 176.838 +}
 176.839 +
 176.840 +#afui > #aside_menu,
 176.841 +#afui > #menu.tabletMenu {
 176.842 +    color:white;
 176.843 +    background:#00AEEF;
 176.844 +    border-right:1px solid #006BA4;
 176.845 +}
 176.846 +
 176.847 +#afui #aside_menu .list li,#afui #aside_menu .list .divider,#afui #aside_menu .list li:last-child,
 176.848 +#afui #menu .list li,#afui #menu .list .divider,#afui #menu .list li:last-child {
 176.849 +    border-color: #4CC6F4;
 176.850 +}
 176.851 +
 176.852 +#afui #aside_menu .list .divider,
 176.853 +#afui #menu .list .divider {
 176.854 +    background:#0088D1;
 176.855 +    color:inherit;
 176.856 +    font-size: 1em;
 176.857 +}
 176.858 +
 176.859 +#afui #aside_menu .list > li > a,
 176.860 +#afui #menu .list > li > a {
 176.861 +    background:inherit;
 176.862 +    color:inherit;
 176.863 +    font-size: 1em;
 176.864 +}
 176.865 +
 176.866 +#afui #aside_menu .list,
 176.867 +#afui #menu .list {
 176.868 +    font-weight: normal;
 176.869 +}
 176.870 +
 176.871 +#afui .button {
 176.872 +    border-radius:0;
 176.873 +    text-shadow:none;
 176.874 +}
 176.875 +
 176.876 +#afui .list > li > a:after{
 176.877 +    color:#0088D1;
 176.878 +}
 176.879 +
 176.880 +#afui .button.pressed {
 176.881 +   
 176.882 +}
 176.883 +
 176.884 +#afui .button.previous {
 176.885 +    border:none;
 176.886 +}
 176.887 +
 176.888 +#afui .button.next {
 176.889 +    border:none;   
 176.890 +}
 176.891 +
 176.892 +#afui .button.previous::after {
 176.893 +    color:black;
 176.894 +    z-index: -1;
 176.895 +    font-size:22px;
 176.896 +    position: absolute;
 176.897 +    top: 2px;
 176.898 +    left: -25px;
 176.899 +    text-align: center;
 176.900 +    border-radius:0;
 176.901 +    border: none;
 176.902 +    border-color:transparent;
 176.903 +    box-shadow: none;
 176.904 +    -webkit-transform: none;
 176.905 +    transform: none;
 176.906 +    font-family: 'chevron';
 176.907 +    speak: none;
 176.908 +    font-style: normal;
 176.909 +    font-weight: normal;
 176.910 +    font-variant: normal;
 176.911 +    text-transform: none;
 176.912 +    line-height: 1;
 176.913 +    -webkit-font-smoothing: antialiased;
 176.914 +    content: "\f054";
 176.915 +    -webkit-transform:rotate(180deg);
 176.916 +    transform:rotate(180deg);
 176.917 +    background-color: transparent;
 176.918 +}
 176.919 +
 176.920 +#afui .button.next::after {
 176.921 +    color:black;
 176.922 +    z-index: -1;
 176.923 +    font-size:22px;
 176.924 +    position: absolute;
 176.925 +    top: 6px;
 176.926 +    right: -25px;
 176.927 +    text-align: center;
 176.928 +    border-radius:0;
 176.929 +    border: none;
 176.930 +    border-color:transparent;
 176.931 +    box-shadow: none;
 176.932 +    -webkit-transform: none;
 176.933 +    transform: none;
 176.934 +    font-family: 'chevron';
 176.935 +    speak: none;
 176.936 +    font-style: normal;
 176.937 +    font-weight: normal;
 176.938 +    font-variant: normal;
 176.939 +    text-transform: none;
 176.940 +    line-height: 1;
 176.941 +    -webkit-font-smoothing: antialiased;
 176.942 +    content: "\f054";   
 176.943 +    background-color: transparent;
 176.944 +}
 176.945 +
 176.946 +#afui .afPopup {
 176.947 +    border: solid 1px #33B5E5;
 176.948 +    -webkit-border-radius: 5px;
 176.949 +    border-radius: 5px;
 176.950 +    background:inherit;
 176.951 +    color:inherit;
 176.952 +}
 176.953 +
 176.954 +#afui .afPopup>FOOTER>A{
 176.955 +    width: 120px;
 176.956 +}
 176.957 +
 176.958 +#afui #af_actionsheet {
 176.959 +    background:#0190d6;
 176.960 +    color:inherit;
 176.961 +}
 176.962 +
 176.963 +#afui #af_actionsheet a{
 176.964 +    border-radius:0;
 176.965 +    -webkit-border-radius:0;
 176.966 +    color:black;
 176.967 +    background:white;
 176.968 +    border:none;
 176.969 +    text-shadow:none;
 176.970 +}
 176.971 +
 176.972 +#afui .list {
 176.973 +  margin: 0px;
 176.974 +  padding: 0px;
 176.975 +  margin-bottom: 10px;
 176.976 +  list-style: none;
 176.977 +  background-color: #fff;
 176.978 +  box-sizing: border-box;
 176.979 +  -webkit-box-sizing: border-box;
 176.980 +  
 176.981 +}
 176.982 +#afui .list li {
 176.983 +  display: block;
 176.984 +  list-style: none;
 176.985 +  position: relative;
 176.986 +  padding: 20px 20px 20px 10px;
 176.987 +  border-bottom: 1px solid #ccc;
 176.988 +}
 176.989 +#afui .list li:first-child {
 176.990 +  border-top: 1px solid #ccc;
 176.991 +}
 176.992 +#afui .list > li > a {
 176.993 +  display: block;
 176.994 +  position: relative;
 176.995 +  display: block;
 176.996 +  color: inherit;
 176.997 +  margin: -20px -20px -20px -10px;
 176.998 +  text-decoration: none;
 176.999 +  padding: 20px 20px 20px 10px;
176.1000 +}
176.1001 +#afui .list a .af-badge {
176.1002 +  position: absolute;
176.1003 +  right: 30px;
176.1004 +  top: 48%;
176.1005 +  margin-top: -10px;
176.1006 +}
176.1007 +#afui .list > li > a:after {
176.1008 +  position: absolute;
176.1009 +  right: 8px;
176.1010 +  font-family: 'chevron';
176.1011 +  speak: none;
176.1012 +  font-style: normal;
176.1013 +  font-weight: normal;
176.1014 +  font-variant: normal;
176.1015 +  text-transform: none;
176.1016 +  line-height: 1;
176.1017 +  -webkit-font-smoothing: antialiased;
176.1018 +  content: "\f054";
176.1019 +  top: 50%;
176.1020 +  margin-top: -0.5em;
176.1021 +  color:inherit;
176.1022 +}
176.1023 +#afui .list .divider {
176.1024 +  position: relative;
176.1025 +  top: -1px;
176.1026 +  padding-top: 6px;
176.1027 +  padding-bottom: 6px;
176.1028 +  font-size: 12px;
176.1029 +  font-weight: bold;
176.1030 +  line-height: 18px;
176.1031 +  background-color: #dfe0e2;
176.1032 +  border-top: 1px solid #ccc;
176.1033 +  border-bottom: 1px solid #ccc;
176.1034 +  box-shadow: inset 0 1px 1px rgba(255, 255, 255, 0.4);
176.1035 +  padding-right: 60px;
176.1036 +}
176.1037 +#afui .list.inset {
176.1038 +  border: 1px solid #ccc;
176.1039 +  border-radius: 6px;
176.1040 +  margin: 10px;
176.1041 +}
176.1042 +#afui .list.inset li:first-child {
176.1043 +  border-top: none;
176.1044 +}
176.1045 +#afui .list.inset li:last-child {
176.1046 +  border-bottom: none;
176.1047 +}
176.1048 +#afui select,
176.1049 +#afui textarea,
176.1050 +#afui input[type="text"],
176.1051 +#afui input[type=search],
176.1052 +#afui input[type="password"],
176.1053 +#afui input[type="datetime"],
176.1054 +#afui input[type="datetime-local"],
176.1055 +#afui input[type="date"],
176.1056 +#afui input[type="month"],
176.1057 +#afui input[type="time"],
176.1058 +#afui input[type="week"],
176.1059 +#afui input[type="number"],
176.1060 +#afui input[type="email"],
176.1061 +#afui input[type="url"],
176.1062 +#afui input[type="tel"],
176.1063 +#afui input[type="color"],
176.1064 +#afui .input-group {  
176.1065 +  width: 100%;
176.1066 +  height: 40px;
176.1067 +  padding: 10px;
176.1068 +  margin-bottom: 10px;
176.1069 +  background: #fff;
176.1070 +  border: 1px solid #ccc;
176.1071 +  border-radius: 5px;
176.1072 +  font-size: 14px;
176.1073 +  font-weight: normal;
176.1074 +  -webkit-appearance: none;
176.1075 +  box-sizing: border-box;
176.1076 +}
176.1077 +#afui form {
176.1078 +  position: relative;
176.1079 +}
176.1080 +#afui input[type="radio"],
176.1081 +#afui input[type="checkbox"] {
176.1082 +  display: none;
176.1083 +}
176.1084 +#afui input[type="radio"] + label,
176.1085 +#afui input[type="checkbox"] + label {
176.1086 +  display: inline-block;
176.1087 +  width: 60%;
176.1088 +  float: right;
176.1089 +  position: relative;
176.1090 +  text-align: left;
176.1091 +  padding: 10px 0 0 0;
176.1092 +}
176.1093 +#afui input[type="radio"]:not(.toggle) + label:before {
176.1094 +  background-color: #fafafa;
176.1095 +  border: 1px solid #cacece;
176.1096 +  border-radius: 50px;
176.1097 +  display: block;
176.1098 +  position: absolute;
176.1099 +  width: 1.3em;
176.1100 +  height: 1.3em;
176.1101 +  content: '';
176.1102 +  margin-right: 5px;
176.1103 +  top: 8px;
176.1104 +  margin-left: -25px;
176.1105 +}
176.1106 +#afui input[type="radio"]:checked + label:before {
176.1107 +  background-color: #000000;
176.1108 +}
176.1109 +#afui input[type="checkbox"] + label:before {
176.1110 +  background-color: #fafafa;
176.1111 +  border: 1px solid #cacece;
176.1112 +  border-radius: 3px;
176.1113 +  display: block;
176.1114 +  position: absolute;
176.1115 +  top: 8px;
176.1116 +  left: -25px;
176.1117 +  width: 1.3em;
176.1118 +  height: 1.3em;
176.1119 +  content: " ";
176.1120 +}
176.1121 +#afui input[type="checkbox"]:checked + label:before {
176.1122 +  content: '\00a0\2714';
176.1123 +  padding: 0px;
176.1124 +  display: inline-block;
176.1125 +}
176.1126 +#afui input[type="radio"]:after,
176.1127 +#afui input[type="checkbox"]:after {
176.1128 +  visibility: hidden;
176.1129 +  display: block;
176.1130 +  font-size: 0;
176.1131 +  content: " ";
176.1132 +  clear: both;
176.1133 +  height: 0;
176.1134 +}
176.1135 +#afui input[type="search"] {
176.1136 +  border-radius: 20px;
176.1137 +}
176.1138 +#afui label {
176.1139 +  float: left;
176.1140 +  width: 33%;
176.1141 +  font-weight: normal;
176.1142 +  font-size: 14px;
176.1143 +  color: inherit;
176.1144 +  text-align: right;
176.1145 +  padding: 11px 6px;
176.1146 +}
176.1147 +#afui label + select,
176.1148 +#afui label + input[type="radio"],
176.1149 +#afui label + input[type="checkbox"] label + textarea,
176.1150 +#afui label + input[type="text"],
176.1151 +#afui label + input[type=search],
176.1152 +#afui label + input[type="password"],
176.1153 +#afui label + input[type="datetime"],
176.1154 +#afui label + input[type="datetime-local"],
176.1155 +#afui label + input[type="date"],
176.1156 +#afui label + input[type="month"],
176.1157 +#afui label + input[type="time"],
176.1158 +#afui label + input[type="week"],
176.1159 +#afui label + input[type="number"],
176.1160 +#afui label + input[type="email"],
176.1161 +#afui label + input[type="url"],
176.1162 +#afui label + input[type="tel"],
176.1163 +#afui label + input[type="color"],
176.1164 +#afui label + textarea {
176.1165 +  width: 66%;
176.1166 +}
176.1167 +#afui textarea {
176.1168 +  height: auto;
176.1169 +}
176.1170 +#afui .input-group {
176.1171 +  width: auto;
176.1172 +  height: auto;
176.1173 +  padding: 12px;
176.1174 +  overflow: hidden;
176.1175 +}
176.1176 +#afui .input-group input:not([type='button']):not([type='submit']),
176.1177 +#afui .input-group textarea,
176.1178 +#afui .input-group select {
176.1179 +  margin-bottom: 0;
176.1180 +  background-color: transparent;
176.1181 +  border: 0;
176.1182 +  border-bottom: 1px solid #ccc;
176.1183 +  border-radius: 0;
176.1184 +  box-shadow: none;
176.1185 +}
176.1186 +#afui .input-group input:not([type="submit"]):not([type="button"]):last-child,
176.1187 +#afui .input-group textarea:last-child,
176.1188 +#afui .input-group select:last-child {
176.1189 +  border-bottom: none;
176.1190 +}
176.1191 +#afui .input-group input[type=button],
176.1192 +#afui .input-group input[type=submit] {
176.1193 +  margin: 5px;
176.1194 +}
176.1195 +#afui input.toggle + label:before,
176.1196 +#afui input.toggle:checked + label:before {
176.1197 +  content: attr(data-on);
176.1198 +  position: absolute;
176.1199 +  color: #fff;
176.1200 +  left: 5px;
176.1201 +  width: 42px;
176.1202 +  text-align: left;
176.1203 +  z-index: 3;
176.1204 +  top: 3px;
176.1205 +  overflow: hidden;
176.1206 +  background-color: transparent;
176.1207 +  border: none;
176.1208 +  border-radius: 0px;
176.1209 +  text-transform: uppercase;
176.1210 +  display: none;
176.1211 +}
176.1212 +#afui input.toggle:checked + label:before {
176.1213 +  display: block;
176.1214 +}
176.1215 +#afui input.toggle + label:after {
176.1216 +  content: attr(data-off);
176.1217 +  position: absolute;
176.1218 +  color: #505050;
176.1219 +  width: 42px;
176.1220 +  text-align: left;
176.1221 +  z-index: 1;
176.1222 +  top: 2px;
176.1223 +  left: 30px;
176.1224 +  overflow: hidden;
176.1225 +  background-color: transparent;
176.1226 +  border: none;
176.1227 +  border-radius: 0px;
176.1228 +  text-transform: uppercase;
176.1229 +}
176.1230 +#afui input.toggle:checked + label:after {
176.1231 +  display: none;
176.1232 +}
176.1233 +#afui input[type="radio"].toggle:checked + label:before {
176.1234 +  line-height: 1.2em;
176.1235 +}
176.1236 +#afui input.toggle + label {
176.1237 +  position: relative;
176.1238 +  margin: 5px;
176.1239 +  border-radius: 50px;
176.1240 +  display: block;
176.1241 +  height: 24px;
176.1242 +  width: 65px;
176.1243 +  border: 1px solid #ccc;
176.1244 +  left: 33%;
176.1245 +  float: none;
176.1246 +}
176.1247 +#afui input.toggle:checked + label {
176.1248 +  background: #1eb0e9;
176.1249 +  line-height: -1em;
176.1250 +}
176.1251 +#afui input.toggle + label > span {
176.1252 +  display: block;
176.1253 +  width: 28px;
176.1254 +  height: 28px;
176.1255 +  background: #ccc;
176.1256 +  border-radius: 50px;
176.1257 +  z-index: 5;
176.1258 +  top: -2px;
176.1259 +  left: 0px;
176.1260 +  position: absolute;
176.1261 +  transition: transform 100ms linear;
176.1262 +  transform: translate3d(0, 0, 0);
176.1263 +  -webkit-transform: translate3d(0, 0, 0);
176.1264 +  -webkit-transition: -webkit-transform 100ms linear;
176.1265 +}
176.1266 +#afui input.toggle:checked + label > span {
176.1267 +  transform: translate3d(37px, 0, 0);
176.1268 +  -webkit-transform: translate3d(37px, 0, 0);
176.1269 +}
176.1270 +#afui .formGroupHead {
176.1271 +  font-size: 18px;
176.1272 +  font-weight: bold;
176.1273 +  color: inherit;
176.1274 +  margin: 16px 0 8px;
176.1275 +}
176.1276 +
176.1277 +
176.1278 +#afui input[type=button],
176.1279 +#afui input[type=submit], #afui button {
176.1280 +  font-size:inherit;
176.1281 +} 
176.1282 +#afui .button {
176.1283 +    position:relative;
176.1284 +    display:inline-block;
176.1285 +    padding:8px 12px;
176.1286 +    margin:8px 0;
176.1287 +    font-weight:bold;
176.1288 +    color:#000;
176.1289 +    text-align:center;
176.1290 +    vertical-align:top;
176.1291 +    cursor:pointer;
176.1292 +    background-color:#eee;
176.1293 +    border:1px solid #666;
176.1294 +    border-radius:6px;
176.1295 +    /*box-shadow: 0 1px 0 #fff;*/
176.1296 +
176.1297 +    text-decoration: none;
176.1298 +    z-index:2;
176.1299 +}
176.1300 +
176.1301 +/* Active */
176.1302 +#afui .button.pressed { background:#fff; }
176.1303 +
176.1304 +#afui .button.previous {
176.1305 +
176.1306 +    margin-left:16px;
176.1307 +    padding-left:6px;
176.1308 +    border-color:#666 #666 transparent transparent !important;
176.1309 +}
176.1310 +#afui .button.next {
176.1311 +    border-color:#666 transparent #666 #666 !important;
176.1312 +    margin-right:16px;
176.1313 +    padding-right:6px;
176.1314 +}
176.1315 +
176.1316 +
176.1317 +#afui .button.previous::after {
176.1318 +
176.1319 +    z-index:-1;
176.1320 +    content:'';
176.1321 +    position:absolute;
176.1322 +    width:25px; height:25px;
176.1323 +    background-color:inherit;
176.1324 +    top:3px; left:-11px;
176.1325 +    border-radius:5px;
176.1326 +    border:1px solid;
176.1327 +    border-color:transparent transparent inherit transparent;
176.1328 +     -webkit-transform:rotate(45deg); transform:rotate(45deg);
176.1329 +}
176.1330 +#afui .button.next::after {
176.1331 +    z-index:-1;
176.1332 +    content:'';
176.1333 +    position:absolute;
176.1334 +    width:25px; height:25px;
176.1335 +    background-color:inherit;
176.1336 +    top:3px; right:-11px;
176.1337 +    border-radius:5px;
176.1338 +    border:1px solid;
176.1339 +    border-color:transparent transparent transparent transparent;
176.1340 +   -webkit-transform:rotate(45deg); transform:rotate(45deg);
176.1341 +}
176.1342 +
176.1343 +#afui .button.block {   display:block; }
176.1344 +
176.1345 +#afui .button.flat {
176.1346 +    border-radius: 0;
176.1347 +    box-shadow:none;
176.1348 +}
176.1349 +
176.1350 +#afui .header .button-grouped>.button {
176.1351 +    margin:0;
176.1352 +    border-color:#fff;
176.1353 +}
176.1354 +
176.1355 +#afui .button-grouped { 
176.1356 +    display:inline-block;
176.1357 +    margin: 5px;
176.1358 +}
176.1359 +#afui .button-grouped * {
176.1360 +    border-radius:0px;
176.1361 +    float:left;
176.1362 +    border-left:0px solid transparent;
176.1363 +    border-right: 1px solid #666;
176.1364 +    border-bottom: 1px solid #666;
176.1365 +    border-top: 1px solid #666;
176.1366 +    margin:0;
176.1367 +}
176.1368 +#afui .button-grouped > .button:first-child {
176.1369 +    border-left: 1px solid #666;
176.1370 +    border-top-left-radius: 6px;
176.1371 +    border-bottom-left-radius: 6px;
176.1372 +}
176.1373 +#afui .button-grouped > .button:last-child {
176.1374 +    border-top-right-radius: 6px;
176.1375 +    border-bottom-right-radius: 6px;
176.1376 +}
176.1377 +
176.1378 +#afui .button-grouped.flex {
176.1379 +    display: -webkit-box;
176.1380 +    display: -moz-box;
176.1381 +    display: -ms-flexbox;
176.1382 +    display: -webkit-flex;
176.1383 +    display: flex;
176.1384 +}
176.1385 +
176.1386 +#afui .button-grouped.flex > .button {
176.1387 +    -webkit-box-flex: 1;
176.1388 +    -moz-box-flex: 1 auto;
176.1389 +    -webkit-flex: 1 auto;
176.1390 +    -ms-flex: 1 auto;
176.1391 +    flex: 1 auto;
176.1392 +
176.1393 +    white-space: nowrap;
176.1394 +    overflow: hidden;
176.1395 +    text-overflow: ellipsis;
176.1396 +}
176.1397 +
176.1398 +#afui .button-grouped.flex.vertical {
176.1399 +    display: inline-block;
176.1400 +}
176.1401 +
176.1402 +#afui .button-grouped.vertical * {
176.1403 +    border-radius:0px;
176.1404 +    display:block;
176.1405 +    float:none;
176.1406 +    width:100%;
176.1407 +    border-left: 1px solid #666;
176.1408 +    border-right: 1px solid #666;
176.1409 +    border-top: 1px solid #666;
176.1410 +    border-bottom: 0px solid #666;
176.1411 +}
176.1412 +
176.1413 +#afui .button-grouped.vertical > .button:first-child {
176.1414 +    border-top-left-radius: 6px;
176.1415 +    border-top-right-radius: 6px;
176.1416 +    border-bottom-left-radius:0px;
176.1417 +    border-bottom-right-radius:0px;
176.1418 +}
176.1419 +#afui .button-grouped.vertical > .button:last-child {
176.1420 +    border-top-right-radius:0px;
176.1421 +    border-top-left-radius:0px;
176.1422 +    border-bottom-right-radius: 6px;
176.1423 +    border-bottom-left-radius: 6px;
176.1424 +    border-bottom:1px solid #666;
176.1425 +}
176.1426 +
176.1427 +
176.1428 +#afui .button.gray {
176.1429 +    background:#999;
176.1430 +    border-color:#666;
176.1431 +}
176.1432 +
176.1433 +#afui .button.yellow {
176.1434 +    background-color:#F1C222;
176.1435 +    border-color:#999;
176.1436 +}
176.1437 +
176.1438 +#afui .button.red {
176.1439 +    color:#fff;
176.1440 +    text-shadow:0 -1px 0 #666;
176.1441 +    background:#B20000;
176.1442 +    border-color:#666;
176.1443 +}
176.1444 +
176.1445 +#afui .button.green {
176.1446 +    color:#fff;
176.1447 +    text-shadow:0 -1px 0 #666;
176.1448 +    background:#009C0C;
176.1449 +    border-color:#666;
176.1450 +}
176.1451 +
176.1452 +#afui .button.orange {
176.1453 +    color:#fff;
176.1454 +    text-shadow:0 -1px 0 #666;
176.1455 +    background-color:#FF8000;
176.1456 +    border-color:#666;
176.1457 +}
176.1458 +
176.1459 +#afui .button.black {
176.1460 +    color:#fff;
176.1461 +    text-shadow:none;
176.1462 +    background:#000;
176.1463 +    border-color:#666;
176.1464 +}
176.1465 +
176.1466 +#afui .button.slate {
176.1467 +    color:#fff;
176.1468 +    text-shadow:0 -1px 0 #000;
176.1469 +    background:#171F28;
176.1470 +    border-color:#666;
176.1471 +}
176.1472 +
176.1473 +#afui .header .button {
176.1474 +    color: #fff;
176.1475 +    background:none;
176.1476 +    border-color: transparent;
176.1477 +    font-size:12px;
176.1478 +    padding:7px;
176.1479 +    height:32px;
176.1480 +    margin:5px;
176.1481 +    text-overflow: ellipsis;
176.1482 +    white-space: nowrap;
176.1483 +}
176.1484 + 
176.1485 +.header .button.icon:before{
176.1486 +    padding-left:6px;
176.1487 +}
176.1488 + 
176.1489 +#afui .backButton {
176.1490 +    text-overflow: ellipsis;
176.1491 +    white-space: nowrap;
176.1492 +}
176.1493 +
176.1494 +#afui .af-badge {
176.1495 +    position:absolute;
176.1496 +    top:2px; right:2px;
176.1497 +    display:inline-block;
176.1498 +    min-width:20px; max-width:90%; height:20px;
176.1499 +    padding:0 3px;
176.1500 +    background-color:red;
176.1501 +    border-radius:20px;
176.1502 +    
176.1503 +    font-size:12px;
176.1504 +    line-height:19px;
176.1505 +    font-weight:bold;
176.1506 +    
176.1507 +    color:#fff;
176.1508 +    text-overflow:ellipsis;
176.1509 +    text-align:center;
176.1510 +    text-shadow:0 -1px 0 rgba(64,0,0,.6);
176.1511 +}
176.1512 +
176.1513 +#afui .af-badge.br { bottom:2px; right:2px; top:auto; left:auto; }
176.1514 +#afui .af-badge.bl { bottom:2px; left:2px; top:auto; right:auto; }
176.1515 +#afui .af-badge.tl { top:2px; left:2px; right:auto; bottom:auto; }
176.1516 +
176.1517 +
176.1518 +#afui .grid {
176.1519 +  width: 100%;
176.1520 +  overflow:hidden; /* hack to take up height*/
176.1521 +}
176.1522 +#afui .col2,
176.1523 +#afui .col3,
176.1524 +#afui .col1-3,
176.1525 +#afui .col2-3 {
176.1526 +  float: none;
176.1527 +  width: 100%;
176.1528 +}
176.1529 +#afui .grid:after {
176.1530 +  content: '';
176.1531 +  clear: both;
176.1532 +}
176.1533 +@media handheld, only screen and (min-width: 768px) {
176.1534 +  #afui .col2 {
176.1535 +    width: 50%;
176.1536 +    float: left;
176.1537 +  }
176.1538 +  #afui .col3 {
176.1539 +    width: 33.3%;
176.1540 +    float: left;
176.1541 +  }
176.1542 +  #afui .col1-3 {
176.1543 +    width: 33.3%;
176.1544 +    float: left;
176.1545 +  }
176.1546 +  #afui .col2-3 {
176.1547 +    width: 66.6%;
176.1548 +    float: left;
176.1549 +  }
176.1550 +}
176.1551 +/* Bg #33B5E5
176.1552 +
176.1553 +/* Font header #C6C6C6
176.1554 + * reg white-space:
176.1555 +
176.1556 + border 303030
176.1557 + hover : #111
176.1558 +
176.1559 + */
176.1560 +
176.1561 +#afui.android {
176.1562 +    font:14px  'Roboto',sans-serif;
176.1563 +    background:#000;
176.1564 +    color:#fff;
176.1565 +    border-color:#fff;
176.1566 +}
176.1567 +
176.1568 +#afui.android.light {
176.1569 +    background:#FDFDFD;
176.1570 +    color:#000;
176.1571 +}
176.1572 +
176.1573 +#afui.android  .header {
176.1574 +    background:inherit;
176.1575 +    color:inherit;
176.1576 +    border-color:#33B5E5;
176.1577 +}
176.1578 +
176.1579 +#afui.android .header .button {
176.1580 +    color: inherit;
176.1581 +    background:none;
176.1582 +    font-size:14px;
176.1583 +    box-shadow:none;
176.1584 +}
176.1585 +
176.1586 +#afui.android .backButton{
176.1587 +    background: inherit;
176.1588 +    color:inherit;
176.1589 +}
176.1590 +
176.1591 +#afui.android .menuButton:after {
176.1592 +    border-color:white;
176.1593 +}
176.1594 +
176.1595 +#afui.android.light .menuButton:after {
176.1596 +    border-color:black;
176.1597 +}
176.1598 +
176.1599 +#afui.android .footer {
176.1600 +    box-shadow: none;
176.1601 +    background:inherit;
176.1602 +    border-top:2px solid #33B5E5;
176.1603 +    border-bottom:none;
176.1604 +    padding:0;
176.1605 +}
176.1606 +
176.1607 +#afui.android .footer>footer>a:not(.button) {
176.1608 +    color:inherit;
176.1609 +    top:0px;
176.1610 +}
176.1611 +
176.1612 +#afui.android .footer>footer>a.pressed:not(.button) {
176.1613 +    border:0px;
176.1614 +    border-top:4px solid #33B5E5;
176.1615 +    border-radius:0px;
176.1616 +    background:none;
176.1617 +}
176.1618 +
176.1619 +#afui.android .footer>footer>a.icon.pressed:not(.button):before {
176.1620 +    color:inherit;
176.1621 +}
176.1622 +
176.1623 +#afui.android .af-badge {
176.1624 +    border:none;
176.1625 +}
176.1626 +
176.1627 +#afui.android .panel, #afui.android #modalContainer {
176.1628 +    background:inherit;
176.1629 +    color:inherit;
176.1630 +}
176.1631 +
176.1632 +#afui.android .list {
176.1633 +    background:inherit;
176.1634 +    color:inherit;
176.1635 +    border-color:#303030;
176.1636 +}
176.1637 +
176.1638 +#afui.android .list .divider {  color:black; }
176.1639 +
176.1640 +#afui.android .panel h2 { color:inherit; }
176.1641 +
176.1642 +
176.1643 +#afui.android .collapsed:after {border-top: 6px solid;}
176.1644 +#afui.android .collapsed:before {border:2px solid;}
176.1645 +#afui.android .expanded:after {border-bottom: 6px solid;}
176.1646 +#afui.android .expanded:before {border:2px solid;}
176.1647 +
176.1648 +#afui.android .collapsed:before,#afui.android .expanded:before {
176.1649 +    border-color: inherit;
176.1650 +}
176.1651 +
176.1652 +#afui.android .collapsed:after,
176.1653 +#afui.android .expanded:after{
176.1654 +    border-top-color:inherit;
176.1655 +    border-top-color:inherit;
176.1656 +}
176.1657 +
176.1658 +#afui.android .afScrollbar {background:white !important;}
176.1659 +#afui.android.light .afScrollbar {background:black !important;}
176.1660 +
176.1661 +#afui.android select, #afui.android textarea, #afui.android input[type="text"],
176.1662 +#afui.android input[type=search], #afui.android input[type="password"],
176.1663 +#afui.android input[type="datetime"], #afui.android input[type="datetime-local"],
176.1664 +#afui.android input[type="date"], #afui.android input[type="month"],
176.1665 +#afui.android input[type="time"], #afui.android input[type="week"],
176.1666 +#afui.android input[type="number"], #afui.android input[type="email"],
176.1667 +#afui.android input[type="url"], #afui.android input[type="tel"],
176.1668 +#afui.android input[type="color"], #afui.android .input-group {
176.1669 +    background:inherit;
176.1670 +    color:inherit;
176.1671 +}
176.1672 +
176.1673 +#afui.android input[type="range"] {
176.1674 +   -webkit-appearance: none;
176.1675 +background-color: #ccc;
176.1676 +height: 4px;
176.1677 +position: relative;
176.1678 +top: -10px;
176.1679 +margin-top: 15px;
176.1680 +}
176.1681 + 
176.1682 +#afui.android input[type="range"]::-webkit-slider-thumb {
176.1683 +    -webkit-appearance: none;
176.1684 +    position: relative;
176.1685 +    
176.1686 +    z-index: 1;
176.1687 +    width: 11px;
176.1688 +    height: 21px;
176.1689 + 
176.1690 +    -webkit-border-radius: 0;
176.1691 +    -moz-border-radius: 0;
176.1692 +    border-radius: 0;
176.1693 +    background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#ccc), color-stop(100%,#ccc));
176.1694 +    background-image: gradient(linear, left top, left bottom, color-stop(0%,#ccc), color-stop(100%,#ccc));
176.1695 +}
176.1696 +
176.1697 +#afui.android input.toggle+label:after { color:inherit; }
176.1698 +
176.1699 +#afui.android input.toggle+label { border-radius:0; }
176.1700 +
176.1701 +#afui.android input.toggle+label > span {
176.1702 +    border-radius:0;
176.1703 +    top:0;
176.1704 +    width:27px;
176.1705 +    height:23px;
176.1706 +}
176.1707 +
176.1708 +#afui.android label { color:inherit; }
176.1709 +
176.1710 +#afui.android input[type="radio"]:checked+label:before,#afui.android input[type="checkbox"]:checked+label:before {
176.1711 +    background: #33B5E5;
176.1712 +}
176.1713 +
176.1714 +#afui.android > #aside_menu,
176.1715 +#afui.android > #menu {
176.1716 +    border-right:1px solid rgba(128,128,128,0.5);
176.1717 +    color:inherit;
176.1718 +    background:inherit;
176.1719 +}
176.1720 +
176.1721 +#afui.android #aside_menu .list li,
176.1722 +#afui.android #menu .list li {
176.1723 +    box-shadow:none;
176.1724 +    border-color:#ccc;
176.1725 +}
176.1726 +
176.1727 +#afui.android #aside_menu .list .divider,
176.1728 +#afui.android #menu .list .divider {
176.1729 +    background:inherit;
176.1730 +    color:inherit;
176.1731 +    font-size: 1em;
176.1732 +}
176.1733 +
176.1734 +#afui.android #aside_menu .list > li > a,
176.1735 +#afui.android #menu .list > li > a {
176.1736 +    background:inherit;
176.1737 +    color:inherit;
176.1738 +    font-size: 1em;
176.1739 +}
176.1740 +
176.1741 +#afui.android #aside_menu .list,
176.1742 +#afui.android #menu .list {
176.1743 +    font-weight: normal;
176.1744 +}
176.1745 +
176.1746 +#afui.android .button {
176.1747 +    border-radius:0;
176.1748 +    border:none;
176.1749 +    background:#424343;
176.1750 +    border-color:transparent;
176.1751 +    color:inherit;
176.1752 +    text-shadow:none;
176.1753 +    box-shadow: inset 0 1px 0 rgba(255,255,255,.4);
176.1754 +}
176.1755 +
176.1756 +#afui.android.light .button {
176.1757 +    background:#eee;
176.1758 +    border-color:#D1D1D1;
176.1759 +}
176.1760 +
176.1761 +#afui.android .button.pressed,
176.1762 +#afui.android  .header .button-grouped > .button.pressed {
176.1763 +    background:#33B5E5;
176.1764 +    border-color:#33B5E5;
176.1765 +}
176.1766 +
176.1767 +#afui.android .button.previous::after {
176.1768 +    width:20px; height:20px;
176.1769 +    background-color:inherit;
176.1770 +    top:5px; left:-12px;
176.1771 +    border-radius:0;
176.1772 +    box-shadow:none;
176.1773 +    border-color:transparent;
176.1774 +}
176.1775 +
176.1776 +#afui.android .button.next::after {
176.1777 +    width:20px; height:20px;
176.1778 +    background-color:inherit;
176.1779 +    top:5px; right:-12px;
176.1780 +    border-radius:0;
176.1781 +    box-shadow:none;
176.1782 +    border-color:transparent;
176.1783 +}
176.1784 +
176.1785 +#afui.android  .header .button-grouped > .button {
176.1786 +    border-color:#777;
176.1787 +}
176.1788 +
176.1789 +#afui.android .button-grouped * { 
176.1790 +    border:1px solid rgba(255,255,255,.25);
176.1791 +    border-left-width:0;
176.1792 +    box-shadow:none;
176.1793 +}
176.1794 +
176.1795 +#afui.android .button-grouped.vertical * {
176.1796 +    border-left:1px solid rgba(255,255,255,.25);
176.1797 +    border-bottom-width:0;
176.1798 +}
176.1799 +
176.1800 +#afui.android .button-grouped.vertical .button:last-child {
176.1801 +    border-bottom:1px solid rgba(255,255,255,.25);
176.1802 +}
176.1803 +
176.1804 +#afui.android .afPopup {
176.1805 +    border: solid 1px #aaa;
176.1806 +    padding: 0;
176.1807 +    -webkit-border-radius: 0;
176.1808 +    border-radius: 0;
176.1809 +    -webkit-transform:none;
176.1810 +    transform:none;
176.1811 +    -webkit-transition: none;
176.1812 +    transition:none;
176.1813 +    background:inherit;
176.1814 +    background-color:rgba(0,0,0,0.9);
176.1815 +    color:inherit;
176.1816 +}
176.1817 +
176.1818 +#afui.android.light .afPopup {
176.1819 +    background-color:rgba(255,255,255,0.9);
176.1820 +}
176.1821 +
176.1822 +#afui.android .afPopup>HEADER{
176.1823 +    font-weight:normal;
176.1824 +    font-size:20px;    
176.1825 +    text-align:left;
176.1826 +    padding:10px;
176.1827 +}
176.1828 +
176.1829 +#afui.android .afPopup>DIV{
176.1830 +    font-size:14px;
176.1831 +    text-align:left;
176.1832 +    padding:10px;
176.1833 +    margin:0;
176.1834 +    border-top: solid 1px #aaa;
176.1835 +    border-bottom: solid 1px #aaa;
176.1836 +}
176.1837 +
176.1838 +#afui.android .afPopup>FOOTER {
176.1839 +    background:#bbb;
176.1840 +}
176.1841 +
176.1842 +#afui.android .afPopup>FOOTER>A, #afui.android.light .afPopup>FOOTER>A {
176.1843 +    background:#fff;
176.1844 +    color:#111;
176.1845 +}
176.1846 +
176.1847 +#afui.android .afPopup>FOOTER>A#cancel{
176.1848 +    margin-left:10px;
176.1849 +    width:120px;
176.1850 +}
176.1851 +
176.1852 +#afui.android .afPopup>FOOTER>A#action{
176.1853 +    margin-right:10px;
176.1854 +    width:120px;
176.1855 +}
176.1856 +
176.1857 +#afui.android .afPopup>FOOTER>A.center{
176.1858 +    margin:8px;
176.1859 +}
176.1860 +
176.1861 +#afui.android #af_actionsheet {
176.1862 +    border: #666 1px solid;
176.1863 +    border-top: #33B5E5 3px solid;
176.1864 +    background:#555;
176.1865 +    color:inherit;
176.1866 +    margin:-20px 20px 0 20px;
176.1867 +    padding:0px;
176.1868 +}
176.1869 +
176.1870 +#afui.android.light #af_actionsheet {
176.1871 +    border: #bbb 1px solid;
176.1872 +    border-top: #33B5E5 3px solid;
176.1873 +    background:#bbb;
176.1874 +}
176.1875 +
176.1876 +#afui.android #af_actionsheet a{
176.1877 +    border-radius:0;
176.1878 +    -webkit-border-radius:0;
176.1879 +    border:0px solid #777;
176.1880 +    background:#424343;
176.1881 +    color:inherit;
176.1882 +    line-height: 50px;
176.1883 +    margin-bottom: 1px;
176.1884 +}
176.1885 +
176.1886 +#afui.android.light #af_actionsheet a{
176.1887 +    background:#fff;
176.1888 +}
176.1889 +
176.1890 +#afui.android #af_actionsheet a.cancel{
176.1891 +    margin-bottom: 0px;
176.1892 +}
176.1893 +
176.1894 +/* Bg #00ABA9
176.1895 +
176.1896 +/* Font header #C6C6C6
176.1897 + * reg white-space:
176.1898 +
176.1899 + border 303030
176.1900 + hover : #111
176.1901 +
176.1902 + */
176.1903 +@-ms-viewport{
176.1904 +  width: device-width;
176.1905 +}
176.1906 +@font-face {
176.1907 +  font-family: 'win8back';
176.1908 +  src: url(data:application/x-font-woff;charset=utf-8;base64,d09GRk9UVE8AAARUAAsAAAAABmgAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABDRkYgAAABCAAAAS4AAAGZpdvO1kZGVE0AAAI4AAAAGgAAABxnmGDwR0RFRgAAAlQAAAAdAAAAIAAwAARPUy8yAAACdAAAAEsAAABgL9zcQGNtYXAAAALAAAAAOgAAAVLgE/LMaGVhZAAAAvwAAAAuAAAANvx5/t1oaGVhAAADLAAAAB4AAAAkBBD/5GhtdHgAAANMAAAADAAAAAwEAAACbWF4cAAAA1gAAAAGAAAABgADUABuYW1lAAADYAAAAOgAAAGPgxEkPHBvc3QAAARIAAAADAAAACAAAwAAeJxtTj1PAkEUnD0WQbwAEomYnEdlDxbGQu0Ua+2sULFAEhIEY0WiNJisITE5G2lo6Iw1/gULKxMTSypLCz+2UMe7A6+ymTczb2bfCkgJIcTkSbm6vLe7X4EwILCm5w1th3RGKjOkTGnHMLedolIBMSOqoh3dCFtoJSwgaaE9bSFqicsUpPdGFAnMIntcLa/ncjl3bLjj70xwDhBtcY6Q1zDwIRD/dPRRmrgo3BK1wRbZcRnrHqsH8h/PD49qQTfwsvyxTyGJZt8mDp6HY/Bls18krxf8RY9s7Qw96HlecQy+9BajiB92a1nyceWGYuL7zf3yw5RB3oWeyPz72QRxeL9KXi1Jstt9UWRtkCQ6m3kXCq8eWyRKpYwKx5VuyC9HO5G4dmZUWpmxXzJhtKEAAHicY2BgYGQAgjO2i86D6LNr4wVgNABJKQZOAAB4nGNgZGBg4ANiCQYQYGJgBEIQyQLmMQAABGAANQAAAHicY2BmYmCcwMDKwMHow5jGwMDgDqW/MkgytDAwMDGwMjPAgQCCyRCQ5prC4PCA4QMD44P/Dxj0GB8wKDQwMDDCFSgAISMAEEIMHwB4nGNgYGBmgGAZBkYGEPAB8hjBfBYGAyDNAYRMIIkHDB8Y/v9HZikwCjBBdYEBIxsDMndEAgDJXAiuAAB4nGNgZGBgAGK+Bx4V8fw2Xxm4mRhA4OzaeAEE/f8BEwPjAyCXgwEsDQAU3gn7AAB4nGNgZGBgfPD/AYMeEwMDwz8GIAkUQQHMAG3nA/YAAAIAAAACAAACAAAAAAAAUAAAAwAAeJx9jjFOw0AQRZ8TJ4BACFHQ0KxEiWzZRomiHMAHSJHeiVaWRWRLm0QpuActZ6DlGByAM3AEvsPQUGSl0b79+2fmA1e8EtGfiHNujQec8Wg85IEX41ied+MRl3waj6V/yxnFF1Jujl09D7jm3nhIyZNxLM+b8Yg7PozH0r840NAyY0XFmmc4NO1sVa1FCzw1ezb6Cnr6er+pBCWdWnbHO8jhcRSkZLrnqv8jf9UpCRNVIV+ucJRduyu7UHtXpJmbu7/FwmkySYosl+lEvKUWB7Yy9HGchvYRWPqwbbrW5Wl2qv0H0Z06yHicY2BmwAsAAH0ABA==) format('woff'),
176.1909 +     url(data:application/x-font-ttf;charset=utf-8;base64,AAEAAAANAIAAAwBQRkZUTWeYYPAAAAWMAAAAHEdERUYAMgAGAAAFbAAAACBPUy8yL7rcHwAAAVgAAABWY21hcOAV89MAAAHEAAABUmdhc3D//wADAAAFZAAAAAhnbHlmEDC/5gAAAyQAAAB0aGVhZPx5/t0AAADcAAAANmhoZWEEEP/mAAABFAAAACRobXR4BKoAAgAAAbAAAAAUbG9jYQAsADoAAAMYAAAADG1heHAASgAcAAABOAAAACBuYW1lgxEkPAAAA5gAAAGPcG9zdJtVPjcAAAUoAAAAPAABAAAAAQAAWPDPKV8PPPUACwIAAAAAAM2tXxAAAAAAza1fEAAA/+ACAAHgAAAACAACAAAAAAAAAAEAAAHg/+AALgIAAAD+AAIAAAEAAAAAAAAAAAAAAAAAAAAFAAEAAAAFABkAAwAAAAAAAgAAAAEAAQAAAEAAAAAAAAAAAQIAAZAABQAIAUwBZgAAAEcBTAFmAAAA9QAZAIQAAAIABQMAAAAAAAAAAAAAEAAAAAAAAAAAAAAAUGZFZABA4ADwAAHg/+AALgHgACCAAAABAAAAAAAAAgAAAAAAAAAAqgAAAgAAAgAAAAAAAAADAAAAAwAAABwAAQAAAAAATAADAAEAAAAcAAQAMAAAAAgACAACAAAAAOAA8AD//wAAAADgAPAA//8AACADEAQAAQAAAAAAAAAAAAABBgAAAQAAAAAAAAABAgAAAAIAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALAA6AAMAAv/iAf4B3gAHAA8AGAAAACIGFBYyNjQCIiY0NjIWFCU3IwcXMyczNQFp0pWV0pWgvIaGvIb+8Gtkj49ka84B3pXSlZXS/rOGvIaGvIFrjo5rRgAAAAABAAD/4AIAAeAAAgAAEQEhAgD+AAHg/gAAAAAAAAAMAJYAAQAAAAAAAQAIABIAAQAAAAAAAgAHACsAAQAAAAAAAwAjAHsAAQAAAAAABAAIALEAAQAAAAAABQALANIAAQAAAAAABgAIAPAAAwABBAkAAQAQAAAAAwABBAkAAgAOABsAAwABBAkAAwBGADMAAwABBAkABAAQAJ8AAwABBAkABQAWALoAAwABBAkABgAQAN4AdwBpAG4AOABiAGEAYwBrAAB3aW44YmFjawAAUgBlAGcAdQBsAGEAcgAAUmVndWxhcgAARgBvAG4AdABGAG8AcgBnAGUAIAAyAC4AMAAgADoAIAB3AGkAbgA4AGIAYQBjAGsAIAA6ACAANgAtADUALQAyADAAMQAzAABGb250Rm9yZ2UgMi4wIDogd2luOGJhY2sgOiA2LTUtMjAxMwAAdwBpAG4AOABiAGEAYwBrAAB3aW44YmFjawAAVgBlAHIAcwBpAG8AbgAgADEALgAwAABWZXJzaW9uIDEuMAAAdwBpAG4AOABiAGEAYwBrAAB3aW44YmFjawAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAEAAgECAQMHdW5pRTAwMAd1bmlGMDAwAAAAAf//AAIAAQAAAA4AAAAYAAAAAAACAAEAAwAEAAEABAAAAAIAAAAAAAEAAAAAzD2izwAAAADNrV8QAAAAAM2tXxA=) format('truetype');
176.1910 +  font-weight: normal;
176.1911 +  font-style: normal;
176.1912 +}
176.1913 +
176.1914 +
176.1915 +#afui.win8 {
176.1916 +    font:14px  "Segoe UI Semilight", "HelveticaNeue-light", Helvetica, Arial, sans-serif;
176.1917 +  font-size:14px;
176.1918 +    background-color:#000;
176.1919 +    color:#fff;
176.1920 +}
176.1921 +
176.1922 +#afui.win8.light {
176.1923 +    background:#fff;
176.1924 +    color:#000;
176.1925 +}
176.1926 +
176.1927 +#afui.win8 .header .button {
176.1928 +    color: inherit;
176.1929 +    border-color:transparent;
176.1930 +    font-size:14px;
176.1931 +}
176.1932 +
176.1933 +
176.1934 +
176.1935 +#afui.win8 .backButton.pressed {
176.1936 +    background:inherit;
176.1937 +}
176.1938 +
176.1939 +#afui.win8 .backButton {
176.1940 +  color:inherit;
176.1941 +  background:inherit;
176.1942 +  margin:0;
176.1943 +  font-family: 'win8back';
176.1944 +  width:0px;
176.1945 +  height:0px;
176.1946 +  font-style: normal;
176.1947 +  font-weight: normal;
176.1948 +  font-variant: normal;
176.1949 +  text-transform: none;
176.1950 +  line-height: 1;
176.1951 +  padding:0px;
176.1952 +  margin:0px;
176.1953 +  border:none;
176.1954 +  position:absolute;
176.1955 +  left:-185px;
176.1956 +  -webkit-font-smoothing: antialiased;
176.1957 +}
176.1958 +
176.1959 +#afui.win8 .backButton::before {
176.1960 +  content: "\e000";
176.1961 +  font-size:30px;
176.1962 +  position:absolute;
176.1963 +  top:10px;
176.1964 +  right:-225px;
176.1965 +  left:auto;
176.1966 +  color:inherit;
176.1967 +  font-family:inherit;
176.1968 +  -webkit-transform:none;
176.1969 +  transform:none;
176.1970 +}
176.1971 +
176.1972 +#afui.win8 .header h1 {
176.1973 +    text-align: left;
176.1974 +    color:inherit;
176.1975 +}
176.1976 +
176.1977 +#afui.win8 .header{
176.1978 +    border:0px;
176.1979 +    background: inherit;
176.1980 +    border-bottom:inherit;
176.1981 +    color:inherit;
176.1982 +}
176.1983 +
176.1984 +#afui.win8 .footer {
176.1985 +    padding:0px;
176.1986 +    background:inherit;
176.1987 +    text-align: center;
176.1988 +    height:65px;
176.1989 +    background:rgba(33,32,33,.9);
176.1990 +    border-top:none;
176.1991 +}
176.1992 + 
176.1993 +#afui.win8.light .footer{
176.1994 +    background:#F2F2F2;
176.1995 +    color:black;
176.1996 +}
176.1997 +
176.1998 +#afui.win8 .footer>footer>a:not(.button) {
176.1999 +  position: relative;
176.2000 +  width: 56px !important;
176.2001 +  height: 56px;
176.2002 +  display: inline-block;
176.2003 +  font: normal 9px/85px Segoe WP, Segoe UI, Verdana, Helvetica, Sans-Serif;
176.2004 +  text-decoration: none;
176.2005 +  color: inherit;
176.2006 +  text-align: center;
176.2007 +  text-shadow: 0 0 rgba(0, 0, 0, 0);
176.2008 +  overflow: hidden;
176.2009 +  background:inherit;
176.2010 +  -webkit-backface-visibility: hidden;
176.2011 +  -webkit-perspective: 1000;
176.2012 +}
176.2013 +
176.2014 +#afui.win8.light .footer>footer>a:not(.button) {
176.2015 +  text-shadow: 0 0 rgba(0, 0, 0, 0);  
176.2016 +}
176.2017 +
176.2018 +#afui.win8 .footer>footer>a.icon.pressed:not(.button):before {
176.2019 +    background-color: #00ABA9;
176.2020 +}
176.2021 +
176.2022 +#afui.win8 .footer>footer>a.icon:not(.button):before {
176.2023 +    top: 0px;
176.2024 +    left: 10px;
176.2025 +    font-size:19px;
176.2026 +    width:auto;
176.2027 +    padding: 5px;
176.2028 +    border: 3px solid #fff;
176.2029 +    border-radius: 20px;
176.2030 +}
176.2031 +
176.2032 +#afui.win8.light .footer>footer>a.icon:not(.button):before {
176.2033 +    border: 3px solid #000;
176.2034 +}
176.2035 +
176.2036 +#afui.win8 .footer>footer>a:not(:last-of-type):not(.button){
176.2037 +    border:none;
176.2038 +}
176.2039 +
176.2040 +#afui.win8 .af-badge {
176.2041 +    border:none;
176.2042 +}
176.2043 +
176.2044 +#afui.win8 #content,#afui.win8 #content > .panel {
176.2045 +    background:inherit;
176.2046 +    color:inherit;
176.2047 +}
176.2048 +
176.2049 +#afui.win8 .list {
176.2050 +    background:inherit;
176.2051 +    color:inherit;
176.2052 +    border-color:#303030;
176.2053 +}
176.2054 +
176.2055 +#afui.win8 .list .divider,  #afui.win8 #menu.tabletMenu .list .divider  {
176.2056 +    background:#00ABA9;
176.2057 +    padding:5px;
176.2058 +    display:inline;
176.2059 +    font-size:16px;
176.2060 +    font-weight:normal;
176.2061 +    border-top:none;
176.2062 +    border-bottom:none;
176.2063 +    color:inherit;
176.2064 +}
176.2065 +
176.2066 +#afui.win8 .list li {
176.2067 +    border-top:none;
176.2068 +    border-bottom:none;
176.2069 +    font-size:20px;
176.2070 +}
176.2071 +
176.2072 +#afui.win8 .panel h2 {
176.2073 +    color:inherit;
176.2074 +    font-weight:normal;
176.2075 +    font-size:34px;
176.2076 +    line-height:34px;
176.2077 +    height:auto;
176.2078 +}
176.2079 +
176.2080 +#afui.win8 .collapsed:after {border-top: 6px solid;}
176.2081 +#afui.win8 .collapsed:before {border:2px solid;}
176.2082 +#afui.win8 .expanded:after {border-bottom: 6px solid;}
176.2083 +#afui.win8 .expanded:before {border:2px solid;}
176.2084 +
176.2085 +#afui.win8 .collapsed:before,#afui.win8 .expanded:before {
176.2086 +    border-color: inherit;
176.2087 +}
176.2088 +
176.2089 +#afui.win8 .collapsed:after,
176.2090 +#afui.win8 .expanded:after{
176.2091 +    border-top-color:inherit;
176.2092 +    border-top-color:inherit;
176.2093 +}
176.2094 +
176.2095 +#afui.win8 .afScrollbar {background:white !important;}
176.2096 +#afui.win8.light .afScrollbar {background:black !important;}
176.2097 +
176.2098 +#afui.win8 select, #afui.win8 textarea, #afui.win8 input[type="text"], #afui.win8 input[type="search"], #afui.win8 input[type="password"], #afui.win8 input[type="datetime"], #afui.win8 input[type="datetime-local"], #afui.win8 input[type="date"], #afui.win8 input[type="month"], #afui.win8 input[type="time"], #afui.win8 input[type="week"], #afui.win8 input[type="number"], #afui.win8 input[type="email"], #afui.win8 input[type="url"], #afui.win8 input[type="tel"], #afui.win8 input[type="color"], #afui.win8 .input-group {
176.2099 +    background:black;
176.2100 +    color:inherit;
176.2101 +}
176.2102 +
176.2103 +#afui.win8.light select, #afui.win8.light textarea, #afui.win8.light input[type="text"], #afui.win8.light input[type="search"], #afui.win8.light input[type="password"], #afui.win8.light input[type="datetime"], #afui.win8.light input[type="datetime-local"], #afui.win8.light input[type="date"], #afui.win8.light input[type="month"], #afui.win8.light input[type="time"], #afui.win8.light input[type="week"], #afui.win8.light input[type="number"], #afui.win8.light input[type="email"], #afui.win8.light input[type="url"], #afui.win8.light input[type="tel"], #afui.win8.light input[type="color"], #afui.win8.light .input-group {
176.2104 +    background:white;
176.2105 +}
176.2106 +
176.2107 +#afui.win8 input.toggle+label:after {
176.2108 +    color:inherit;
176.2109 +}
176.2110 +
176.2111 +#afui.win8 input.toggle+label {
176.2112 +    border-radius:0;
176.2113 +}
176.2114 +
176.2115 +#afui.win8 input.toggle:checked+label {
176.2116 +    background:#00ABA9;
176.2117 +}
176.2118 +
176.2119 +#afui.win8 input.toggle+label > span {
176.2120 +    border-radius:0;
176.2121 +    top:0;
176.2122 +    width:27px;
176.2123 +    height:23px;
176.2124 +}
176.2125 +
176.2126 +#afui.win8 input[type="radio"]:checked+label:before,#afui.win8 input[type="checkbox"]:checked+label:before {
176.2127 +    background: #00ABA9;
176.2128 +}
176.2129 +
176.2130 +#afui.win8 > #menu {
176.2131 +  border-right:1px solid rgba(128,128,128,0.5);
176.2132 +    color:inherit;
176.2133 +    background:inherit;
176.2134 +}
176.2135 +
176.2136 +#afui.win8 > #aside_menu {
176.2137 +  border-left:1px solid rgba(128,128,128,0.5);
176.2138 +  color:inherit;
176.2139 +  background:inherit;
176.2140 +  border-right:0;
176.2141 +}
176.2142 +
176.2143 +#afui.win8 #menu .list .divider {
176.2144 +    padding:4px;
176.2145 +    line-height:30px;
176.2146 +    margin-left:10px;
176.2147 +}
176.2148 +
176.2149 +#afui.win8 #menu .list {
176.2150 +    font-weight: normal;
176.2151 +}
176.2152 +
176.2153 +#afui.win8 #menu .list li,#afui.win8 #menu .list .divider {
176.2154 +    box-shadow:none;
176.2155 +}
176.2156 +
176.2157 +#afui.win8 .button {
176.2158 +    border-radius:0;
176.2159 +    border:none;
176.2160 +    background:inherit;
176.2161 +    border:3px solid #fff;
176.2162 +    color:inherit;
176.2163 +    text-shadow:none;
176.2164 +    box-shadow:none;
176.2165 +}
176.2166 +
176.2167 +#afui.win8.light .button {
176.2168 +    border:3px solid #000;
176.2169 +}
176.2170 +
176.2171 +#afui.win8 .button.pressed {
176.2172 +    background:#00ABA9;
176.2173 +}
176.2174 +
176.2175 +#afui.win8 .button.next, #afui.win8 .button.previous {
176.2176 +    border-color: #fff !important;
176.2177 +}
176.2178 +#afui.win8 .button.next::after, #afui.win8 .button.previous::after{
176.2179 +    border:none;    
176.2180 +}
176.2181 +
176.2182 +#afui.win8 .button-grouped > .button{
176.2183 +    border:3px solid #fff;
176.2184 +    border-right:0;
176.2185 +}
176.2186 +
176.2187 +#afui.win8 .button-grouped > .button:last-child {
176.2188 +    border-right:3px solid #fff;
176.2189 +}
176.2190 +
176.2191 +#afui.win8 .button-grouped > .button:first-child, 
176.2192 +#afui.win8 .button-grouped > .button:last-child {
176.2193 +    border-radius:0; 
176.2194 +}
176.2195 +
176.2196 +#afui.win8 .button-grouped.vertical >.button{
176.2197 +    border:3px solid #fff;
176.2198 +    border-bottom:0;
176.2199 +}
176.2200 +
176.2201 +#afui.win8 .button-grouped.vertical > .button:last-child {
176.2202 +    border-bottom:3px solid #fff;
176.2203 +}
176.2204 +
176.2205 +#afui.win8 .header .button-grouped > .button{
176.2206 +    border-color: #fff;
176.2207 +}
176.2208 +
176.2209 +#afui.win8  .header .button-grouped > .button.pressed{
176.2210 +    background:#00ABA9;
176.2211 +}
176.2212 +
176.2213 +#afui.win8.light .button-grouped > .button, 
176.2214 +#afui.win8.light .button-grouped.vertical > .button, 
176.2215 +#afui.win8.light .header .button-grouped > .button{
176.2216 +    border-color: #111;
176.2217 +}
176.2218 +
176.2219 +/** 
176.2220 + * code specific to WP8
176.2221 + */
176.2222 +@media handheld, only screen and (max-width: 768px){
176.2223 +  #afui.win8 #menu {
176.2224 +    display: none;
176.2225 +    position: absolute;
176.2226 +    left: 0;
176.2227 +    bottom: 0;
176.2228 +    z-index: 1000;
176.2229 +    width:100%;
176.2230 +    height: 150px;
176.2231 +    font-size:20px;
176.2232 +    top:auto;
176.2233 +    background:inherit;
176.2234 +    color:inherit;
176.2235 +    -webkit-transition-timing-function: linear;
176.2236 +    transition-timing-function: linear;
176.2237 +    -webkit-transform:translate3d(0,150px,0);
176.2238 +    transform:translate3d(0,150px,0);
176.2239 +  }
176.2240 +  #afui.win8 .hasMenu,#afui.win8 .hasMenu.on{
176.2241 +
176.2242 +   -webkit-transform:translate3d(0,0,0);
176.2243 +    transform:translate3d(0,0,0);
176.2244 +  }
176.2245 +  #afui.win8 .header #menubadge {
176.2246 +    display:none;
176.2247 +  }
176.2248 +}
176.2249 +
176.2250 +#afui.win8 .afPopup {
176.2251 +    width: 100%;
176.2252 +    border: solid 0px #72767b;
176.2253 +    left:0px !important;
176.2254 +    -webkit-border-radius: 0;
176.2255 +    border-radius: 0;
176.2256 +    -webkit-transform:none;
176.2257 +    transform:none;
176.2258 +    -webkit-transition: none;
176.2259 +    transition:none;
176.2260 +    top: 0 !important;
176.2261 +    background:#222;
176.2262 +    color:inherit;
176.2263 +    padding:15px;
176.2264 +}
176.2265 +
176.2266 +#afui.win8.light .afPopup {
176.2267 +    background:#eee;
176.2268 +}
176.2269 +
176.2270 +#afui.win8 .afPopup>HEADER{
176.2271 +    font-size:20px;
176.2272 +}
176.2273 +
176.2274 +#afui.win8 .afPopup>DIV{
176.2275 +    font-size:16px;
176.2276 +    padding:10px 0;
176.2277 +    margin:0;
176.2278 +}
176.2279 +
176.2280 +#afui.win8 .afPopup>FOOTER{
176.2281 +    width:100%;
176.2282 +    text-align:left;    
176.2283 +    display:block !important;
176.2284 +}
176.2285 +
176.2286 +#afui.win8 .afPopup>FOOTER>A#cancel{
176.2287 +    float:left;
176.2288 +    min-width:100px;
176.2289 +}
176.2290 +
176.2291 +#afui.win8 .afPopup>FOOTER>A#action{
176.2292 +    float:left;
176.2293 +    min-width:100px;
176.2294 +    margin-left:10px;
176.2295 +}
176.2296 +
176.2297 +#afui.win8 .afPopup>FOOTER>A.center{
176.2298 +    width:auto;
176.2299 +}
176.2300 +
176.2301 +#afui.win8 #af_actionsheet {
176.2302 +    background:#aaa;
176.2303 +    color:black;
176.2304 +}
176.2305 +
176.2306 +#afui.win8 #af_actionsheet a{
176.2307 +    border-radius:0;
176.2308 +    -webkit-border-radius:0;
176.2309 +    border:0px solid black;
176.2310 +    background-color:transparent;
176.2311 +    font-weight:normal;
176.2312 +    color:black;
176.2313 +    box-shadow: 0px 1px 1px rgba(255,255,255,0);
176.2314 +}
176.2315 +
176.2316 +#afui.win8 #menu .list > li > a {
176.2317 +    color:inherit;
176.2318 +}
176.2319 +
176.2320 +@media handheld, only screen and (min-width: 768px){
176.2321 +
176.2322 +    #afui.win8 .footer footer #metroMenu {
176.2323 +        display:none;
176.2324 +    }
176.2325 +    #afui.win8 .footer {
176.2326 +        -webkit-transform:translate3d(0,0,0);
176.2327 +        transform:translate(0,0);
176.2328 +    }
176.2329 +    #afui.win8 #menu  {
176.2330 +        background:inherit;
176.2331 +    color:inherit;
176.2332 +    font-size:18px;
176.2333 +    left:0;
176.2334 +    top:0;
176.2335 +    width:200px;
176.2336 +    }
176.2337 +    #afui.win8 #menu .list > li > a:after{
176.2338 +        margin-top:-11px;
176.2339 +    }
176.2340 +}
176.2341 +
176.2342 +
176.2343 +#afui.win8 input[type="range"] {
176.2344 +   -webkit-appearance: none;
176.2345 +   -webkit-appearance: none;
176.2346 +background-color: #ccc;
176.2347 +height: 4px;
176.2348 +position: relative;
176.2349 +top: -10px;
176.2350 +margin-top: 15px;
176.2351 +
176.2352 +}
176.2353 + 
176.2354 +#afui.win8 input[type="range"]::-webkit-slider-thumb {
176.2355 +    -webkit-appearance: none;
176.2356 +    position: relative;    
176.2357 +    z-index: 1;
176.2358 +    width: 15px;
176.2359 +    height: 15px;
176.2360 +    
176.2361 +    background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#ccc), color-stop(100%,#ccc));
176.2362 +    background-image: gradient(linear, left top, left bottom, color-stop(0%,#ccc), color-stop(100%,#ccc));
176.2363 +}
176.2364 +
176.2365 +#afui.bb {
176.2366 +    font-family: "Slate Pro",Slate,"Myriad Pro","BBAlpha Sans",Helvetica;
176.2367 +    font-size: 12pt;
176.2368 +}
176.2369 +
176.2370 +#afui.bb .header {
176.2371 +    background:#00609E;
176.2372 +    background:-ms-linear-gradient(65deg, #00609E 0%,#00AFEE 100%);
176.2373 +    background:-webkit-gradient(linear, left bottom, right top, color-stop(0%,#00609E), color-stop(100%,#00AFEE));
176.2374 +    background:-webkit-linear-gradient(65deg, #00609E 0%,#00AFEE 100%);
176.2375 +    background:linear-gradient(65deg, #00609E 0%,#00AFEE 100%);
176.2376 +    border-style:solid;
176.2377 +    border-width:1px;
176.2378 +    border-color:#009CE1 transparent #004E92 transparent;
176.2379 +}
176.2380 +
176.2381 +#afui.bb .header h1 {
176.2382 +    text-shadow:rgba(0,0,0,0.8) 0 1px 0;
176.2383 +    font-weight:normal;
176.2384 +}
176.2385 +
176.2386 +#afui.bb .list {
176.2387 +    font-weight: normal;
176.2388 +}
176.2389 +
176.2390 +#afui.bb .backButton {
176.2391 +    display: block;
176.2392 +    position: absolute;
176.2393 +    line-height:60px;
176.2394 +    left: 5px;
176.2395 +    text-overflow: ellipsis;
176.2396 +    font-size: 10px;
176.2397 +    padding: 0;
176.2398 +    color: #fff;
176.2399 +    text-shadow: none;
176.2400 +    background-color: transparent;
176.2401 +    border:none;
176.2402 +    border-color: transparent;
176.2403 +    height: 44px;
176.2404 +    top:0;
176.2405 +    border-radius: 0;
176.2406 +    box-shadow:none;
176.2407 +    margin: 0;
176.2408 +    padding-left: 0;
176.2409 +    text-align: center;
176.2410 +    width:50px;
176.2411 +    padding:0 !important;
176.2412 +    margin:0 !important;
176.2413 +}
176.2414 +
176.2415 +#afui.bb .backButton::before {
176.2416 +    z-index: -1;
176.2417 +    font-size:22px;
176.2418 +    position: absolute;
176.2419 +    top: -15px;
176.2420 +    left: 15px;
176.2421 +    text-align: center;
176.2422 +    border-radius: 0;
176.2423 +    border: none;
176.2424 +    border-color: transparent;
176.2425 +    box-shadow: none;
176.2426 +    -webkit-transform: none;
176.2427 +    transform: none;
176.2428 +    font-family: 'chevron';
176.2429 +    speak: none;
176.2430 +    font-style: normal;
176.2431 +    font-weight: normal;
176.2432 +    font-variant: normal;
176.2433 +    text-transform: none;
176.2434 +    line-height: 1;
176.2435 +    -webkit-font-smoothing: antialiased;
176.2436 +    content: "\f054";
176.2437 +    top:1px;
176.2438 +    -webkit-transform:rotate(180deg);
176.2439 +    transform:rotate(180deg);
176.2440 +    background-color: transparent;
176.2441 +}
176.2442 +
176.2443 +#afui.bb .backButton::after {
176.2444 +    z-index: -1;
176.2445 +    font-size:24px;
176.2446 +    content: ' ';
176.2447 +    position: absolute;
176.2448 +    font-weight:bold;
176.2449 +    background-color: transparent;
176.2450 +    left:55px;
176.2451 +    height:48px;
176.2452 +    top:-5px;
176.2453 +    width:2px;
176.2454 +    background: #0aa9dc;
176.2455 +    margin:auto;
176.2456 +    text-align: center;
176.2457 +    border-radius: 0;
176.2458 +    border: none;
176.2459 +    border-color: transparent;
176.2460 +    box-shadow: none;
176.2461 +    -webkit-transform: rotate(10deg);
176.2462 +    transform: rotate(10deg);
176.2463 +}
176.2464 +
176.2465 +#afui.bb .header .button {
176.2466 +    color:#fff;
176.2467 +    background:none;
176.2468 +    text-shadow:0 -1px 0 #333;
176.2469 +    border-color:transparent;
176.2470 +}
176.2471 +
176.2472 +#afui.bb .footer {
176.2473 +    border:none;
176.2474 +    border-radius:0px;
176.2475 +    background:none;
176.2476 +    padding:0;
176.2477 +    -webkit-box-shadow:none;
176.2478 +    box-shadow: none;
176.2479 +}
176.2480 +
176.2481 +#afui.bb .footer>footer>a:not(.button) {
176.2482 +    height:49px;
176.2483 +    top:0px;
176.2484 +    border-top:4px solid #000;
176.2485 +    background:#1e1e1e;
176.2486 +}
176.2487 +
176.2488 +#afui.bb .footer>footer>a.pressed:not(.button) {
176.2489 +    border:0px;
176.2490 +    border-top:4px solid #0aa9dc;
176.2491 +    border-radius:0px;
176.2492 +    background:#3a3a3a;
176.2493 +    color:white;
176.2494 +}
176.2495 +
176.2496 +#afui.bb .footer>footer>a:not(:last-of-type):not(.pressed):not(.button){
176.2497 +    border-right:1px solid black;
176.2498 +}
176.2499 +
176.2500 +#afui.bb .footer>footer>a.icon.pressed:not(.button):before {
176.2501 +    color: white;
176.2502 +}
176.2503 +
176.2504 +#afui.bb #aside_menu,
176.2505 +#afui.bb #menu {
176.2506 +    border-right:1px solid #bbb;
176.2507 +    background: #fff;
176.2508 +    color: #000;
176.2509 +}
176.2510 +
176.2511 +#afui.bb #aside_menu .list > li > a,
176.2512 +#afui.bb #menu .list > li > a {
176.2513 +    color:inherit;
176.2514 +}
176.2515 +
176.2516 +#afui.bb #aside_menu .list .divider,
176.2517 +#afui.bb #menu .list .divider {
176.2518 +    background:#fafafa;
176.2519 +    color:black;
176.2520 +}
176.2521 +
176.2522 +#afui.bb .list .divider {
176.2523 +    background:#fafafa;
176.2524 +    border-top:none;
176.2525 +    color:black;
176.2526 +    border-bottom: 1px solid #0aa9dc !important;
176.2527 +}
176.2528 +
176.2529 +#afui.bb #aside_menu .list li, #afui.bb #aside_menu .list .divider, #afui.bb #aside_menu .list li:first-child, #afui.bb #aside_menu .list li:last-child,
176.2530 +#afui.bb #menu .list li, #afui.bb #menu .list .divider, #afui.bb #menu .list li:first-child, #afui.bb #menu .list li:last-child {
176.2531 +    border-bottom-color :#ccc;
176.2532 +}
176.2533 +
176.2534 +#afui.bb .button ,
176.2535 +#afui.bb .button-grouped *,
176.2536 +#afui.bb .button-grouped > .button:first-child,
176.2537 +#afui.bb .button-grouped.vertical *,
176.2538 +#afui.bb .button-grouped.vertical >  .button:last-child, 
176.2539 +#afui.bb > .header .button-grouped > .button {
176.2540 +    border-color:#ccc;
176.2541 +}
176.2542 +
176.2543 +#afui.bb > .header .button-grouped > .button.pressed {
176.2544 +    background:#07a;
176.2545 +}
176.2546 +
176.2547 +#afui.bb .panel {
176.2548 +    background:#fff;
176.2549 +}
176.2550 +
176.2551 +#afui.bb .afPopup {
176.2552 +    border: solid 1px #ccc;
176.2553 +    -webkit-border-radius: 3px;
176.2554 +    border-radius: 3px;
176.2555 +    background:inherit;
176.2556 +    color:inherit;
176.2557 +    padding:0;
176.2558 +}
176.2559 +
176.2560 +#afui.bb .afPopup>HEADER{
176.2561 +    font-weight:normal;
176.2562 +    font-size:20px;    
176.2563 +    text-align:center;
176.2564 +    margin:0;
176.2565 +    padding:8px;
176.2566 +    color:white;
176.2567 +    border-radius: 2px;
176.2568 +    background:#00609E;
176.2569 +    background:-ms-linear-gradient(65deg, #00609E 0%,#00AFEE 100%);
176.2570 +    background:-webkit-gradient(linear, left bottom, right top, color-stop(0%,#00609E), color-stop(100%,#00AFEE));
176.2571 +    background:-webkit-linear-gradient(65deg, #00609E 0%,#00AFEE 100%);
176.2572 +    background:linear-gradient(65deg, #00609E 0%,#00AFEE 100%);    
176.2573 +}
176.2574 +
176.2575 +#afui.bb .afPopup>DIV{
176.2576 +    text-align:center;
176.2577 +    padding:10px;
176.2578 +}
176.2579 +
176.2580 +#afui.bb .afPopup>FOOTER{
176.2581 +    padding:5px;
176.2582 +}
176.2583 +
176.2584 +#afui.bb .afPopup>FOOTER>A#cancel{
176.2585 +    width:120px;
176.2586 +}
176.2587 +
176.2588 +#afui.bb .afPopup>FOOTER>A#action{
176.2589 +    width:120px;
176.2590 +}
176.2591 +
176.2592 +#afui.bb #af_actionsheet {
176.2593 +    background:white;
176.2594 +    color:inherit;
176.2595 +}
176.2596 +
176.2597 +#afui.bb #af_actionsheet a{
176.2598 +    border-radius:5px;
176.2599 +    -webkit-border-radius:5px;
176.2600 +    border:1px solid #ccc;
176.2601 +    background:#eee;
176.2602 +    color:#111;
176.2603 +}
176.2604 +
176.2605 +/** iOS 7 theme */
176.2606 +
176.2607 +/** Blue color color:rgba(82,155,234,255); */
176.2608 +
176.2609 +/* border rgba(158,158,158,255) */
176.2610 +
176.2611 +#afui.ios7 {
176.2612 +     font-family:'HelveticaNeue', 'Helvetica Neue',Helvetica, Arial, sans-serif;
176.2613 +}
176.2614 +
176.2615 +#afui.ios7 .header {
176.2616 +    background:rgb(249,249,249);
176.2617 +    color:inherit;
176.2618 +    border:none;
176.2619 +    border-bottom:1px solid rgba(158,158,158,255);
176.2620 +}
176.2621 +
176.2622 +
176.2623 +#afui.ios7.overlayStatusbar{
176.2624 +   margin-top: 20px;
176.2625 +background: #f9f9f9;
176.2626 +margin-bottom: -20px;
176.2627 +padding-bottom: 20px;
176.2628 +}
176.2629 +
176.2630 +#afui.ios7 .header .button {
176.2631 +    color:rgba(82,155,234,255);
176.2632 +    border-color:transparent;
176.2633 +    font-size:14px;
176.2634 +    font-weight:normal;
176.2635 +}
176.2636 +
176.2637 +#afui.ios7 .header h1 {
176.2638 +    color:inherit;
176.2639 +    text-shadow:none;
176.2640 +}
176.2641 +
176.2642 +#afui.ios7 .panel, #afui.ios7 #modalContainer {
176.2643 +    background:rgba(238,238,238,255);    
176.2644 +}
176.2645 +
176.2646 +#afui.ios7 .panel h2 { 
176.2647 +    color:inherit;
176.2648 +}
176.2649 +
176.2650 +#afui.ios7 .footer {
176.2651 +    background:rgb(249,249,249);
176.2652 +    color:black;
176.2653 +    border-top:1px solid rgba(158,158,158,255);
176.2654 +    box-shadow:none;
176.2655 +}
176.2656 +
176.2657 +#afui.ios7 .footer>footer>a:not(.button) {
176.2658 +    color:rgba(96,96,96,255);
176.2659 +}
176.2660 +
176.2661 +#afui.ios7 .footer>footer>a.pressed:not(.button) {
176.2662 +    border-radius:0;    
176.2663 +    background:transparent;
176.2664 +}
176.2665 +
176.2666 +#afui.ios7 #menubadge:after {
176.2667 +    border-color:rgba(82,155,234,255);
176.2668 +}
176.2669 +
176.2670 +#afui.ios7 .list {
176.2671 +    font-weight:normal;
176.2672 +}
176.2673 +
176.2674 +#afui.ios7 > #aside_menu,
176.2675 +#afui.ios7 > #menu {
176.2676 +    border-right:1px solid #bbb;
176.2677 +    background:rgba(238,238,238,255);
176.2678 +    color:inherit;
176.2679 +}
176.2680 +
176.2681 +#afui.ios7 #aside_menu .list li,#afui.ios7 #aside_menu .list .divider,#afui.ios7 #aside_menu .list li:first-child,#afui.ios7 #aside_menu .list li:last-child,
176.2682 +#afui.ios7 #menu .list li,#afui.ios7 #menu .list .divider,#afui.ios7 #menu .list li:first-child,#afui.ios7 #menu .list li:last-child {
176.2683 +    border-color:rgb(215,215,215);
176.2684 +    font-weight:normal;
176.2685 +    box-shadow:none;
176.2686 +}
176.2687 +
176.2688 +#afui.ios7 #aside_menu .list .divider,
176.2689 +#afui.ios7 #menu .list .divider {
176.2690 +    background:rgba(238,238,238,255);
176.2691 +    color:inherit;
176.2692 +    font-size: 1em;
176.2693 +    border-bottom:1px solid rgb(215,215,215);
176.2694 +}
176.2695 +
176.2696 +#afui.ios7 #aside_menu .list a,
176.2697 +#afui.ios7 #menu .list a {
176.2698 +    color:inherit;
176.2699 +}
176.2700 +
176.2701 +#afui.ios7 #aside_menu .list,
176.2702 +#afui.ios7 #menu .list {
176.2703 +    background:white;
176.2704 +    font-weight: normal;
176.2705 +    color:inherit;
176.2706 +}
176.2707 +
176.2708 +#afui.ios7 .list > li > a:after{
176.2709 +    color:rgba(217,217,217,255);
176.2710 +}
176.2711 +
176.2712 +#afui.ios7 .button {
176.2713 +    background-color:transparent;
176.2714 +}
176.2715 +
176.2716 +#afui.ios7 .backButton {
176.2717 +    background:rgba(249,249,249,1);
176.2718 +    color:rgba(82,155,234,255);
176.2719 +    display: block;
176.2720 +    position: absolute;
176.2721 +    line-height:44px;
176.2722 +    left: 25px;
176.2723 +    text-overflow: ellipsis;
176.2724 +    font-size: 14px;
176.2725 +    padding: 0;
176.2726 +    text-shadow: none;
176.2727 +    background-color: transparent;
176.2728 +    border:none;
176.2729 +    border-color: transparent;
176.2730 +    height: 44px;
176.2731 +    top:auto;
176.2732 +    border-radius: 0;
176.2733 +    box-shadow:none;
176.2734 +    margin: 0;
176.2735 +    padding-left: 0;
176.2736 +    text-align: center;
176.2737 +    width:50px;
176.2738 +    padding:0 !important;
176.2739 +    margin:0 !important;
176.2740 +}
176.2741 +
176.2742 +#afui.ios7 .backButton::before {
176.2743 +    z-index: -1;
176.2744 +    font-size:22px;
176.2745 +    position: absolute;
176.2746 +    top: 10px;
176.2747 +    left: -20px;
176.2748 +    text-align: center;
176.2749 +    border-radius: 0;
176.2750 +    border: none;
176.2751 +    border-color: transparent;
176.2752 +    box-shadow: none;
176.2753 +    -webkit-transform: none;
176.2754 +    transform: none;
176.2755 +    font-family: 'chevron';
176.2756 +    speak: none;
176.2757 +    font-style: normal;
176.2758 +    font-weight: normal;
176.2759 +    font-variant: normal;
176.2760 +    text-transform: none;
176.2761 +    line-height: 1;
176.2762 +    -webkit-font-smoothing: antialiased;
176.2763 +    content: "\f054";
176.2764 +    -webkit-transform:rotate(180deg);
176.2765 +    transform:rotate(180deg);
176.2766 +    background-color: transparent;
176.2767 +}
176.2768 +
176.2769 +#afui.ios7 .backButton::after {
176.2770 +    content: '';
176.2771 +    width:0;
176.2772 +    height:0;
176.2773 +    border:none;
176.2774 +}
176.2775 +
176.2776 +
176.2777 +#afui.ios7 .button {
176.2778 +    box-shadow:none;
176.2779 +    border-radius: 0;
176.2780 +    border-color:#ccc;
176.2781 +    color:rgba(82,155,234,255);
176.2782 +    text-shadow:none;
176.2783 +}
176.2784 +
176.2785 +#afui.ios7 .button-grouped * ,
176.2786 +#afui.ios7 .button-grouped >  .button:first-child,
176.2787 +#afui.ios7 .button-grouped.vertical * ,
176.2788 +#afui.ios7 .button-grouped.vertical >  .button:last-child, 
176.2789 +#afui.ios7 .header .button-grouped > .button {
176.2790 +    border-color:rgba(82,155,234,255);
176.2791 +}
176.2792 +
176.2793 +#afui.ios7 .button-grouped > .button.pressed ,
176.2794 +#afui.ios7 .header .button-grouped > .button.pressed{
176.2795 +    color:white;
176.2796 +    background:rgba(82,155,234,255);
176.2797 +}
176.2798 +
176.2799 +#afui.ios7 .afPopup {
176.2800 +    border:1px solid rgba(158,158,158,255);
176.2801 +    border-radius:10px;
176.2802 +    padding:0;
176.2803 +    text-align: center;
176.2804 +    color:inherit;
176.2805 +    background:rgba(249,249,249,1);
176.2806 +}
176.2807 +
176.2808 +#afui.ios7 .afPopup>HEADER{
176.2809 +    padding:10px 0;
176.2810 +}
176.2811 +
176.2812 +#afui.ios7 .afPopup>DIV{
176.2813 +    padding-bottom:10px;
176.2814 +}
176.2815 +
176.2816 +#afui.ios7 .afPopup>FOOTER{
176.2817 +    border-top:1px solid #aaa;
176.2818 +}
176.2819 +
176.2820 +#afui.ios7 .afPopup>FOOTER>A.center{
176.2821 +    width:100%!important;
176.2822 +}
176.2823 +
176.2824 +#afui.ios7 .afPopup .button {
176.2825 +    border: none;
176.2826 +    width: 50%;
176.2827 +    margin: 0;
176.2828 +    background: transparent;
176.2829 +    color:rgba(82,155,234,255);
176.2830 +    padding:12px 0;
176.2831 +}
176.2832 +
176.2833 +#afui.ios7 .afPopup .button.pressed {
176.2834 +    background: transparent;
176.2835 +}
176.2836 +
176.2837 +#afui.ios7 .button.pressed {
176.2838 +    font-weight:bold;
176.2839 +    background: white;
176.2840 +}
176.2841 +
176.2842 +#afui.ios7 .afPopup a:not(:first-of-type) {
176.2843 +    border-left:1px solid rgba(158,158,158,255);
176.2844 +}
176.2845 +
176.2846 +#afui.ios7 #af_actionsheet {
176.2847 +    background-color:transparent;
176.2848 +    color:black;
176.2849 +    padding-left:10px;
176.2850 +    padding-right:10px;
176.2851 +    border-top: transparent 1px solid;
176.2852 +    box-shadow: 0px -1px 2px rgba(0,0,0,0);
176.2853 +}
176.2854 +
176.2855 +#afui.ios7 #af_actionsheet a{
176.2856 +    background-image:none;
176.2857 +    text-shadow:none;
176.2858 +    box-shadow:none;
176.2859 +    font-weight:normal;
176.2860 +    border-radius: 0;
176.2861 +    border:none;
176.2862 +    -webkit-box-shadow:none;
176.2863 +    color:rgba(82,155,234,255);
176.2864 +    background-color:white;
176.2865 +    cursor:pointer;
176.2866 +    border-radius:0px;
176.2867 +    line-height: 40px;
176.2868 +    font-size: 20px;
176.2869 +    margin-bottom: 1px;
176.2870 +}
176.2871 +
176.2872 +#afui.ios7 #af_actionsheet a:first-child{
176.2873 +    border-top-left-radius:5px;
176.2874 +    border-top-right-radius:5px;
176.2875 +}
176.2876 +
176.2877 +#afui.ios7 #af_actionsheet a:nth-last-child(2){
176.2878 +    border-bottom-left-radius:5px;
176.2879 +    border-bottom-right-radius:5px;
176.2880 +}
176.2881 +
176.2882 +#afui.ios7 #af_actionsheet a.cancel{
176.2883 +    font-weight:bold;
176.2884 +    margin: 9px 0;
176.2885 +    border-radius:5px;
176.2886 +}
176.2887 +
176.2888 +#afui.ios7 #af_actionsheet a.red{
176.2889 +    color:#f44;
176.2890 +}
176.2891 +
176.2892 +#afui.ios7 .footer>footer>a.pressed:not(.button),.footer>footer>a.icon.pressed:not(.button):before  {
176.2893 +    color:rgba(82,155,234,255);
176.2894 +}
176.2895 +
176.2896 +#afui.ios7 .button.previous {
176.2897 +    border:none;
176.2898 +}
176.2899 +
176.2900 +#afui.ios7 .button.next {
176.2901 +    border:none;   
176.2902 +}
176.2903 +
176.2904 +#afui.ios7 .button.previous::after {
176.2905 +    color:rgba(82,155,234,255);
176.2906 +    z-index: -1;
176.2907 +    font-size:22px;
176.2908 +    position: absolute;
176.2909 +    top: 2px;
176.2910 +    left: -25px;
176.2911 +    text-align: center;
176.2912 +    border-radius: 0;
176.2913 +    border: none;
176.2914 +    border-color: transparent;
176.2915 +    box-shadow: none;
176.2916 +    -webkit-transform: none;
176.2917 +    transform: none;
176.2918 +    font-family: 'chevron';
176.2919 +    speak: none;
176.2920 +    font-style: normal;
176.2921 +    font-weight: normal;
176.2922 +    font-variant: normal;
176.2923 +    text-transform: none;
176.2924 +    line-height: 1;
176.2925 +    -webkit-font-smoothing: antialiased;
176.2926 +    content: "\f054";
176.2927 +    -webkit-transform:rotate(180deg);
176.2928 +    transform:rotate(180deg);
176.2929 +    background-color: transparent;
176.2930 +}
176.2931 +
176.2932 +#afui.ios7 .button.next::after {
176.2933 +    color:rgba(82,155,234,255);
176.2934 +    z-index: -1;
176.2935 +    font-size:22px;
176.2936 +    position: absolute;
176.2937 +    top: 6px;
176.2938 +    right: -25px;
176.2939 +    text-align: center;
176.2940 +    border-radius: 0;
176.2941 +    border: none;
176.2942 +    border-color: transparent;
176.2943 +    box-shadow: none;
176.2944 +    -webkit-transform: none;
176.2945 +    transform: none;
176.2946 +    font-family: 'chevron';
176.2947 +    speak: none;
176.2948 +    font-style: normal;
176.2949 +    font-weight: normal;
176.2950 +    font-variant: normal;
176.2951 +    text-transform: none;
176.2952 +    line-height: 1;
176.2953 +    -webkit-font-smoothing: antialiased;
176.2954 +    content: "\f054";
176.2955 +    background-color: transparent;
176.2956 +}
176.2957 +
176.2958 +#afui.ios7 .button.gray {
176.2959 +    color:#999;
176.2960 +    background-color:transparent;
176.2961 +}
176.2962 +
176.2963 +#afui.ios7 .button.yellow {
176.2964 +    color:#F1C222;
176.2965 +    background-color:transparent;
176.2966 +}
176.2967 +
176.2968 +#afui.ios7 .button.red {
176.2969 +    color:#b20000;
176.2970 +    background-color:transparent;
176.2971 +}
176.2972 +
176.2973 +#afui.ios7 .button.green {
176.2974 +    color:#009C0C;
176.2975 +    background-color:transparent;
176.2976 +}
176.2977 +
176.2978 +#afui.ios7 .button.orange {
176.2979 +    color:#FF8000;
176.2980 +    background-color:transparent;
176.2981 +}
176.2982 +
176.2983 +#afui.ios7 .button.black {
176.2984 +    color:black;
176.2985 +    background-color:transparent;
176.2986 +}
176.2987 +
176.2988 +#afui.ios7 .button.slate {
176.2989 +    color:#171F28;
176.2990 +    background-color:transparent;    
176.2991 +}
176.2992 +
176.2993 +#afui.ios7 .af-badge {
176.2994 +    border:none;
176.2995 +    box-shadow:none;
176.2996 +    font-size:12px;
176.2997 +}
176.2998 +
176.2999 +#afui.ios7 input[type="range"] {
176.3000 +   -webkit-appearance: none;
176.3001 +background-color: #333;
176.3002 +height: 4px;
176.3003 +position: relative;
176.3004 +top: -10px;
176.3005 +margin-top: 15px;
176.3006 +border-radius:2px;
176.3007 +}
176.3008 + 
176.3009 +#afui.ios7 input[type="range"]::-webkit-slider-thumb {
176.3010 +    -webkit-appearance: none;
176.3011 +    position: relative;    
176.3012 +    z-index: 1;
176.3013 +    width: 15px;
176.3014 +    height: 15px;
176.3015 +    -webkit-border-radius: 40px;    
176.3016 +    border-radius: 40px;
176.3017 +    border:1px solid #333;
176.3018 +    background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#ccc), color-stop(100%,#ccc));
176.3019 +    background-image: gradient(linear, left top, left bottom, color-stop(0%,#ccc), color-stop(100%,#ccc));
176.3020 +}
176.3021 +
176.3022 +/* iOS theme */
176.3023 +#afui.ios {
176.3024 +    color:black;
176.3025 +}
176.3026 +
176.3027 +#afui.ios  .header { 
176.3028 +    background-color:#889BB3;
176.3029 +    background-image:-ms-linear-gradient(top, #B3BECD 0%, #889BB3 50%, #6E84A2 51%);
176.3030 +    background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #B3BECD), color-stop(.5, #889BB3), color-stop(.51, #6E84A2));
176.3031 +    background-image:-webkit-linear-gradient(top, #B3BECD 0%, #889BB3 50%, #6E84A2 51%);
176.3032 +    background-image:linear-gradient(to bottom, #B3BECD 0%, #889BB3 50%, #6E84A2 51%);
176.3033 +    border: 1px solid;
176.3034 +    border-color:#CCD2DA transparent #2D3033 transparent;
176.3035 +    color:white;
176.3036 +} 
176.3037 +
176.3038 +#afui.ios .header h1 {
176.3039 +    text-shadow: rgba(0,0,0,0.8) 0 -1px 0;
176.3040 +}
176.3041 +
176.3042 +#afui.ios .af-badge {
176.3043 +    border:2px solid #fff;
176.3044 +    box-shadow:0 1px 2px #555;
176.3045 +    line-height:18px;
176.3046 +}
176.3047 +#afui.ios .panel, #afui.ios #modalContainer {
176.3048 +    background:#e7e7e7;
176.3049 +}
176.3050 +
176.3051 +#afui.ios .panel h2 { color:inherit;}
176.3052 +
176.3053 +#afui.ios  .footer {
176.3054 +    background-color:#000;
176.3055 +    background-image:-ms-linear-gradient(top, #222 0%, #111 50%, #000 51%);
176.3056 +    background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #222), color-stop(0.5, #111), color-stop(.51, #000));
176.3057 +    background-image:-webkit-linear-gradient(top, #222 0%, #111 50%, #000 51%);
176.3058 +    background-image:linear-gradient(to bottom, #222 0%, #111 50%, #000 51%);
176.3059 +    box-shadow:0 1px 0 #555 inset;
176.3060 +   
176.3061 +    border-top:1px solid #000;
176.3062 +}
176.3063 +
176.3064 +#afui.ios .footer>footer>a.pressed:not(.button) {
176.3065 +    background:rgba(255, 255, 255, 0.13);
176.3066 +    border-radius:6px;
176.3067 +}
176.3068 +
176.3069 +#afui.ios .footer>footer>a.icon.pressed:not(.button):before {
176.3070 +    color:#3a9de2;
176.3071 +}
176.3072 +
176.3073 +#afui.ios > #aside_menu,
176.3074 +#afui.ios > #menu.tabletMenu {
176.3075 +   border-right:none;
176.3076 +    background:#000;
176.3077 +    color:#fff;
176.3078 +}
176.3079 +
176.3080 +#afui.ios .backButton {
176.3081 +    line-height:15px;
176.3082 +    width:58px;
176.3083 +    display:block;
176.3084 +    position:absolute;
176.3085 +    top:5px; left:5px;
176.3086 +    text-overflow:ellipsis;
176.3087 +    font-size:12px;
176.3088 +    padding:7px !important;
176.3089 +    color:#fff;
176.3090 +    text-shadow:0 -1px 0 #333;
176.3091 +    background-color:#476999;
176.3092 +    background-image: none !important;
176.3093 +    border:1px solid;
176.3094 +    border-color:#375073 #375073 #375073 transparent;
176.3095 +    height:32px;
176.3096 +    border-radius:5px;
176.3097 +    box-shadow:0 1px 0 #9CABC0;
176.3098 +    margin:0 0 0 15px !important;
176.3099 +    padding-left:4px !important;
176.3100 +} /* Sets up positioning of the back button which appears in the header */
176.3101 +
176.3102 +#afui.ios .backButton::before {
176.3103 +    z-index:-1;
176.3104 +    content:'';
176.3105 +    position:absolute;
176.3106 +    width:24px; height:24px;
176.3107 +    background-color:#476999;
176.3108 +    top:2px; left:-11px;
176.3109 +    border-radius:5px;
176.3110 +    border:1px solid;
176.3111 +    border-color:transparent transparent #9CABC0 transparent;
176.3112 +    box-shadow:1px -1px 0 #375073 inset;
176.3113 +    -ms-transform:rotate(45deg); -moz-transform:rotate(45deg); -webkit-transform:rotate(45deg); transform:rotate(45deg);
176.3114 +}
176.3115 +
176.3116 +#afui.ios .header .button {
176.3117 +    color:#fff;
176.3118 +    text-shadow:0 -1px 0 #333;
176.3119 +    background-color:#476999;
176.3120 +    border:1px solid #375073;
176.3121 +    box-shadow:0 1px 0 #9CABC0;
176.3122 +    background-image:linear-gradient(to bottom, #9CABC0 0%, #6E84A2 50%, #476999 51%);
176.3123 +}
176.3124 +
176.3125 +#afui.ios .header .button.pressed {
176.3126 +    background-image:linear-gradient(to bottom, #6E84A2 0%, #476999 50%, #274979 51%);
176.3127 +}
176.3128 +
176.3129 +#afui.ios .footer .button {
176.3130 +    color:#fff;
176.3131 +    text-shadow:0 -1px 0 #333;
176.3132 +    background-color:#444;
176.3133 +    border:1px solid #222;
176.3134 +    box-shadow:0 1px 0 #222;
176.3135 +    background-image:linear-gradient(to bottom, #555 0%, #333 50%, #111 51%);
176.3136 +}
176.3137 +
176.3138 +#afui.ios .footer .button.pressed {
176.3139 +    background-image:linear-gradient(to bottom, #444 0%, #222 50%, #000 51%);
176.3140 +}
176.3141 +
176.3142 +#afui.ios #aside_menu .list li, 
176.3143 +#afui.ios #aside_menu .list .divider, 
176.3144 +#afui.ios #aside_menu .list li:first-child, 
176.3145 +#afui.ios #aside_menu  .list li:last-child,
176.3146 +#afui.ios #menu .list li, 
176.3147 +#afui.ios #menu .list .divider, 
176.3148 +#afui.ios #menu .list li:first-child, 
176.3149 +#afui.ios #menu  .list li:last-child {
176.3150 +    border-color:#101012;
176.3151 +    -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .08);
176.3152 +    box-shadow: inset 0 1px 0 rgba(255, 255, 255, .08);
176.3153 +}
176.3154 +
176.3155 +#afui.ios #aside_menu .list > li > a,
176.3156 +#afui.ios #menu .list > li > a {
176.3157 +    color:#ccc;   
176.3158 +}
176.3159 +
176.3160 +#afui.ios #aside_menu .list .divider,
176.3161 +#afui.ios #menu .list .divider {
176.3162 +    background:#333;
176.3163 +    color:#fff;   
176.3164 +}
176.3165 +
176.3166 +#afui.ios .afPopup {
176.3167 +    border: solid 2px #fff;
176.3168 +    -webkit-box-shadow: 0px 4px 6px #555, 0 0 20px rgba(0,0,0,0.5);
176.3169 +    -webkit-border-radius: 10px;
176.3170 +    border-radius:10px;
176.3171 +    padding: 0;
176.3172 +    background: #1b294b;
176.3173 +    background-image: -webkit-gradient(linear, left top, left bottom, from(#626c82), to(#1b294b));
176.3174 +}
176.3175 +
176.3176 +#afui.ios .afPopup >* {
176.3177 +    color:white;
176.3178 +}
176.3179 +
176.3180 +#afui.ios .afPopup>HEADER{
176.3181 +    font-weight:bold;   
176.3182 +    text-align:center;
176.3183 +    text-shadow:0 -1px #000;
176.3184 +    padding:5px;
176.3185 +}
176.3186 +
176.3187 +#afui.ios .afPopup>DIV{
176.3188 +    text-align:center;
176.3189 +}
176.3190 +
176.3191 +#afui.ios .afPopup>FOOTER>A{
176.3192 +    background-image: -webkit-gradient(linear, left top, left bottom, from(#626c82), to(#1b294b));
176.3193 +    color:white;
176.3194 +}
176.3195 +
176.3196 +#afui.ios .afPopup>FOOTER>A#cancel{
176.3197 +    width:120px;
176.3198 +    margin-left:10px;
176.3199 +}
176.3200 +
176.3201 +#afui.ios .afPopup>FOOTER>A#action{
176.3202 +    width:120px;
176.3203 +    margin-right:10px;
176.3204 +}
176.3205 +
176.3206 +#afui.ios .afPopup>FOOTER>A.center{
176.3207 +    float:none!important;
176.3208 +    width:95%!important;
176.3209 +    margin:8px!important;
176.3210 +}
176.3211 +
176.3212 +#afui.ios #af_actionsheet {
176.3213 +    background:#595c61;
176.3214 +    color:inherit;
176.3215 +}
176.3216 +
176.3217 +#afui.ios #af_actionsheet a{
176.3218 +    border-radius:10px;
176.3219 +    -webkit-border-radius:10px;
176.3220 +    border:3px solid #111;
176.3221 +    background:#eee;
176.3222 +    background: linear-gradient(to bottom, #fff 0%,#ccc 100%);
176.3223 +    color:#111;
176.3224 +    text-shadow:0 1px 0 #fff;
176.3225 +}
176.3226 +
176.3227 +#afui.ios #af_actionsheet a.cancel{
176.3228 +    background:#333;
176.3229 +    background: linear-gradient(to bottom, #666 0%,#333 100%);
176.3230 +    color:white;
176.3231 +    text-shadow:0 -1px 0 #000;
176.3232 +}
176.3233 +
176.3234 +#afui.ios #af_actionsheet a.red{
176.3235 +    background:#d11;
176.3236 +    background: linear-gradient(to bottom, #d55 0%,#d11 100%);
176.3237 +    color:white;
176.3238 +    text-shadow:0 -1px 0 #000;
176.3239 +}
176.3240 +
176.3241 +#afui.ios input[type="range"] {
176.3242 +   -webkit-appearance: none;
176.3243 +background-color: #ccc;
176.3244 +height: 2px;
176.3245 +position: relative;
176.3246 +top: -10px;
176.3247 +margin-top: 15px;
176.3248 +}
176.3249 + 
176.3250 +#afui.ios input[type="range"]::-webkit-slider-thumb {
176.3251 +    -webkit-appearance: none;
176.3252 +    position: relative;
176.3253 +    
176.3254 +    z-index: 1;
176.3255 +    width: 15px;
176.3256 +    height: 15px;
176.3257 + 
176.3258 +    -webkit-border-radius: 40px;    
176.3259 +    border-radius: 40px;
176.3260 +    background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#ebf1f6), color-stop(50%,#abd3ee), color-stop(51%,#89c3eb), color-stop(100%,#d5ebfb));
176.3261 +    background-image: gradient(linear, left top, left bottom, color-stop(0%,#ebf1f6), color-stop(50%,#abd3ee), color-stop(51%,#89c3eb), color-stop(100%,#d5ebfb));
176.3262 +}
176.3263 +#af_actionsheet {
176.3264 +    position:absolute;
176.3265 +    left:0px;
176.3266 +    right:0px;
176.3267 +    padding-left:10px;
176.3268 +    padding-right:10px;
176.3269 +    padding-top:10px;
176.3270 +    margin:auto;
176.3271 +    background:black;
176.3272 +    float:left;
176.3273 +    z-index:9999;
176.3274 +    border-top:#fff 1px solid;
176.3275 +    background:rgba(71,71,71,.95);
176.3276 +    background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255,255,255,.4)), to(rgba(255,255,255,0)), color-stop(.08,rgba(255,255,255,.1)), color-stop(.08,rgba(255,255,255,0)));
176.3277 +    background-image:-webkit-linear-gradient(top, rgba(255,255,255,.4) 0%, rgba(255,255,255,.1) 8%, rgba(255,255,255,0) 8%);
176.3278 +    box-shadow:0px -1px 2px rgba(0,0,0,.4);
176.3279 +}
176.3280 +#af_actionsheet a {
176.3281 +    text-decoration:none;
176.3282 +    -webkit-transition:all 0.4s ease; 
176.3283 +    transition:all 0.4s ease; 
176.3284 +     text-shadow:0px -1px rgba(0,0,0,.8);
176.3285 +    padding:0px .25em;
176.3286 +    border:1px solid rgba(0,0,0,.8);
176.3287 +    text-overflow:ellipsis; 
176.3288 +    border-radius:.75em;
176.3289 +    background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255,255,255,.4)), to(rgba(255,255,255,0)), color-stop(.5,rgba(255,255,255,.1)), color-stop(.5,rgba(255,255,255,0)));
176.3290 +    background-image:-webkit-linear-gradient(top, rgba(255,255,255,.5) 0%, rgba(255,255,255,.2) 50%, rgba(255,255,255,0) 50%);
176.3291 +     box-shadow:0px 1px 1px rgba(255,255,255,0.7);
176.3292 +    display:block;
176.3293 +    color:white;
176.3294 +    text-align:center;
176.3295 +    line-height:36px;
176.3296 +    font-size:20px;
176.3297 +    font-weight:bold;
176.3298 +    margin-bottom:10px;
176.3299 +    background-color:rgba(130,130,130,1);
176.3300 +}
176.3301 +
176.3302 +#af_actionsheet a.selected {
176.3303 +    background-color:rgba(150,150,150,1);
176.3304 +}
176.3305 +
176.3306 +#af_actionsheet a.cancel {
176.3307 + background-color:rgba(43,43,43,1);
176.3308 +}
176.3309 +
176.3310 +#af_actionsheet a.cancel.selected {
176.3311 +    background-color:rgba(73,73,73,1);
176.3312 +}
176.3313 +#af_actionsheet a.red {
176.3314 +     color:white;
176.3315 +     background-color:rgba(204,0,0,1);
176.3316 +}
176.3317 +
176.3318 +#af_actionsheet a.red.selected {
176.3319 +     background-color:rgba(255,0,0,1); 
176.3320 +}
176.3321 +
176.3322 +
176.3323 +#mask{
176.3324 +    display:block;
176.3325 +    width:100%;
176.3326 +    height:100%;
176.3327 +    background:#000;
176.3328 +    z-index: 999999;
176.3329 +    position:fixed;
176.3330 +    top:0;
176.3331 +    left:0;
176.3332 +}
176.3333 +
176.3334 +
176.3335 +
176.3336 +.afPopup {
176.3337 +    display: block;
176.3338 +    width: 280px;
176.3339 +    float:left;
176.3340 +    border: solid 1px #72767b;
176.3341 +    -webkit-border-radius: 10px;
176.3342 +    border-radius:10px;
176.3343 +    padding: 10px;
176.3344 +    opacity: 1;
176.3345 +    -webkit-transform: scale(1);
176.3346 +    transform:scale(1);
176.3347 +    position: absolute;
176.3348 +    z-index: 1000000;
176.3349 +    top: 50%;
176.3350 +    left: 50%;
176.3351 +    margin: 0px auto;
176.3352 +    background: rgba(70,70,70,1);
176.3353 +    color:white;
176.3354 +}
176.3355 +.afPopup >* {
176.3356 +    color:inherit;
176.3357 +}
176.3358 +
176.3359 +.afPopup.hidden {
176.3360 +    opacity: 0;
176.3361 +    -webkit-transform: scale(0.1);
176.3362 +
176.3363 +}
176.3364 +
176.3365 +.afPopup.show {
176.3366 +  -webkit-transition: all 0.2s ease-in-out;
176.3367 +  transition: all 0.2s ease-in-out;
176.3368 +}
176.3369 +
176.3370 +.afPopup>HEADER{
176.3371 +    font-weight:bold;
176.3372 +    font-size:20px;
176.3373 +    margin:0;
176.3374 +    padding:5px;
176.3375 +}
176.3376 +
176.3377 +.afPopup>DIV{
176.3378 +    font-size:14px;
176.3379 +    margin:8px;
176.3380 +}
176.3381 +
176.3382 +.afPopup>FOOTER{
176.3383 +    width:100%;
176.3384 +    text-align:center;
176.3385 +    display:block !important;
176.3386 +}
176.3387 +
176.3388 +.afPopup>FOOTER>A#cancel{
176.3389 +    float:left;
176.3390 +    margin-left:5px;
176.3391 +}
176.3392 +
176.3393 +.afPopup>FOOTER>A#action{
176.3394 +    float:right;
176.3395 +    margin-right:5px;
176.3396 +}
176.3397 +
176.3398 +.afPopup>FOOTER>A.center{
176.3399 +    float:none!important;
176.3400 +    width:80%;
176.3401 +    margin:8px;
176.3402 +}
176.3403 +/** This can be your default scrollbar class.  You must use !important to override the default inline styles */
176.3404 +.scrollBar { 
176.3405 +    position: absolute !important;
176.3406 +    width: 5px !important;
176.3407 +    height: 20px !important;
176.3408 +    border-radius: 2px !important;
176.3409 +    border: 1px solid black !important;
176.3410 +    background: black !important;
176.3411 +    opacity: 0 !important;
176.3412 +}
176.3413 +    #afModalMask {
176.3414 +        position:absolute;
176.3415 +        top:0px;
176.3416 +        left:0px;
176.3417 +        width:100%;
176.3418 +        height:100%;
176.3419 +        background:transparent;
176.3420 +        display:none;
176.3421 +        z-index:9999;
176.3422 +    }
176.3423 +
176.3424 +    #afSelectBoxContainer {
176.3425 +        position:absolute;
176.3426 +        display:block;
176.3427 +        width:90%;
176.3428 +        max-width:280px;
176.3429 +        margin-right:auto;
176.3430 +        min-height:100px;
176.3431 +        background:#303030;
176.3432 +        color:white;
176.3433 +        overflow:hidden;
176.3434 +        z-index:9999;
176.3435 +        max-height:300px;
176.3436 +        margin-top: -150px;
176.3437 +        top: 50%;
176.3438 +        left: 50%;
176.3439 +        margin-left: -138px;
176.3440 +    }
176.3441 +
176.3442 +
176.3443 +    #afSelectBoxfix ul {
176.3444 +        list-style-type:none;
176.3445 +        padding:0px;
176.3446 +        margin:0px;
176.3447 +    }
176.3448 +    #afSelectBoxfix li {
176.3449 +        font-size: 1.1em;
176.3450 +        color: #fff;
176.3451 +        display: block;
176.3452 +        line-height: 2.5em;
176.3453 +        padding: 0 1em;
176.3454 +        border-bottom: 1px solid #444;
176.3455 +    }
176.3456 +    #afSelectBoxfix .selected {
176.3457 +        background:#33B5E5;
176.3458 +    }
176.3459 +
176.3460 +    .afFakeSelect {
176.3461 +        width: 200px;
176.3462 +        height: 30px;
176.3463 +        display: inline-block;
176.3464 +        border: 1px solid #ccc;
176.3465 +        border-radius: 5px;
176.3466 +        line-height: 2em;
176.3467 +        font-size: 1em;
176.3468 +        padding-left: 10px;
176.3469 +        position: relative;
176.3470 +        padding-right: 35px;
176.3471 +        text-overflow: ellipsis;
176.3472 +        white-space: nowrap;
176.3473 +        overflow: hidden;       
176.3474 +    }
176.3475 +
176.3476 +    .afFakeSelect:after {
176.3477 +        position:absolute;
176.3478 +        top:5px;
176.3479 +        right:5px;
176.3480 +        border: 14px solid transparent;
176.3481 +        border-top-color: #ccc;
176.3482 +        content:'';
176.3483 +    }
176.3484 +
176.3485 +    #afSelectBoxContainer #afSelectDone,#afSelectBoxContainer #afSelectCancel{
176.3486 +        margin-top:10px;
176.3487 +        display: inline-block;
176.3488 +        height: 30px;
176.3489 +        width: 100px;
176.3490 +        background:#33B5E5;
176.3491 +        border: 1px solid #33B5E5;
176.3492 +        text-align: center;
176.3493 +        line-height: 2em;
176.3494 +        float: left;
176.3495 +        margin-left: 10px;
176.3496 +    }
176.3497 +    #afSelectBoxContainer #afSelectCancel {
176.3498 +        float:right;
176.3499 +        margin-right:10px;
176.3500 +    }
176.3501 +    #afSelectBoxContainer #afSelectClose {
176.3502 +        overflow: hidden;
176.3503 +        border-bottom: 1px solid #444;
176.3504 +        padding-bottom:5px;
176.3505 +    }
176.3506 +
176.3507 +    select:disabled~.afFakeSelect {
176.3508 +        background:#ccc;
176.3509 +        color:black;
176.3510 +    }
   177.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   177.2 +++ b/Touchgui/www/lib/appframework/appframework.ui.min.js	Thu Jun 04 14:50:33 2015 +0200
   177.3 @@ -0,0 +1,302 @@
   177.4 +/*! intel-appframework - v2.1.0 - 2014-09-25 */
   177.5 +
   177.6 +/*
   177.7 + Intel
   177.8 + @api private
   177.9 +*/
  177.10 +if(!window.af||"function"!==typeof af){var af=function(a){function n(a,c,d){var b=r.createDocumentFragment();if(d){for(d=a.length-1;0<=d;d--)b.insertBefore(a[d],b.firstChild);c.insertBefore(b,c.firstChild)}else{for(d=0;d<a.length;d++)b.appendChild(a[d]);c.appendChild(b)}}function l(a){return a in G?G[a]:G[a]=RegExp("(^|\\s)"+a+"(\\s|$)")}function k(a){for(var c=0;c<a.length;c++)a.indexOf(a[c])!==c&&(a.splice(c,1),c--);return a}function f(a,c){var d=[];if(a==q)return d;for(;a;a=a.nextSibling)1===a.nodeType&&
  177.11 +a!==c&&d.push(a);return d}function h(a,c){try{return c.querySelectorAll(a)}catch(d){return[]}}function g(a,c){if(a)if(a.nodeType)c[c.length++]=a;else for(var d=0,b=a.length;d<b;d++)c[c.length++]=a[d]}function b(){}function e(c,d){c.os={};c.os.webkit=d.match(/WebKit\/([\d.]+)/)?!0:!1;c.os.android=d.match(/(Android)\s+([\d.]+)/)||d.match(/Silk-Accelerated/)?!0:!1;c.os.androidICS=c.os.android&&d.match(/(Android)\s4/)?!0:!1;c.os.ipad=d.match(/(iPad).*OS\s([\d_]+)/)?!0:!1;c.os.iphone=!c.os.ipad&&d.match(/(iPhone\sOS)\s([\d_]+)/)?
  177.12 +!0:!1;c.os.ios7=(c.os.ipad||c.os.iphone)&&d.match(/7_/)||(c.os.ipad||c.os.iphone)&&d.match(/8_/)?!0:!1;c.os.webos=d.match(/(webOS|hpwOS)[\s\/]([\d.]+)/)?!0:!1;c.os.touchpad=c.os.webos&&d.match(/TouchPad/)?!0:!1;c.os.ios=c.os.ipad||c.os.iphone;c.os.playbook=d.match(/PlayBook/)?!0:!1;c.os.blackberry10=d.match(/BB10/)?!0:!1;c.os.blackberry=c.os.playbook||c.os.blackberry10||d.match(/BlackBerry/)?!0:!1;c.os.chrome=d.match(/Chrome/)?!0:!1;c.os.opera=d.match(/Opera/)?!0:!1;c.os.fennec=d.match(/fennec/i)?
  177.13 +!0:d.match(/Firefox/)?!0:!1;c.os.ie=d.match(/MSIE 10.0/i)||d.match(/Trident\/7/i)?!0:!1;c.os.ieTouch=c.os.ie&&d.toLowerCase().match(/touch/i)?!0:!1;c.os.tizen=d.match(/Tizen/i)?!0:!1;c.os.supportsTouch=a.DocumentTouch&&r instanceof a.DocumentTouch||"ontouchstart"in a;c.os.kindle=d.match(/Silk-Accelerated/)?!0:!1;c.feat={};var b=r.documentElement.getElementsByTagName("head")[0];c.feat.nativeTouchScroll="undefined"!==typeof b.style["-webkit-overflow-scrolling"]&&(c.os.ios||c.os.blackberry10);c.feat.cssPrefix=
  177.14 +c.os.webkit?"Webkit":c.os.fennec?"Moz":c.os.ie?"ms":c.os.opera?"O":"";c.feat.cssTransformStart=!c.os.opera?"3d(":"(";c.feat.cssTransformEnd=!c.os.opera?",0)":")";c.os.android&&!c.os.webkit&&(c.os.android=!1);for(var b=["Webkit","Moz","ms","O"],p=0;p<b.length;p++)""===r.documentElement.style[b[p]+"Transform"]&&(c.feat.cssPrefix=b[p])}function c(a){return a._afmid||(a._afmid=Q++)}function d(a,d,b,e){d=p(d);if(d.ns)var f=t(d.ns);return(x[c(a)]||[]).filter(function(a){return a&&(!d.e||a.e===d.e)&&(!d.ns||
  177.15 +f.test(a.ns))&&(!b||a.fn===b||"function"===typeof a.fn&&"function"===typeof b&&a.fn===b)&&(!e||a.sel===e)})}function p(a){a=(""+a).split(".");return{e:a[0],ns:a.slice(1).sort().join(" ")}}function t(a){return RegExp("(?:^| )"+a.replace(" "," .* ?")+"(?: |$)")}function J(a,c,d){m.isObject(a)?m.each(a,d):a.split(/\s/).forEach(function(a){d(a,c)})}function y(a,d,b,e,f){var h=c(a),g=x[h]||(x[h]=[]);J(d,b,function(c,d){var b=f&&f(d,c),E=b||d,I=function(c){if(!c.ns||t(c.ns).test(h.ns)){var d=E.apply(a,
  177.16 +[c].concat(c.data));!1===d&&c.preventDefault();return d}},h=m.extend(p(c),{fn:d,proxy:I,sel:e,del:b,i:g.length});g.push(h);a.addEventListener(h.e,I,!1)})}function u(a,b,p,e){var f=c(a);J(b||"",p,function(c,b){d(a,c,b,e).forEach(function(c){delete x[f][c.i];a.removeEventListener(c.e,c.proxy,!1)})})}function F(a){var c=m.extend({originalEvent:a},a);m.each(R,function(d,b){c[d]=function(){this[b]=S;if("stopImmediatePropagation"===d||"stopPropagation"===d)if(a.cancelBubble=!0,!a[d])return;return a[d].apply(a,
  177.17 +arguments)};c[b]=T});return c}function z(a,c,d,b,p){y(a,c,d,b,function(c){return function(d){var e,E=m(d.target).closest(b,a).get(0);if(E)return e=m.extend(F(d),{currentTarget:E,liveFired:a,delegateTarget:a,data:p}),c.apply(E,[e].concat([].slice.call(arguments,1)))}})}function s(a,d){if(d&&a.dispatchEvent){var b=m.Event("destroy",{bubbles:!1});a.dispatchEvent(b)}if((b=c(a))&&x[b]){for(var p in x[b])a.removeEventListener(x[b][p].e,x[b][p].proxy,!1);delete x[b]}}function A(a,c){if(a){var d=a.childNodes;
  177.18 +if(d&&0<d.length)for(var b=0;b<d.length;b++)A(d[b],c);s(a,c)}}var q,r=a.document,B=[],K=B.slice,G={},U=1,V=/<(\w+)[^>]*>/,w={},C={},L={columncount:!0,fontweight:!0,lineheight:!0,"column-count":!0,"font-weight":!0,"line-height":!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,"z-index":!0,zoom:!0},D="object"===typeof MSApp,v=function(a,c){this.length=0;if(a){if(a instanceof v&&c==q)return a;if(af.isFunction(a))return af(r).ready(a);if(af.isArray(a)&&a.length!=q){for(var d=0;d<a.length;d++)this[this.length++]=
  177.19 +a[d];return this}if(af.isObject(a)&&af.isObject(c)){if(a.length==q)a.parentNode==c&&(this[this.length++]=a);else for(d=0;d<a.length;d++)a[d].parentNode==c&&(this[this.length++]=a[d]);return this}if(af.isObject(a)&&c==q)return this[this.length++]=a,this;if(c!==q){if(c instanceof v)return c.find(a)}else c=r}else return this;return this.selector(a,c)},m=function(a,c){return new v(a,c)};m.is$=function(a){return a instanceof v};m.map=function(a,c){var d,b=[],p;if(m.isArray(a))for(p=0;p<a.length;p++)d=
  177.20 +c.apply(a[p],[a[p],p]),d!==q&&b.push(d);else if(m.isObject(a))for(p in a)a.hasOwnProperty(p)&&"length"!==p&&(d=c(a[p],[a[p],p]),d!==q&&b.push(d));return b};m.each=function(a,c){var d;if(m.isArray(a))for(d=0;d<a.length&&!1!==c(d,a[d]);d++);else if(m.isObject(a))for(d in a)if(a.hasOwnProperty(d)&&"length"!==d&&!1===c(d,a[d]))break;return a};m.extend=function(a){a==q&&(a=this);if(1===arguments.length){for(var c in a)this[c]=a[c];return this}K.call(arguments,1).forEach(function(c){for(var d in c)a[d]=
  177.21 +c[d]});return a};m.isArray=function(a){return a instanceof Array&&a.push!=q};m.isFunction=function(a){return"function"===typeof a&&!(a instanceof RegExp)};m.isObject=function(a){return"object"===typeof a&&null!==a};m.fn=v.prototype={namespace:"appframework",constructor:v,forEach:B.forEach,reduce:B.reduce,push:B.push,indexOf:B.indexOf,concat:B.concat,selector:function(a,c){a=a.trim();if("#"===a[0]&&-1===a.indexOf(".")&&-1===a.indexOf(",")&&-1===a.indexOf(" ")&&-1===a.indexOf(">"))c===r?g(c.getElementById(a.replace("#",
  177.22 +"")),this):g(h(a,c),this);else if("<"===a[0]&&">"===a[a.length-1]||-1!==a.indexOf("<")&&-1!==a.indexOf(">")){var d=r.createElement("div");D?MSApp.execUnsafeLocalFunction(function(){d.innerHTML=a.trim()}):d.innerHTML=a.trim();g(d.childNodes,this)}else g(h(a,c),this);return this},oldElement:void 0,sort:B.sort,slice:B.slice,length:0,setupOld:function(a){if(a==q)return m();a.oldElement=this;return a},map:function(a){var c,d=[],b;for(b=0;b<this.length;b++)c=a.apply(this[b],[b,this[b]]),c!==q&&d.push(c);
  177.23 +return m(d)},each:function(a){this.forEach(function(c,d){a.call(c,d,c)});return this},ready:function(a){"complete"===r.readyState||"loaded"===r.readyState||!m.os.ie&&"interactive"===r.readyState?a():r.addEventListener("DOMContentLoaded",a,!1);return this},find:function(a){if(0===this.length)return this;for(var c=[],d,b=0;b<this.length;b++){d=m(a,this[b]);for(var p=0;p<d.length;p++)c.push(d[p])}return m(k(c))},html:function(a,c){var d=function(){p.innerHTML=a};if(0===this.length)return this;if(a===
  177.24 +q)return this[0].innerHTML;for(var b=0;b<this.length;b++)if(!1!==c&&m.cleanUpContent(this[b],!1,!0),D){var p=this[b];MSApp.execUnsafeLocalFunction(d)}else this[b].innerHTML=a;return this},text:function(a){if(0===this.length)return this;if(a===q)return this[0].textContent;for(var c=0;c<this.length;c++)this[c].textContent=a;return this},css:function(c,d,b){b=b!=q?b:this[0];if(0===this.length)return this;if(d==q&&"string"===typeof c)return b.style[c]?b.style[c]:a.getComputedStyle(b)[c];for(b=0;b<this.length;b++)if(m.isObject(c))for(var p in c)this[b].style[p]=
  177.25 +"number"===typeof c[p]&&!L[p.toLowerCase()]?c[p]+"px":c[p];else this[b].style[c]="number"===typeof d&&!L[c.toLowerCase()]?d+"px":d;return this},vendorCss:function(a,c,d){return this.css(m.feat.cssPrefix+a,c,d)},cssTranslate:function(a){return this.vendorCss("Transform","translate"+m.feat.cssTransformStart+a+m.feat.cssTransformEnd)},computedStyle:function(c){if(!(0===this.length||c==q))return a.getComputedStyle(this[0],"")[c]},empty:function(){for(var a=0;a<this.length;a++)m.cleanUpContent(this[a],
  177.26 +!1,!0),this[a].textContent="";return this},hide:function(){if(0===this.length)return this;for(var a=0;a<this.length;a++)"none"!==this.css("display",null,this[a])&&(this[a].setAttribute("afmOldStyle",this.css("display",null,this[a])),this[a].style.display="none");return this},show:function(){if(0===this.length)return this;for(var a=0;a<this.length;a++)"none"===this.css("display",null,this[a])&&(this[a].style.display=this[a].getAttribute("afmOldStyle")?this[a].getAttribute("afmOldStyle"):"block",this[a].removeAttribute("afmOldStyle"));
  177.27 +return this},toggle:function(a){if(0===this.length)return this;for(var c=!0===a,d=0;d<this.length;d++)if("none"!==this.css("display",null,this[d])&&(a==q||!1===c))this[d].setAttribute("afmOldStyle",this.css("display",null,this[d])),this[d].style.display="none";else if("none"===this.css("display",null,this[d])&&(a==q||!0===c))this[d].style.display=this[d].getAttribute("afmOldStyle")?this[d].getAttribute("afmOldStyle"):"block",this[d].removeAttribute("afmOldStyle");return this},val:function(a){if(0===
  177.28 +this.length)return a===q?void 0:this;if(a==q)return this[0].value;for(var c=0;c<this.length;c++)this[c].value=a;return this},attr:function(a,c){if(0===this.length)return c===q?void 0:this;if(c===q&&!m.isObject(a))return this[0].afmCacheId&&w[this[0].afmCacheId]&&w[this[0].afmCacheId][a]?w[this[0].afmCacheId][a]:this[0].getAttribute(a);for(var d=0;d<this.length;d++)if(m.isObject(a))for(var b in a)m(this[d]).attr(b,a[b]);else m.isArray(c)||m.isObject(c)||m.isFunction(c)?(this[d].afmCacheId||(this[d].afmCacheId=
  177.29 +m.uuid()),w[this[d].afmCacheId]||(w[this[d].afmCacheId]={}),w[this[d].afmCacheId][a]=c):(null===c?this[d].removeAttribute(a):this[d].setAttribute(a,c),this[d].afmCacheId&&w[this[d].afmCacheId][a]&&delete w[this[d].afmCacheId][a]);return this},removeAttr:function(a){for(var c=function(c){d[b].removeAttribute(c);d[b].afmCacheId&&w[d[b].afmCacheId]&&delete w[d[b].afmCacheId][a]},d=this,b=0;b<this.length;b++)a.split(/\s+/g).forEach(c);return this},prop:function(a,c){if(0===this.length)return c===q?void 0:
  177.30 +this;if(c===q&&!m.isObject(a)){var d;return this[0].afmCacheId&&C[this[0].afmCacheId]&&C[this[0].afmCacheId][a]?C[this[0].afmCacheId][a]:!(d=this[0][a])&&a in this[0]?this[0][a]:d}for(d=0;d<this.length;d++)if(m.isObject(a))for(var b in a)m(this[d]).prop(b,a[b]);else m.isArray(c)||m.isObject(c)||m.isFunction(c)?(this[d].afmCacheId||(this[d].afmCacheId=m.uuid()),C[this[d].afmCacheId]||(C[this[d].afmCacheId]={}),C[this[d].afmCacheId][a]=c):null===c&&void 0!==c?m(this[d]).removeProp(a):(m(this[d]).removeProp(a),
  177.31 +this[d][a]=c);return this},removeProp:function(a){for(var c=function(c){d[b][c]&&(d[b][c]=void 0);d[b].afmCacheId&&C[d[b].afmCacheId]&&delete C[d[b].afmCacheId][a]},d=this,b=0;b<this.length;b++)a.split(/\s+/g).forEach(c);return this},remove:function(a){a=m(this).filter(a);if(a==q)return this;for(var c=0;c<a.length;c++)m.cleanUpContent(a[c],!0,!0),a[c]&&a[c].parentNode&&a[c].parentNode.removeChild(a[c]);return this},addClass:function(a){var c=function(a){e.hasClass(a,e[d])||p.push(a)};if(a==q)return this;
  177.32 +for(var d=0;d<this.length;d++){var b=this[d].className,p=[],e=this;a.split(/\s+/g).forEach(c);this[d].className+=(b?" ":"")+p.join(" ");this[d].className=this[d].className.trim()}return this},removeClass:function(a){if(a==q)return this;for(var c=function(a){b=b.replace(l(a)," ")},d=0;d<this.length;d++){if(a==q){this[d].className="";break}var b=this[d].className;"object"===typeof this[d].className&&(b=" ");a.split(/\s+/g).forEach(c);this[d].className=0<b.length?b.trim():""}return this},toggleClass:function(a,
  177.33 +c){if(a==q)return this;for(var d=0;d<this.length;d++)"boolean"!==typeof c&&(c=this.hasClass(a,this[d])),m(this[d])[c?"removeClass":"addClass"](a);return this},replaceClass:function(a,c){if(a==q||c==q)return this;for(var d=function(a){p=p.replace(l(a)," ")},b=0;b<this.length;b++)if(a==q)this[b].className=c;else{var p=this[b].className;a.split(/\s+/g).concat(c.split(/\s+/g)).forEach(d);p=p.trim();this[b].className=0<p.length?(p+" "+c).trim():c}return this},hasClass:function(a,c){if(0===this.length)return!1;
  177.34 +c||(c=this[0]);return l(a).test(c.className)},append:function(c,d,b){if(c&&c.length!=q&&0===c.length)return this;if(m.isArray(c)||m.isObject(c))c=m(c);var p;d&&m(this).add(d);for(d=0;d<this.length;d++)if(c.length&&"string"!==typeof c)c=m(c),n(c,this[d],b);else{var e=V.test(c)?m(c):void 0;if(e==q||0===e.length)e=r.createTextNode(c);if(e instanceof v)for(var f=0,t=e.length;f<t;f++)p=e[f],p.nodeName!=q&&"script"===p.nodeName.toLowerCase()&&(!p.type||"text/javascript"===p.type.toLowerCase())?a.eval(p.innerHTML):
  177.35 +n(m(p),this[d],b);else b!=q?this[d].insertBefore(e,this[d].firstChild):this[d].appendChild(e)}return this},appendTo:function(a){m(a).append(this);return this},prependTo:function(a){m(a).append(this,null,!0);return this},prepend:function(a){return this.append(a,null,1)},insertBefore:function(a,c){if(0===this.length)return this;a=m(a).get(0);if(!a)return this;for(var d=0;d<this.length;d++)c?a.parentNode.insertBefore(this[d],a.nextSibling):a.parentNode.insertBefore(this[d],a);return this},insertAfter:function(a){this.insertBefore(a,
  177.36 +!0)},get:function(a){a=a==q?null:a;0>a&&(a+=this.length);if(null===a){a=[];for(var c=0;c<this.length;c++)a.push(this[c]);return a}return this[a]?this[a]:void 0},offset:function(){var c;if(0===this.length)return this;if(this[0]===a)return{left:0,top:0,right:0,bottom:0,width:a.innerWidth,height:a.innerHeight};c=this[0].getBoundingClientRect();return{left:c.left+a.pageXOffset,top:c.top+a.pageYOffset,right:c.right+a.pageXOffset,bottom:c.bottom+a.pageYOffset,width:c.right-c.left,height:c.bottom-c.top}},
  177.37 +height:function(c){return 0===this.length?this:c!=q?this.css("height",c):this[0]===this[0].window?a.innerHeight:this[0].nodeType===this[0].DOCUMENT_NODE?this[0].documentElement.offsetHeight:(c=this.computedStyle("height").replace("px",""))?+c:this.offset().height},width:function(c){return 0===this.length?this:c!=q?this.css("width",c):this[0]===this[0].window?a.innerWidth:this[0].nodeType===this[0].DOCUMENT_NODE?this[0].documentElement.offsetWidth:(c=this.computedStyle("width").replace("px",""))?+c:
  177.38 +this.offset().width},parent:function(a,c){if(0===this.length)return this;for(var d=[],b=0;b<this.length;b++)for(var p=this[b];p.parentNode&&p.parentNode!==r&&!(d.push(p.parentNode),p.parentNode&&(p=p.parentNode),!c););return this.setupOld(m(k(d)).filter(a))},parents:function(a){return this.parent(a,!0)},children:function(a){if(0===this.length)return this;for(var c=[],d=0;d<this.length;d++)c=c.concat(f(this[d].firstChild));return this.setupOld(m(c).filter(a))},siblings:function(a){if(0===this.length)return this;
  177.39 +for(var c=[],d=0;d<this.length;d++)this[d].parentNode&&(c=c.concat(f(this[d].parentNode.firstChild,this[d])));return this.setupOld(m(c).filter(a))},contents:function(a){if(0===this.length)return this;for(var c=[],d=0;d<this.length;d++)this[d].parentNode&&g(this[d].childNodes,c);return this.setupOld(m(c).filter(a))},closest:function(a,c){if(0===this.length)return this;var d=this[0],b=m(a,c);if(0===b.length)return m();for(;d&&-1===b.indexOf(d);)d=d!==c&&d!==r&&d.parentNode;return m(d)},filter:function(a){if(0===
  177.40 +this.length||a==q)return this;for(var c=[],d=0;d<this.length;d++){var b=this[d];b.parentNode&&0<=m(a,b.parentNode).indexOf(b)&&c.push(b)}return this.setupOld(m(k(c)))},not:function(a){if(0===this.length)return this;for(var c=[],d=0;d<this.length;d++){var b=this[d];b.parentNode&&-1===m(a,b.parentNode).indexOf(b)&&c.push(b)}return this.setupOld(m(k(c)))},data:function(a,c){return this.attr("data-"+a,c)},end:function(){return this.oldElement!=q?this.oldElement:m()},clone:function(a){a=!1===a?!1:!0;if(0===
  177.41 +this.length)return this;for(var c=[],d=0;d<this.length;d++)c.push(this[d].cloneNode(a));return m(c)},size:function(){return this.length},serialize:function(){if(0===this.length)return"";for(var a=function(a){var d=a.getAttribute("type");if("fieldset"!==a.nodeName.toLowerCase()&&(!a.disabled&&"submit"!==d&&"reset"!==d&&"button"!==d&&("radio"!==d&&"checkbox"!==d||a.checked))&&a.getAttribute("name"))if("select-multiple"===a.type)for(d=0;d<a.options.length;d++)a.options[d].selected&&c.push(a.getAttribute("name")+
  177.42 +"="+encodeURIComponent(a.options[d].value));else c.push(a.getAttribute("name")+"="+encodeURIComponent(a.value))},c=[],d=0;d<this.length;d++)this.slice.call(this[d].elements).forEach(a);return c.join("&")},eq:function(a){return m(this.get(a))},index:function(a){return a?this.indexOf(m(a)[0]):this.parent().children().indexOf(this[0])},is:function(a){return!!a&&0<this.filter(a).length},add:function(a){a=m(a);var c,d=a.length;for(c=0;c<d;c++)this[this.length++]=a[c];return this}};m.ajaxSettings={type:"GET",
  177.43 +beforeSend:b,success:b,error:b,complete:b,context:void 0,timeout:0,crossDomain:null,processData:!0};m.jsonP=function(c){if(D)return c.type="get",c.dataType=null,m.get(c);var d="jsonp_callback"+ ++U,b="",p,e=r.createElement("script");a[d]=function(p){clearTimeout(b);m(e).remove();delete a[d];c.success.call(void 0,p)};if(-1!==c.url.indexOf("callback=?"))e.src=c.url.replace(/=\?/,"="+d);else{p=c.jsonp?c.jsonp:"callback";if(-1===c.url.indexOf("?"))c.url+="?"+p+"="+d;else if(-1!==c.url.indexOf("callback=")){p=
  177.44 +c.url.indexOf("callback=")+9;var f=c.url.indexOf(p);-1===f&&(f=c.url.length);p=c.url.substr(p,f);c.url=c.url.replace("callback="+p,"callback="+d);p=p.replace("window.","");c.success=a[p]}else c.url+="&"+p+"="+d;e.src=c.url}c.error&&(e.onerror=function(){clearTimeout(b);c.error.call(void 0,"","error")});m("head").append(e);0<c.timeout&&(b=setTimeout(function(){c.error.call(void 0,"","timeout")},c.timeout));return{}};m.ajax=function(c){var d,p=m.Deferred();"string"===typeof c&&(c={url:c});var e=c||
  177.45 +{},f;for(f in m.ajaxSettings)"undefined"===typeof e[f]&&(e[f]=m.ajaxSettings[f]);try{e.url||(e.url=a.location);e.headers||(e.headers={});if(!("async"in e)||!1!==e.async)e.async=!0;e.processData&&m.isObject(e.data)&&(e.data=m.param(e.data));"get"===e.type.toLowerCase()&&e.data&&(-1===e.url.indexOf("?")?e.url+="?"+e.data:e.url+="&"+e.data);e.data&&(!e.contentType&&!1!==e.contentType)&&(e.contentType="application/x-www-form-urlencoded; charset=UTF-8");if(e.dataType)switch(e.dataType){case "script":e.dataType=
  177.46 +"text/javascript, application/javascript";break;case "json":e.dataType="application/json";break;case "xml":e.dataType="application/xml, text/xml";break;case "html":e.dataType="text/html";break;case "text":e.dataType="text/plain";break;case "jsonp":return m.jsonP(c);default:e.dataType="text/html"}else e.dataType="text/html";if(/=\?/.test(e.url))return m.jsonP(e);null===e.crossDomain&&(e.crossDomain=/^([\w-]+:)?\/\/([^\/]+)/.test(e.url)&&RegExp.$2!==a.location.host);e.crossDomain||(e.headers=m.extend({"X-Requested-With":"XMLHttpRequest"},
  177.47 +e.headers));var t,h=e.context,g=/^([\w-]+:)\/\//.test(e.url)?RegExp.$1:a.location.protocol;d=new a.XMLHttpRequest;m.extend(d,p.promise);d.onreadystatechange=function(){var c=e.dataType;if(4===d.readyState){clearTimeout(t);var b,f=!1,k=d.getResponseHeader("content-type");k||(k="");if(200<=d.status&&300>d.status||0===d.status&&"file:"===g){if("application/json"===k||"application/json"===c&&!/^\s*$/.test(d.responseText))try{b=JSON.parse(d.responseText)}catch(P){f=P}else if(-1!==k.indexOf("javascript"))try{b=
  177.48 +d.responseText,a.eval(b)}catch(l){console.log(l)}else"application/xml, text/xml"===c?b=d.responseXML:"text/html"===c?(b=d.responseText,m.parseJS(b)):b=d.responseText;0===d.status&&0===b.length&&(f=!0);f?(e.error.call(h,d,"parsererror",f),p.reject.call(h,d,"parsererror",f)):(p.resolve.call(h,b,"success",d),e.success.call(h,b,"success",d))}else f=!0,p.reject.call(h,d,"error"),e.error.call(h,d,"error");e.complete.call(h,d,f?"error":"success")}};d.open(e.type,e.url,e.async);e.withCredentials&&(d.withCredentials=
  177.49 +!0);e.contentType&&(e.headers["Content-Type"]=e.contentType);for(var k in e.headers)"string"===typeof e.headers[k]&&d.setRequestHeader(k,e.headers[k]);if(!1===e.beforeSend.call(h,d,e))return d.abort(),!1;0<e.timeout&&(t=setTimeout(function(){d.onreadystatechange=b;d.abort();e.error.call(h,d,"timeout")},e.timeout));d.send(e.data)}catch(l){p.resolve(h,d,"error",l),e.error.call(h,d,"error",l)}return d};m.get=function(a,c){return this.ajax({url:a,success:c})};m.post=function(a,c,d,b){m.isFunction(c)&&
  177.50 +(d=c,c={});"string"===typeof d&&(b=d,d=function(){});b===q&&(b="html");return this.ajax({url:a,type:"POST",data:c,dataType:b,success:d})};m.getJSON=function(a,c,d,b){"function"===typeof c&&(b=d,d=c,c={});return this.ajax({url:a,data:c,success:d,error:b,dataType:"json"})};m.getScript=function(a,c){if(/^([\w-]+:)?\/\/([^\/]+)/.test(a)){var d=m.Deferred(),b=m.create("script",{async:!0,src:a}).get(0);b.onload=function(){c&&c();d.resolve.call(this,"success");m(this).remove()};b.onerror=function(){m(this).remove();
  177.51 +d.reject.call(this,"success")};r.head.appendChild(b);return d.promise}return this.ajax({url:a,success:c,dataType:"script"})};m.param=function(a,c){var d=[];if(a instanceof v)a.each(function(){d.push((c?c+"["+this.id+"]":this.id)+"="+encodeURIComponent(this.value))});else for(var b in a)if(!m.isFunction(a[b])){var e=c?c+"["+b+"]":b,p=a[b];d.push(m.isObject(p)?m.param(p,e):e+"="+encodeURIComponent(p))}return d.join("&")};m.parseJSON=function(a){return JSON.parse(a)};m.parseXML=function(a){if(D)MSApp.execUnsafeLocalFunction(function(){return(new DOMParser).parseFromString(a,
  177.52 +"text/xml")});else return(new DOMParser).parseFromString(a,"text/xml")};e(m,navigator.userAgent);m.__detectUA=e;m.uuid=function(){var a=function(){return(65536*(1+Math.random())|0).toString(16).substring(1)};return a()+a()+"-"+a()+"-"+a()+"-"+a()+"-"+a()+a()+a()};m.getCssMatrix=function(c){m.is$(c)&&(c=c.get(0));var d=a.WebKitCSSMatrix||a.MSCSSMatrix;if(c===q)return d?new d:{a:0,b:0,c:0,d:0,e:0,f:0};c=a.getComputedStyle(c);c=c.webkitTransform||c.transform||c[m.feat.cssPrefix+"Transform"];return d?
  177.53 +new d(c):c?(d=c.replace(/[^0-9\-.,]/g,"").split(","),{a:+d[0],b:+d[1],c:+d[2],d:+d[3],e:+d[4],f:+d[5]}):{a:0,b:0,c:0,d:0,e:0,f:0}};m.create=function(a,c){var d,b=new v;if(c||"<"!==a[0]){c.html&&(c.innerHTML=c.html,delete c.html);d=r.createElement(a);for(var e in c)d[e]=c[e];b[b.length++]=d}else d=r.createElement("div"),D?MSApp.execUnsafeLocalFunction(function(){d.innerHTML=a.trim()}):d.innerHTML=a,g(d.childNodes,b);return b};m.query=function(a,c){if(!a)return new v;c=c||r;return(new v).selector(a,
  177.54 +c)};var x=[],Q=1;m.event={add:y,remove:u};m.fn.bind=function(a,c){for(var d=0,b=this.length;d<b;d++)y(this[d],a,c);return this};m.fn.unbind=function(a,c){for(var d=0,b=this.length;d<b;d++)u(this[d],a,c);return this};m.fn.one=function(a,c){return this.each(function(d,b){y(this,a,c,null,function(a,c){return function(){u(b,c,a);return a.apply(b,arguments)}})})};var S=function(){return!0},T=function(){return!1},R={preventDefault:"isDefaultPrevented",stopImmediatePropagation:"isImmediatePropagationStopped",
  177.55 +stopPropagation:"isPropagationStopped"};m.fn.delegate=function(a,c,d,b){m.isFunction(d)&&(b=d,d=null);for(var e=0,p=this.length;e<p;e++)z(this[e],c,b,a,d);return this};m.fn.undelegate=function(a,c,d){for(var b=0,e=this.length;b<e;b++)u(this[b],c,d,a);return this};m.fn.on=function(a,c,d,b){m.isFunction(d)&&(b=d,d=null);return c===q||m.isFunction(c)?this.bind(a,c):this.delegate(c,a,d,b)};m.fn.off=function(a,c,d){return c===q||m.isFunction(c)?this.unbind(a,c):this.undelegate(c,a,d)};m.fn.trigger=function(a,
  177.56 +c,d){"string"===typeof a&&(d=d||{},a=p(a),d.ns=a.ns,a=m.Event(a.e,d));a.data=c;c=0;for(d=this.length;c<d;c++)this[c].dispatchEvent(a);return this};m.Event=function(a,c){var d=r.createEvent("Events"),b=!0;if(c)for(var e in c)"bubbles"===e?b=!!c[e]:d[e]=c[e];d.initEvent(a,b,!0,null,null,null,null,null,null,null,null,null,null,null,null);return d};m.bind=function(a,c,d){if(a){a.__events||(a.__events={});m.isArray(c)||(c=[c]);for(var b=0;b<c.length;b++)a.__events[c[b]]||(a.__events[c[b]]=[]),a.__events[c[b]].push(d)}};
  177.57 +m.trigger=function(a,c,d){if(a){var b=!0;if(!a.__events)return b;m.isArray(c)||(c=[c]);m.isArray(d)||(d=[]);for(var e=0;e<c.length;e++)if(a.__events[c[e]])for(var p=a.__events[c[e]].slice(0),f=0;f<p.length;f++)m.isFunction(p[f])&&!1===p[f].apply(a,d)&&(b=!1);return b}};m.unbind=function(a,c,d){if(a.__events)if(c==q)delete a.__events;else{m.isArray(c)||(c=[c]);for(var b=0;b<c.length;b++)if(a.__events[c[b]])for(var e=a.__events[c[b]],p=0;p<e.length;p++)if(d==q&&delete e[p],e[p]===d){e.splice(p,1);break}}};
  177.58 +m.proxy=function(a,c,d){return function(){return d?a.apply(c,d):a.apply(c,arguments)}};var W=function(a,c){for(var d=0;d<a.length;d++)A(a[d],c)};m.cleanUpContent=function(a,c,d){if(a){var b=a.childNodes;b&&0<b.length&&m.asap(W,{},[K.apply(b,[0]),d]);c&&s(a,d)}};var H=[],M=[],N=[];m.asap=function(c,d,b){if(!m.isFunction(c))throw"$.asap - argument is not a valid function";H.push(c);M.push(d?d:{});N.push(b?b:[]);a.postMessage("afm-asap","*")};a.addEventListener("message",function(c){c.source===a&&"afm-asap"===
  177.59 +c.data&&(c.stopPropagation(),0<H.length&&H.shift().apply(M.shift(),N.shift()))},!0);var O={};m.parseJS=function(c){if(c){if("string"===typeof c){var d=r.createElement("div");D?MSApp.execUnsafeLocalFunction(function(){d.innerHTML=c}):d.innerHTML=c;c=d}var b=c.getElementsByTagName("script");c=null;for(var e=0;e<b.length;e++)if(0<b[e].src.length&&!O[b[e].src]&&!D){var p=r.createElement("script");p.type=b[e].type;p.src=b[e].src;r.getElementsByTagName("head")[0].appendChild(p);O[b[e].src]=1;p=null}else a.eval(b[e].innerHTML)}};
  177.60 +"click keydown keyup keypress submit load resize change select error".split(" ").forEach(function(a){m.fn[a]=function(c){return c?this.bind(a,c):this.trigger(a)}});["focus","blur"].forEach(function(a){m.fn[a]=function(c){if(0!==this.length){if(c)this.bind(a,c);else for(c=0;c<this.length;c++)try{this[c][a]()}catch(d){}return this}}});m.Deferred=function(){return{reject:function(){},resolve:function(){},promise:{then:function(){},fail:function(){}}}};return m}(window);window.jq=af;"$"in window||(window.$=
  177.61 +af);"function"===typeof define&&define.amd?define("appframework",[],function(){return af}):"undefined"!==typeof module&&module.exports&&(module.exports.af=af,module.exports.$=af);window.numOnly||(window.numOnly=function(a){if(void 0===a||""===a)return 0;if(isNaN(parseFloat(a)))if(a.replace)a=a.replace(/[^0-9.-]/g,"");else return 0;return parseFloat(a)})};/*
  177.62 + BSD - https://github.com/cburgmer/ayepromise/commit/299eb65b5ce227873b2f1724c8f5b2bfa723680a
  177.63 + https://github.com/cburgmer/ayepromise
  177.64 +*/
  177.65 +(function(a,n){a.ayepromise=n()})(this,function(){var a={},n=function(){var a=!1;return function(h){return function(){a||(a=!0,h.apply(null,arguments))}}},l=function(a){var h=a&&a.then;if(null!==a&&"object"===typeof a&&"function"===typeof h)return function(){return h.apply(a,arguments)}},k=function(f,h){var g=a.defer(),b=function(a,c){setTimeout(function(){var d;try{d=a(c)}catch(b){g.reject(b);return}d===g.promise?g.reject(new TypeError("Cannot resolve promise with itself")):g.resolve(d)},1)};return{promise:g.promise,
  177.66 +callFulfilled:function(a){f&&f.call?b(f,a):g.resolve(a)},callRejected:function(a){h&&h.call?b(h,a):g.reject(a)}}};a.defer=function(){var a=0,h,g=[],b=function(c){a=1;h=c;g.forEach(function(a){a.callFulfilled(h)})},e=function(c){a=2;h=c;g.forEach(function(a){a.callRejected(h)})},c=function(c,d){var b=k(c,d);g.push(b);1===a?b.callFulfilled(h):2===a&&b.callRejected(h);return b.promise},d=function(a){var c;try{c=l(a)}catch(p){e(p);return}if(c){a=c;c=n();try{a(c(d),c(e))}catch(f){c(e)(f)}}else b(a)},p=
  177.67 +n();return{resolve:p(d),reject:p(e),promise:{then:c,fail:function(a){return c(null,a)}}}};return a});(function(a){a.Deferred=ayepromise.defer})(af);/*
  177.68 + MIT - https://github.com/darius/requestAnimationFrame/commit/4f27a5a21902a883330da4663bea953b2f96cb15#diff-9879d6db96fd29134fc802214163b95a
  177.69 +
  177.70 +    http://paulirish.com/2011/requestanimationframe-for-smart-animating/
  177.71 +    http://my.opera.com/emoller/blog/2011/12/20/requestanimationframe-for-smart-er-animating
  177.72 +    requestAnimationFrame polyfill by Erik M?ller. fixes from Paul Irish and Tino Zijdel
  177.73 +    MIT license
  177.74 +
  177.75 +    Adapted from https://gist.github.com/paulirish/1579671 which derived from 
  177.76 +    http://paulirish.com/2011/requestanimationframe-for-smart-animating/
  177.77 +    http://my.opera.com/emoller/blog/2011/12/20/requestanimationframe-for-smart-er-animating
  177.78 +
  177.79 +    requestAnimationFrame polyfill by Erik M?ller.
  177.80 +    Fixes from Paul Irish, Tino Zijdel, Andrew Mao, Klemen Slavi?, Darius Bacon
  177.81 + 2011 - Intel
  177.82 + Intel
  177.83 + 2011 Intel
  177.84 + @author Intel
  177.85 + @version 2.0
  177.86 +*/
  177.87 +(function(a){a.fn.actionsheet=function(a){for(var k,f=0;f<this.length;f++)k=new n(this[f],a);return 1===this.length?k:this};var n=function(){var l=function(k,f){if(this.el="string"===typeof k||k instanceof String?document.getElementById(k):k){if(this instanceof l){if("object"===typeof f)for(var h in f)this[h]=f[h]}else return new l(k,f);var g=this,b;h=function(){};if("string"===typeof f)b=a("<div id='af_actionsheet'><div style='width:100%'>"+f+"<a href='javascript:;' class='cancel'>Cancel</a></div></div>");
  177.88 +else if("object"===typeof f){b=a("<div id='af_actionsheet'><div style='width:100%'></div></div>");var e=a(b.children().get(0));f.push({text:"Cancel",cssClasses:"cancel"});for(var c=0;c<f.length;c++){var d=a("<a href='javascript:;'>"+(f[c].text||"TEXT NOT ENTERED")+"</a>");d[0].onclick=f[c].handler||h;f[c].cssClasses&&0<f[c].cssClasses.length&&d.addClass(f[c].cssClasses);e.append(d)}}a(k).find("#af_actionsheet").remove();a(k).find("#af_action_mask").remove();a(k).append(b);b.vendorCss("Transition",
  177.89 +"all 0ms");b.cssTranslate("0,0");b.css("top",window.innerHeight+"px");this.el.style.overflow="hidden";b.on("click","a",function(){g.hideSheet();return!1});this.activeSheet=b;a(k).append("<div id='af_action_mask' style='position:absolute;top:0px;left:0px;right:0px;bottom:0px;z-index:9998;background:rgba(0,0,0,.4)'/>");setTimeout(function(){b.vendorCss("Transition","all 300ms");b.cssTranslate("0,"+-b.height()+"px")},10);a("#af_action_mask").bind("touchstart touchmove touchend click",function(a){a.preventDefault();
  177.90 +a.stopPropagation()})}else window.alert("Could not find element for actionsheet "+k)};l.prototype={activeSheet:null,hideSheet:function(){var k=this;this.activeSheet.off("click","a",function(){k.hideSheet()});a(this.el).find("#af_action_mask").unbind("click").remove();this.activeSheet.vendorCss("Transition","all 0ms");var f=this.activeSheet,h=this.el;setTimeout(function(){f.vendorCss("Transition","all 300ms");f.cssTranslate("0,0px");setTimeout(function(){f.remove();f=null;h.style.overflow="none"},
  177.91 +500)},10)}};return l}()})(af);
  177.92 +(function(a){var n=[],l=function(b,e){var c,d;c="string"===typeof b||b instanceof String?document.getElementById(b):a.is$(b)?b[0]:b;c.afCSS3AnimateId||(c.afCSS3AnimateId=a.uuid());d=c.afCSS3AnimateId;n[d]?(n[d].animate(e),c=n[d]):(c=g(c,e),n[d]=c);return c};a.fn.css3Animate=function(a){!a.complete&&a.callback&&(a.complete=a.callback);var e=l(this[0],a);a.complete=null;a.sucess=null;a.failure=null;for(var c=1;c<this.length;c++)e.link(this[c],a);return e};a.css3AnimateQueue=function(){return new g.queue};
  177.93 +var k=a.feat.cssTransformStart,f=a.feat.cssTransformEnd,h=a.feat.cssPrefix.replace(/-/g,"")+"TransitionEnd",h=a.os.fennec||""===a.feat.cssPrefix||a.os.ie?"transitionend":h,h=h.replace(h.charAt(0),h.charAt(0).toLowerCase()),g=function(){var b=function(e,c){if(!(this instanceof b))return new b(e,c);this.callbacksStack=[];this.activeEvent=null;this.countStack=0;this.isActive=!1;this.el=e;this.linkFinishedProxy=a.proxy(this.linkFinished,this);if(this.el){this.animate(c);var d=this;af(this.el).bind("destroy",
  177.94 +function(){var a=d.el.afCSS3AnimateId;d.callbacksStack=[];n[a]&&delete n[a]})}};b.prototype={animate:function(b){this.isActive&&this.cancel();this.isActive=!0;if(b){var c=!!b.addClass,d,p,t=numOnly(b.time);if(c)b.removeClass?af(this.el).replaceClass(b.removeClass,b.addClass):af(this.el).addClass(b.addClass);else{0===t&&(b.time=0);b.y||(b.y=0);b.x||(b.x=0);b.previous&&(d=new a.getCssMatrix(this.el),b.y+=numOnly(d.f),b.x+=numOnly(d.e));b.origin||(b.origin="0% 0%");b.scale||(b.scale="1");b.rotateY||
  177.95 +(b.rotateY="0");b.rotateX||(b.rotateX="0");b.skewY||(b.skewY="0");b.skewX||(b.skewX="0");b.timingFunction||(b.timingFunction="linear");if("number"===typeof b.x||-1===b.x.indexOf("%")&&-1===b.x.toLowerCase().indexOf("px")&&-1===b.x.toLowerCase().indexOf("deg"))b.x=parseInt(b.x,10)+"px";if("number"===typeof b.y||-1===b.y.indexOf("%")&&-1===b.y.toLowerCase().indexOf("px")&&-1===b.y.toLowerCase().indexOf("deg"))b.y=parseInt(b.y,10)+"px";d="translate"+k+b.x+","+b.y+f+" scale("+parseFloat(b.scale)+") rotate("+
  177.96 +b.rotateX+")";a.os.opera||(d+=" rotateY("+b.rotateY+")");d+=" skew("+b.skewX+","+b.skewY+")";this.el.style[a.feat.cssPrefix+"Transform"]=d;this.el.style[a.feat.cssPrefix+"BackfaceVisibility"]="hidden";void 0!==b.opacity&&(this.el.style.opacity=b.opacity);b.width&&(this.el.style.width=b.width);b.height&&(this.el.style.height=b.height);this.el.style[a.feat.cssPrefix+"TransitionProperty"]="all";-1===(""+b.time).indexOf("s")?(d="ms",p=b.time+d):-1!==b.time.indexOf("ms")?(d="ms",p=b.time):(d="s",p=b.time+
  177.97 +d);b.delay&&(this.el.style[a.feat.cssPrefix+"TransitionDelay"]=b.delay);this.el.style[a.feat.cssPrefix+"TransitionDuration"]=p;this.el.style[a.feat.cssPrefix+"TransitionTimingFunction"]=b.timingFunction;this.el.style[a.feat.cssPrefix+"TransformOrigin"]=b.origin}this.callbacksStack.push({complete:b.complete,success:b.success,failure:b.failure});this.countStack++;var g=this;p=window.getComputedStyle(this.el);c&&(c=p[a.feat.cssPrefix+"TransitionDuration"],t=numOnly(c),b.time=t,-1!==c.indexOf("ms")?d=
  177.98 +"ms":(d="s",b.time*=1E3));0===t||"ms"===d&&5>t||"none"===p.display?a.asap(a.proxy(this.finishAnimation,this,[!1])):(this.activeEvent=function(a){clearTimeout(g.timeout);g.finishAnimation(a);g.el.removeEventListener(h,g.activeEvent,!1)},g.timeout=setTimeout(this.activeEvent,numOnly(b.time)+50),this.el.addEventListener(h,this.activeEvent,!1))}else window.alert("Please provide configuration options for animation of "+this.el.id)},addCallbackHook:function(a){a&&this.callbacksStack.push(a);this.countStack++;
  177.99 +return this.linkFinishedProxy},linkFinished:function(a){a?this.cancel():this.finishAnimation()},finishAnimation:function(a){a&&a.preventDefault&&a.preventDefault();this.isActive&&(this.countStack--,0===this.countStack&&this.fireCallbacks(!1))},fireCallbacks:function(a){this.clearEvents();var c=this.callbacksStack;this.cleanup();for(var d=0;d<c.length;d++){var b=c[d].complete,f=c[d].success,h=c[d].failure;"function"===typeof b&&b(a);a&&"function"===typeof h?h():"function"===typeof f&&f()}},cancel:function(){this.isActive&&
 177.100 +this.fireCallbacks(!0)},cleanup:function(){this.callbacksStack=[];this.isActive=!1;this.countStack=0},clearEvents:function(){this.activeEvent&&this.el.removeEventListener(h,this.activeEvent,!1);this.activeEvent=null},link:function(a,c){var d={complete:c.complete,success:c.success,failure:c.failure};c.complete=this.addCallbackHook(d);c.success=null;c.failure=null;l(a,c);c.complete=d.complete;c.success=d.success;c.failure=d.failure;return this}};return b}();g.queue=function(){return{elements:[],push:function(a){this.elements.push(a)},
 177.101 +pop:function(){return this.elements.pop()},run:function(){var a=this;if(0!==this.elements.length&&("function"===typeof this.elements[0]&&this.shift()(),0!==this.elements.length)){var e=this.shift();0<this.elements.length&&(e.complete=function(c){c||a.run()});g(document.getElementById(e.id),e)}},shift:function(){return this.elements.shift()}}}})(af);Date.now||(Date.now=function(){return(new Date).getTime()});
 177.102 +(function(){for(var a=["webkit","moz","ms"],n=0;n<a.length&&!window.requestAnimationFrame;++n){var l=a[n];window.requestAnimationFrame=window[l+"RequestAnimationFrame"];window.cancelAnimationFrame=window[l+"CancelAnimationFrame"]||window[l+"CancelRequestAnimationFrame"]}if(/iP(ad|hone|od).*OS 6/.test(window.navigator.userAgent)||!window.requestAnimationFrame||!window.cancelAnimationFrame){var k=0;window.requestAnimationFrame=function(a){var h=Date.now(),g=Math.max(k+16,h);return setTimeout(function(){a(k=
 177.103 +g)},g-h)};window.cancelAnimationFrame=clearTimeout}})();
 177.104 +(function(a){var n=[];a.fn.animateCss=function(f){var h,g="string"===typeof this[0]||this[0]instanceof String?document.getElementById(this[0]):a.is$(this[0])?this[0][0]:this[0];g.afAnimateId||(g.afAnimateId=a.uuid());h=g.afAnimateId;n[h]?(f&&n[h].animate(f),f=n[h]):(f=l(g,f),n[h]=f);return f};var l=function(a,h){if(!(this instanceof l))return new l(a,h);if(this.el=a){h&&this.animate(h);var g=this;af(this.el).bind("destroy",function(){var a=g.el.afAnimateId;n[a]&&delete n[a]})}};l.prototype={animationTimer:null,
 177.105 +isAnimating:!1,startX:0,startY:0,runTime:0,endX:0,endY:0,currX:0,currY:0,animationStartTime:0,pauseTime:0,completeCB:null,easingFn:"linear",animateOpts:{},updateCb:null,animate:function(f){this.isAnimating||(this.isAnimating=!0,window.cancelAnimationFrame(this.animationTimer),f||(f={x:0,y:0,duration:0}),this.easingFn=f.easing||"linear",this.completeCB=f.complete||null,this.updateCB=f.update||null,this.runTime=numOnly(f.duration),f.complete&&delete f.complete,this.animateOpts=f,this.startTime=Date.now(),
 177.106 +this.startMatrix=a.getCssMatrix(this.el),0===this.runTime&&this.doAnimate())},start:function(){this.doAnimate()},doAnimate:function(){var a=Date.now(),h,g=this;0===this.runTime||a>=this.startTime+this.runTime?(g.setPosition(this.animateOpts.x,this.animateOpts.y),g.isAnimating=!1,this.updateCB&&this.updateCB({x:this.animateOpts.x,y:this.animateOpts.y}),this.completeCB&&this.completeCB()):(a=(a-this.startTime)/this.runTime,h=k[this.easingFn](1<a?1:a),a=(this.animateOpts.x-this.startMatrix.e)*h+this.startMatrix.e,
 177.107 +h=(this.animateOpts.y-this.startMatrix.f)*h+this.startMatrix.f,this.setPosition(a,h),this.updateCB&&this.updateCB({x:a,y:h}),this.isAnimating&&(this.animationTimer=window.requestAnimationFrame(function(){g.doAnimate()})))},setPosition:function(f,h){this.el.style[a.feat.cssPrefix+"Transform"]="matrix3d( 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, "+f+", "+h+", 0, 1 )";this.currX=f;this.currY=h},stop:function(){this.isAnimating=!1;window.cancelAnimationFrame(this.animationTimer);this.pauseTime=Date.now()-this.startTime},
 177.108 +resume:function(){this.isAnimating=!0;this.startTime=Date.now()-this.pauseTime;this.doAnimate()}};var k={linear:function(a){return a},easeOutSine:function(a){return Math.sin(a*Math.PI/2)}}})(af);
 177.109 +(function(a){a.passwordBox=function(){return new n};var n=function(){this.oldPasswords={}};n.prototype={showPasswordPlainText:!1,getOldPasswords:function(l){var k=l&&document.getElementById(l)?document.getElementById(l):document;if(k){l=k.getElementsByTagName("input");for(k=0;k<l.length;k++)"password"===l[k].type&&a.os.webkit&&(l[k].type="text",a(l[k]).vendorCss("TextSecurity","disc"))}else window.alert("Could not find container element for passwordBox "+l)},changePasswordVisiblity:function(l,k){l=
 177.110 +parseInt(l,10);var f=document.getElementById(k);1===l?a(f).vendorCss("TextSecurity","none"):a(f).vendorCss("TextSecurity","disc");a.os.webkit||(f.type=1===l?"text":"password")}}})(af);
 177.111 +(function(a){function n(){if(a.os.android&&!a.os.chrome&&a.os.webkit){var f=!1;a.bind(a.touchLayer,["cancel-enter-edit","exit-edit"],function(){if(f){f=!1;for(var a in l){var b;l[a].el?b=!0:(delete l[a],b=!1);b&&l[a].androidFormsMode&&l[a].stopFormsMode()}}})}k=!0}var l=[];a.fn.scroller=function(h){for(var g,b,e=0;e<this.length;e++)g=this[e],g.afScrollerId||(g.afScrollerId=a.uuid()),b=g.afScrollerId,l[b]?g=l[b]:(h||(h={}),a.feat.nativeTouchScroll||(h.useJsScroll=!0),g=f(this[e],h),l[b]=g);return 1===
 177.112 +this.length?g:this};var k=!1,f=function(){function f(c,d){var b=document.createElement("div");b.style.position="absolute";b.style.width=c+"px";b.style.height=d+"px";b.style[a.feat.cssPrefix+"BorderRadius"]="2px";b.style.borderRadius="2px";b.style.display="none";b.className="scrollBar";b.style.background="black";return b}var g,b,e=function(c,d){this.el=c;this.afEl=a(this.el);for(var b in d)this[b]=d[b]};e.prototype={refresh:!1,refreshContent:"Pull to Refresh",refreshHangTimeout:2E3,refreshHeight:60,
 177.113 +refreshElement:null,refreshCancelCB:null,refreshRunning:!1,scrollTop:0,scrollLeft:0,preventHideRefresh:!0,verticalScroll:!0,horizontalScroll:!1,refreshTriggered:!1,moved:!1,eventsActive:!1,rememberEventsActive:!1,scrollingLocked:!1,autoEnable:!0,blockFormsFix:!1,loggedPcentY:0,loggedPcentX:0,infinite:!1,infiniteEndCheck:!1,infiniteTriggered:!1,scrollSkip:!1,scrollTopInterval:null,scrollLeftInterval:null,bubbles:!0,lockBounce:!1,initScrollProgress:!1,_scrollTo:function(a,d){d=parseInt(d,10);if(0===
 177.114 +d||isNaN(d))this.el.scrollTop=Math.abs(a.y),this.el.scrollLeft=Math.abs(a.x);else{var b=(this.el.scrollTop-a.y)/Math.ceil(d/10),e=(this.el.scrollLeft-a.x)/Math.ceil(d/10),f=this,h=Math.ceil(this.el.scrollTop-a.y)/b,g=Math.ceil(this.el.scrollLeft-a.x)/b,k=0,l=0;f.scrollTopInterval=window.setInterval(function(){f.el.scrollTop-=b;l++;l>=h&&(f.el.scrollTop=a.y,clearInterval(f.scrollTopInterval))},10);f.scrollLeftInterval=window.setInterval(function(){f.el.scrollLeft-=e;k++;k>=g&&(f.el.scrollLeft=a.x,
 177.115 +clearInterval(f.scrollLeftInterval))},10)}},enable:function(){},disable:function(){},hideScrollbars:function(){},addPullToRefresh:function(){},_scrollToTop:function(a){this._scrollTo({x:0,y:0},a)},_scrollToBottom:function(a){this._scrollTo({x:0,y:this.el.scrollHeight-this.el.offsetHeight},a)},scrollToBottom:function(a){return this._scrollToBottom(a)},scrollToTop:function(a){return this._scrollToTop(a)},init:function(c,d){this.el=c;this.afEl=a(this.el);this.defaultProperties();for(var b in d)this[b]=
 177.116 +d[b];var e=this,f=function(){e.eventsActive&&(!a.feat.nativeTouchScroll&&(!a.ui||a.ui.activeDiv===e.container))&&e.adjustScroll()};this.afEl.bind("destroy",function(){e.disable(!0);var c=e.el.afScrollerId;l[c]&&delete l[c];a.unbind(a.touchLayer,"orientationchange-reshape",f)});a.bind(a.touchLayer,"orientationchange-reshape",f);a(window).bind("resize",f)},needsFormsFix:function(c){return this.useJsScroll&&this.isEnabled()&&"none"!==this.el.style.display&&0<a(c).closest(this.afEl).size()},handleEvent:function(a){if(!this.scrollingLocked)switch(a.type){case "touchstart":clearInterval(this.scrollTopInterval);
 177.117 +this.preventHideRefresh=!this.refreshRunning;this.moved=!1;if(a.target.getAttribute("no-scroll"))return a.preventDefault();this.onTouchStart(a);this.bubbles||a.stopPropagation();break;case "touchmove":this.onTouchMove(a);this.bubbles||a.stopPropagation();break;case "touchend":this.onTouchEnd(a);this.bubbles||a.stopPropagation();break;case "scroll":this.onScroll(a)}},coreAddPullToRefresh:function(c){c&&(this.refreshElement=c);null===this.refreshElement?(c=document.getElementById(this.container.id+
 177.118 +"_pulldown"),c=null!==c?a(c):a("<div id='"+this.container.id+"_pulldown' class='afscroll_refresh' style='position:relative;height:60px;text-align:center;line-height:60px;font-weight:bold;'>"+this.refreshContent+"</div>")):c=a(this.refreshElement);c=c.get(0);this.refreshContainer=a("<div style='overflow:hidden;height:0;width:100%;display:none;background:inherit;-webkit-backface-visibility: hidden !important;'></div>");a(this.el).prepend(this.refreshContainer.prepend(c));this.refreshContainer=this.refreshContainer[0]},
 177.119 +fireRefreshRelease:function(c){if(this.refresh&&c&&(this.setRefreshContent("Refreshing..."),c=!1!==a.trigger(this,"refresh-release",[c]),this.preventHideRefresh=!1,this.refreshRunning=!0,c)){var d=this;0<this.refreshHangTimeout&&(this.refreshCancelCB=setTimeout(function(){d.hideRefresh()},this.refreshHangTimeout))}},setRefreshContent:function(c){a(this.container).find(".afscroll_refresh").html(c)},lock:function(){this.scrollingLocked||(this.scrollingLocked=!0,(this.rememberEventsActive=this.eventsActive)&&
 177.120 +this.disable())},unlock:function(){this.scrollingLocked&&(this.scrollingLocked=!1,this.rememberEventsActive&&this.enable())},scrollToItem:function(c,d){a.is$(c)||(c=a(c));var b,e;"bottom"===d?(b=c.offset(),b=b.top-this.afEl.offset().bottom+b.height,b+=4):(b=c.offset().top,b-=document.body.scrollTop,e=this.afEl.offset().top,document.body.scrollTop<e&&(b-=e),b-=4);this.scrollBy({y:b,x:0},0)},setPaddings:function(c,d){var b=a(this.el),e=numOnly(b.css("paddingTop"));b.css("paddingTop",c+"px").css("paddingBottom",
 177.121 +d+"px");this.scrollBy({y:c-e,x:0})},divide:function(a,d){return 0!==d?a/d:0},isEnabled:function(){return this.eventsActive},addInfinite:function(){this.infinite=!0},clearInfinite:function(){this.infiniteTriggered=!1;this.scrollSkip=!0},scrollTo:function(a,d){return this._scrollTo(a,d)},updateP2rHackPosition:function(){}};g=function(c,d){this.init(c,d);if(d.hasParent)this.container=this.el.parentNode;else{var b=a.create("div",{});b.append(a(this.el).contents());a(this.el).append(b);this.container=
 177.122 +this.el;this.el=b.get(0)}this.container.afScrollerId=c.afScrollerId;this.afEl=a(this.container);"hidden"!==this.container.style.overflow&&(this.container.style.overflow="hidden");this.addPullToRefresh(null,!0);d.autoEnable&&(this.autoEnable=d.autoEnable);this.autoEnable&&this.enable(!0);this.verticalScroll&&(!0===this.verticalScroll&&!0===this.scrollBars)&&(b=f(5,20),b.style.top="0px",this.vScrollCSS&&(b.className=this.vScrollCSS),b.style.display="none",this.container.appendChild(b),this.vscrollBar=
 177.123 +b);this.horizontalScroll&&(!0===this.horizontalScroll&&!0===this.scrollBars)&&(b=f(20,5),b.style.bottom="0px",this.hScrollCSS&&(b.className=this.hScrollCSS),b.style.display="none",this.container.appendChild(b),this.hscrollBar=b);this.horizontalScroll&&(this.el.style.cssFloat="left");this.el.hasScroller=!0};b=function(c,d){d.nativeParent&&(c=c.parentNode);this.init(c,d);var b=a(c);if(!0===d.replaceParent){var e=b.parent();b.css("height",e.height()).css("width",e.width());b.insertBefore(b.parent());
 177.124 +e.remove()}this.container=this.el;b.css("-webkit-overflow-scrolling","touch");d.autoEnable&&(this.autoEnable=d.autoEnable);this.autoEnable&&this.enable()};b.prototype=new e;g.prototype=new e;b.prototype.defaultProperties=function(){this.refreshContainer=null;this.dX=this.cX=this.dY=this.cY=0;this.cancelPropagation=!1;this.yReset=this.xReset=this.loggedPcentX=this.loggedPcentY=0;var a=this;this.adjustScrollOverflowProxy=function(){a.afEl.css("overflow","auto");a.afEl.parent().css("overflow","hidden")}};
 177.125 +b.prototype.enable=function(a){this.eventsActive||(this.eventsActive=!0,this.el.style.overflow="auto",a?this.scrollToTop(0):this.adjustScroll(),this.el.addEventListener("touchstart",this,!1),this.el.addEventListener("scroll",this,!1),this.updateP2rHackPosition())};b.prototype.disable=function(c){this.eventsActive&&(this.logPos(this.el.scrollLeft,this.el.scrollTop),!c&&!a.ui&&(this.el.style.overflow="hidden"),this.el.removeEventListener("touchstart",this,!1),this.el.removeEventListener("touchmove",
 177.126 +this,!1),this.el.removeEventListener("touchend",this,!1),this.el.removeEventListener("scroll",this,!1),this.eventsActive=!1)};b.prototype.addPullToRefresh=function(a,d){d||(this.refresh=!0);this.refresh&&!0===this.refresh&&(this.coreAddPullToRefresh(a),this.refreshContainer.style.position="absolute",this.refreshContainer.style.top="-60px",this.refreshContainer.style.height="60px",this.refreshContainer.style.display="block",this.updateP2rHackPosition())};b.prototype.updateP2rHackPosition=function(){if(!this.refresh)return a(this.el).find(".p2rhack").remove();
 177.127 +var c=a(this.el).find(".p2rhack");0===c.length&&(a(this.el).append("<div class='p2rhack' style='position:absolute;width:1px;height:1px;opacity:0;background:transparent;z-index:-1;-webkit-transform:translate3d(-1px,0,0);'></div>"),c=a(this.el).find(".p2rhack"));c.css("top",this.el.scrollHeight+this.refreshHeight+1+"px")};b.prototype.onTouchStart=function(a){this.lastScrollInfo={top:0};this.xReset=this.yReset=0;this.verticalScroll&&(0===this.el.scrollTop&&this.refresh&&(this.el.scrollTop=1,this.yReset=
 177.128 +-1),this.el.scrollTop===this.el.scrollHeight-this.el.clientHeight&&this.infinite&&(this.el.scrollTop-=1,this.yReset=1));this.horizontalScroll&&(0===this.el.scrollLeft&&(this.el.scrollLeft=1,this.xReset=-1),this.el.scrollLeft===this.el.scrollWidth-this.el.clientWidth&&(this.el.scrollLeft-=1,this.xReset=1));this.refreshCancelCB&&clearTimeout(this.refreshCancelCB);this.refresh&&this.el.addEventListener("touchend",this,!1);this.el.addEventListener("touchmove",this,!1);this.dY=a.touches[0].pageY;this.dX=
 177.129 +a.touches[0].pageX;this.startTop=this.el.scrollTop;this.startLeft=this.el.scrollLeft;(this.refresh||this.infinite)&&this.refresh&&0>this.dY&&this.showRefresh()};b.prototype.onTouchMove=function(c){var d=c.touches[0].pageY-this.dY,b=c.touches[0].pageX-this.dX,e=this.el.scrollHeight-this.el.scrollTop===this.el.clientHeight&&0>d,f=this.el.scrollWidth-this.el.scrollLeft===this.el.clientWidth&&0>b,h="input"!==c.target.tagName.toLowerCase();this.verticalScroll&&0===this.startTop&&0===this.el.scrollTop&&
 177.130 +0<d&&h&&c.preventDefault();this.horizontalScroll&&0===this.startTop&&0===this.el.scrollLeft&&0<b&&h&&c.preventDefault();this.verticalScroll&&e&&h&&c.preventDefault();this.horizontalScroll&&f&&h&&c.preventDefault();this.moved||(a.trigger(this,"scrollstart",[this.el,{x:b,y:d}]),a.trigger(a.touchLayer,"scrollstart",[this.el,{x:b,y:d}]),this.refresh||this.el.addEventListener("touchend",this,!1),this.moved=!0);this.horizontalScroll&&Math.abs(d)>Math.abs(b)&&c.preventDefault();this.refresh&&this.el.scrollTop<
 177.131 +-this.refreshHeight?this.showRefresh():this.refresh&&this.refreshTriggered&&this.refreshRunning&&this.el.scrollTop>this.refreshHeight?(this.refreshRunning=this.refreshTriggered=!1,this.refreshCancelCB&&clearTimeout(this.refreshCancelCB),this.hideRefresh(!1),this.setRefreshContent("Pull to Refresh"),a.trigger(this,"refresh-cancel")):this.refresh&&(this.refreshTriggered&&!this.refreshRunning&&this.el.scrollTop>-this.refreshHeight)&&(this.refreshRunning=this.refreshTriggered=!1,this.refreshCancelCB&&
 177.132 +clearTimeout(this.refreshCancelCB),this.hideRefresh(!1),this.setRefreshContent("Pull to Refresh"),a.trigger(this,"refresh-cancel"));this.cY=d;this.cX=b;this.lastScrollInfo.top=this.cY;this.initScrollProgress&&(a.trigger(this,"scroll",[{x:-this.el.scrollLeft,y:-this.el.scrollTop}]),a.trigger(a.touchLayer,"scroll",[{x:-this.el.scrollLeft,y:-this.el.scrollTop}]))};b.prototype.showRefresh=function(){this.refreshTriggered||(this.refreshTriggered=!0,this.setRefreshContent("Release to Refresh"),a.trigger(this,
 177.133 +"refresh-trigger"))};b.prototype.onTouchEnd=function(){var c=this.el.scrollTop<=-this.refreshHeight;this.fireRefreshRelease(c,!0);this.moved||(this.el.scrollTop+=this.yReset,this.el.scrollLeft+=this.xReset);if(c&&this.refresh){var d=a.create("<div style='height:"+this.el.clientHeight+this.refreshHeight+"px;width:1px;-webkit-transform:translated3d(-1px,0,0)'></div>");a(this.el).append(d);this.refreshContainer.style.top="0px";this.refreshContainer.style.position="";setTimeout(function(){d.remove()})}this.el.removeEventListener("touchmove",
 177.134 +this,!1);this.el.removeEventListener("touchend",this,!1);this.infiniteEndCheck=!0;this.infinite&&(!this.infiniteTriggered&&this.el.scrollTop>=this.el.scrollHeight-this.el.clientHeight)&&(this.infiniteTriggered=!0,a.trigger(this,"infinite-scroll"),this.infiniteEndCheck=!0);this.touchEndFired=!0;var b=this,e=this.el.scrollTop,f=this.el.scrollLeft,h=0;clearInterval(b.nativePolling);b.nativePolling=setInterval(function(){h++;25===h&&b.initScrollProgress&&(a.trigger(b,"scroll",[{x:-b.el.scrollLeft+b.cX,
 177.135 +y:-b.el.scrollTop+b.cY}]),a.trigger(a.touchLayer,"scroll",[{x:-b.el.scrollLeft+b.cX,y:-b.el.scrollTop+b.cY}]));if(200<=h)clearInterval(b.nativePolling),b.initScrollProgress&&(a.trigger(b,"scroll",[{x:-b.el.scrollLeft,y:-b.el.scrollTop}]),a.trigger(a.touchLayer,"scroll",[{x:-b.el.scrollLeft,y:-b.el.scrollTop}]));else if(b.el.scrollTop!==e||b.el.scrollLeft!==f)clearInterval(b.nativePolling),a.trigger(a.touchLayer,"scrollend",[b.el]),a.trigger(b,"scrollend",[b.el]),b.initScrollProgress&&(a.trigger(b,
 177.136 +"scroll",[{x:-b.el.scrollLeft,y:-b.el.scrollTop}]),a.trigger(a.touchLayer,"scroll",[{x:-b.el.scrollLeft,y:-b.el.scrollTop}]))},20)};b.prototype.hideRefresh=function(c){if(!this.preventHideRefresh){var d=this,b=function(c){d.refreshContainer.style.top="-60px";d.refreshContainer.style.position="absolute";d.dY=d.cY=0;c||(d.el.style[a.feat.cssPrefix+"Transform"]="none",d.el.style[a.feat.cssPrefix+"TransitionProperty"]="none",d.el.scrollTop=0,d.logPos(d.el.scrollLeft,0),d.refreshRunning=!1,d.setRefreshContent("Pull to Refresh"),
 177.137 +a.trigger(d,"refresh-finish"))};!1===c||!d.afEl.css3Animate?b():d.afEl.css3Animate({y:d.el.scrollTop-d.refreshHeight+"px",x:"0%",time:"325ms",complete:b});this.refreshTriggered=!1}};b.prototype.hideScrollbars=function(){};b.prototype.scrollTo=function(a,d){this.logPos(a.x,a.y);a.x*=-1;a.y*=-1;return this._scrollTo(a,d)};b.prototype.scrollBy=function(a,d){a.x+=this.el.scrollLeft;a.y+=this.el.scrollTop;this.logPos(this.el.scrollLeft,this.el.scrollTop);return this._scrollTo(a,d)};b.prototype.scrollToBottom=
 177.138 +function(a){this._scrollToBottom(a);this.logPos(this.el.scrollLeft,this.el.scrollTop)};b.prototype.onScroll=function(){this.infinite&&this.touchEndFired?this.touchEndFired=!1:this.scrollSkip?this.scrollSkip=!1:(this.infinite&&(!this.infiniteTriggered&&this.el.scrollTop>=this.el.scrollHeight-this.el.clientHeight)&&(this.infiniteTriggered=!0,a.trigger(this,"infinite-scroll"),this.infiniteEndCheck=!0),this.infinite&&(this.infiniteEndCheck&&this.infiniteTriggered)&&(this.infiniteEndCheck=!1,a.trigger(this,
 177.139 +"infinite-scroll-end")))};b.prototype.logPos=function(a,d){this.loggedPcentX=this.divide(a,this.el.scrollWidth);this.loggedPcentY=this.divide(d,this.el.scrollHeight);this.scrollLeft=a;this.scrollTop=d;isNaN(this.loggedPcentX)&&(this.loggedPcentX=0);isNaN(this.loggedPcentY)&&(this.loggedPcentY=0)};b.prototype.adjustScroll=function(){this.adjustScrollOverflowProxy();this.el.scrollLeft=this.loggedPcentX*this.el.scrollWidth;this.el.scrollTop=this.loggedPcentY*this.el.scrollHeight;this.logPos(this.el.scrollLeft,
 177.140 +this.el.scrollTop)};g.prototype.defaultProperties=function(){this.boolScrollLock=!1;this.elementInfo=this.currentScrollingObject=null;this.verticalScroll=!0;this.horizontalScroll=!1;this.scrollBars=!0;this.hscrollBar=this.vscrollBar=null;this.vScrollCSS=this.hScrollCSS="scrollBar";this.firstEventInfo=null;this.moved=!1;this.preventPullToRefresh=!0;this.refreshSafeKeep=this.androidFormsMode=this.isScrolling=!1;this.lastScrollbar="";this.scrollingFinishCB=this.container=this.finishScrollingObject=null;
 177.141 +this.androidPerfHack=this.loggedPcentX=this.loggedPcentY=0};g.prototype.enable=function(a){this.eventsActive||(this.eventsActive=!0,a?this.scrollerMoveCSS({x:0,y:0},0):this.adjustScroll(),this.container.addEventListener("touchstart",this,!1),this.container.addEventListener("touchmove",this,!1),this.container.addEventListener("touchend",this,!1))};g.prototype.adjustScroll=function(){var a=this.getViewportSize();this.scrollerMoveCSS({x:Math.round(this.loggedPcentX*(this.el.clientWidth-a.w)),y:Math.round(this.loggedPcentY*
 177.142 +(this.el.clientHeight-a.h))},0)};g.prototype.disable=function(){if(this.eventsActive){var a=this.getCSSMatrix(this.el);this.logPos(numOnly(a.e)-numOnly(this.container.scrollLeft),numOnly(a.f)-numOnly(this.container.scrollTop));this.container.removeEventListener("touchstart",this,!1);this.container.removeEventListener("touchmove",this,!1);this.container.removeEventListener("touchend",this,!1);this.eventsActive=!1}};g.prototype.addPullToRefresh=function(a,d){d||(this.refresh=!0);this.refresh&&!0===
 177.143 +this.refresh&&(this.coreAddPullToRefresh(a),this.el.style.overflow="visible")};g.prototype.hideScrollbars=function(){this.hscrollBar&&(this.hscrollBar.style.display="none",this.hscrollBar.style[a.feat.cssPrefix+"TransitionDuration"]="0ms");this.vscrollBar&&(this.vscrollBar.style.display="none",this.vscrollBar.style[a.feat.cssPrefix+"TransitionDuration"]="0ms")};g.prototype.getViewportSize=function(){var a=window.getComputedStyle(this.container);isNaN(numOnly(a.paddingTop))&&window.alert(typeof a.paddingTop+
 177.144 +"::"+a.paddingTop+":");return{h:this.container.clientHeight>window.innerHeight?window.innerHeight:this.container.clientHeight-numOnly(a.paddingTop)-numOnly(a.paddingBottom),w:this.container.clientWidth>window.innerWidth?window.innerWidth:this.container.clientWidth-numOnly(a.paddingLeft)-numOnly(a.paddingRight)}};g.prototype.onTouchStart=function(c){this.moved=!1;this.currentScrollingObject=null;a(this.el).animateCss().stop();if(this.container&&(this.refreshCancelCB&&(clearTimeout(this.refreshCancelCB),
 177.145 +this.refreshCancelCB=null),this.scrollingFinishCB&&(clearTimeout(this.scrollingFinishCB),this.scrollingFinishCB=null),!(1!==c.touches.length||this.boolScrollLock)&&!(c.touches[0].target&&void 0!==c.touches[0].target.type&&"select"===c.touches[0].target.tagName.toLowerCase()))){var d={top:0,left:0,speedY:0,speedX:0,absSpeedY:0,absSpeedX:0,deltaY:0,deltaX:0,absDeltaY:0,absDeltaX:0,y:0,x:0,duration:0};this.elementInfo={};var b=this.getViewportSize();this.elementInfo.bottomMargin=b.h;this.elementInfo.maxTop=
 177.146 +this.el.clientHeight-this.elementInfo.bottomMargin;0>this.elementInfo.maxTop&&(this.elementInfo.maxTop=0);this.elementInfo.divHeight=this.el.clientHeight;this.elementInfo.rightMargin=b.w;this.elementInfo.maxLeft=this.el.clientWidth-this.elementInfo.rightMargin;0>this.elementInfo.maxLeft&&(this.elementInfo.maxLeft=0);this.elementInfo.divWidth=this.el.clientWidth;this.elementInfo.hasVertScroll=this.verticalScroll||0<this.elementInfo.maxTop;this.elementInfo.hasHorScroll=0<this.elementInfo.maxLeft;this.elementInfo.requiresVScrollBar=
 177.147 +this.vscrollBar&&this.elementInfo.hasVertScroll;this.elementInfo.requiresHScrollBar=this.hscrollBar&&this.elementInfo.hasHorScroll;this.saveEventInfo(c);this.saveFirstEventInfo(c);c=this.getCSSMatrix(this.el);d.top=numOnly(c.f)-numOnly(this.container.scrollTop);d.left=numOnly(c.e)-numOnly(this.container.scrollLeft);this.container.scrollTop=this.container.scrollLeft=0;this.currentScrollingObject=this.el;this.refresh&&0===d.top?(this.refreshContainer.style.display="block",this.refreshHeight=this.refreshContainer.firstChild.clientHeight,
 177.148 +this.refreshContainer.firstChild.style.top=-this.refreshHeight+"px",this.refreshContainer.style.overflow="visible",this.preventPullToRefresh=!1):0>d.top&&(this.preventPullToRefresh=!0,this.refresh&&(this.refreshContainer.style.overflow="hidden"));d.x=d.left;d.y=d.top;this.setVScrollBar(d,0,0)&&(this.vscrollBar.style.right="0px",this.vscrollBar.style[a.feat.cssPrefix+"Transition"]="",a(this.vscrollBar).animateCss().stop());this.setHScrollBar(d,0,0)&&(this.container.clientHeight>window.innerHeight?
 177.149 +this.hscrollBar.style.top=window.innerHeight-numOnly(this.hscrollBar.style.height)+"px":this.hscrollBar.style.bottom=numOnly(this.hscrollBar.style.height),this.hscrollBar.style[a.feat.cssPrefix+"Transition"]="",a(this.hscrollBar).animateCss().stop());this.lastScrollInfo=d;this.hasMoved=!1;0===this.elementInfo.maxTop&&0===this.elementInfo.maxLeft&&this.lockBounce?this.scrollToTop(0):this.scrollerMoveCSS(this.lastScrollInfo,0);this.scrollerMoveCSS(this.lastScrollInfo,0)}};g.prototype.getCSSMatrix=function(c){if(this.androidFormsMode){var d=
 177.150 +parseInt(c.style.marginTop,10);c=parseInt(c.style.marginLeft,10);isNaN(d)&&(d=0);isNaN(c)&&(c=0);return{f:d,e:c}}return a.getCssMatrix(c)};g.prototype.saveEventInfo=function(a){this.lastEventInfo={pageX:a.touches[0].pageX,pageY:a.touches[0].pageY,time:a.timeStamp}};g.prototype.saveFirstEventInfo=function(a){this.firstEventInfo={pageX:a.touches[0].pageX,pageY:a.touches[0].pageY,time:a.timeStamp}};g.prototype.setVScrollBar=function(a,d,b){if(!this.elementInfo.requiresVScrollBar)return!1;var e=parseFloat(this.elementInfo.bottomMargin/
 177.151 +this.elementInfo.divHeight)*this.elementInfo.bottomMargin+"px";numOnly(e)>this.elementInfo.bottomMargin&&(e=this.elementInfo.bottomMargin+"px");e!==this.vscrollBar.style.height&&(this.vscrollBar.style.height=e);a=this.elementInfo.bottomMargin-numOnly(this.vscrollBar.style.height)-(this.elementInfo.maxTop+a.y)/this.elementInfo.maxTop*(this.elementInfo.bottomMargin-numOnly(this.vscrollBar.style.height));a>this.elementInfo.bottomMargin&&(a=this.elementInfo.bottomMargin);0>a&&(a=0);this.scrollbarMoveCSS(this.vscrollBar,
 177.152 +{x:0,y:a},d,b);return!0};g.prototype.setHScrollBar=function(a,d,b){if(!this.elementInfo.requiresHScrollBar)return!1;var e=parseFloat(this.elementInfo.rightMargin/this.elementInfo.divWidth)*this.elementInfo.rightMargin+"px";e!==this.hscrollBar.style.width&&(this.hscrollBar.style.width=e);a=this.elementInfo.rightMargin-numOnly(this.hscrollBar.style.width)-(this.elementInfo.maxLeft+a.x)/this.elementInfo.maxLeft*(this.elementInfo.rightMargin-numOnly(this.hscrollBar.style.width));a>this.elementInfo.rightMargin&&
 177.153 +(a=this.elementInfo.rightMargin);0>a&&(a=0);this.scrollbarMoveCSS(this.hscrollBar,{x:a,y:0},d,b);return!0};g.prototype.onTouchMove=function(c){if(null!==this.currentScrollingObject&&(!c.target||!(c.target.getAttribute("type")&&-1!==c.target.getAttribute("type").toLowerCase().indexOf("range")))){var d=this.calculateMovement(c);this.calculateTarget(d);this.lastScrollInfo=d;this.moved||(a.trigger(this,"scrollstart",[this.el,{x:this.lastScrollInfo.top,y:this.lastScrollInfo.left}]),a.trigger(a.touchLayer,
 177.154 +"scrollstart",[this.el,{x:this.lastScrollInfo.top,y:this.lastScrollInfo.left}]),this.elementInfo.requiresVScrollBar&&(this.vscrollBar.style.display="block"),this.elementInfo.requiresHScrollBar&&(this.hscrollBar.style.display="block"));this.moved=!0;this.refresh&&0===d.top?(this.refreshContainer.style.display="block",this.refreshHeight=this.refreshContainer.firstChild.clientHeight,this.refreshContainer.firstChild.style.top=-this.refreshHeight+"px",this.refreshContainer.style.overflow="visible",this.preventPullToRefresh=
 177.155 +!1):0>d.top&&(this.preventPullToRefresh=!0,this.refresh&&(this.refreshContainer.style.overflow="hidden"));this.saveEventInfo(c);if(!1===this.isScrolling&&(this.isScrolling=!0,this.onScrollStart))this.onScrollStart();c=this.getCSSMatrix(this.el);this.lastScrollInfo.top=numOnly(c.f);this.lastScrollInfo.left=numOnly(c.e);this.recalculateDeltaY(this.lastScrollInfo);this.recalculateDeltaX(this.lastScrollInfo);this.checkYboundary(this.lastScrollInfo);this.elementInfo.hasHorScroll&&this.checkXboundary(this.lastScrollInfo);
 177.156 +c=0<this.lastScrollInfo.y&&0<this.lastScrollInfo.deltaY;var b=this.lastScrollInfo.y<-this.elementInfo.maxTop&&0>this.lastScrollInfo.deltaY,e;if(c||b)d=c?this.lastScrollInfo.y:-this.lastScrollInfo.y-this.elementInfo.maxTop,d=(this.container.clientHeight-d)/this.container.clientHeight,0.5>d&&(d=0.5),e=0,c&&0<this.lastScrollInfo.top||b&&this.lastScrollInfo.top<-this.elementInfo.maxTop?e=this.lastScrollInfo.top:b&&(e=-this.elementInfo.maxTop),b=this.lastScrollInfo.deltaY*d,1>Math.abs(this.lastScrollInfo.deltaY*
 177.157 +d)&&(b=c?1:-1),this.lastScrollInfo.y=e+b;if(this.elementInfo.hasHorScroll&&(c=0<this.lastScrollInfo.x&&0<this.lastScrollInfo.deltaX,b=this.lastScrollInfo.x<-this.elementInfo.maxLeft&&0>this.lastScrollInfo.deltaX,c||b))d=c?this.lastScrollInfo.x:-this.lastScrollInfo.x-this.elementInfo.maxLeft,d=(this.container.clientWidth-d)/this.container.clientWidth,0.5>d&&(d=0.5),e=0,c&&0<this.lastScrollInfo.left||b&&this.lastScrollInfo.left<-this.elementInfo.maxLeft?e=this.lastScrollInfo.left:b&&(e=-this.elementInfo.maxLeft),
 177.158 +b=this.lastScrollInfo.deltaX*d,1>Math.abs(this.lastScrollInfo.deltaX*d)&&(b=c?1:-1),this.lastScrollInfo.x=e+b;this.lockBounce&&!this.refresh&&(0<this.lastScrollInfo.x?this.lastScrollInfo.x=0:-1*this.lastScrollInfo.x>this.elementInfo.maxLeft&&(this.lastScrollInfo.x=-1*this.elementInfo.maxLeft),0<this.lastScrollInfo.y?this.lastScrollInfo.y=0:-1*this.lastScrollInfo.y>this.elementInfo.maxTop&&(this.lastScrollInfo.y=-1*this.elementInfo.maxTop));this.scrollerMoveCSS(this.lastScrollInfo,0);this.setVScrollBar(this.lastScrollInfo,
 177.159 +0,0);this.setHScrollBar(this.lastScrollInfo,0,0);this.refresh&&!this.preventPullToRefresh&&(!this.refreshTriggered&&this.lastScrollInfo.top>this.refreshHeight?(this.refreshTriggered=!0,this.setRefreshContent("Release to Refresh"),a.trigger(this,"refresh-trigger")):this.refreshTriggered&&this.lastScrollInfo.top<this.refreshHeight&&(this.refreshTriggered=!1,this.setRefreshContent("Pull to Refresh"),a.trigger(this,"refresh-cancel")));this.infinite&&!this.infiniteTriggered&&Math.abs(this.lastScrollInfo.top)>
 177.160 +this.el.clientHeight-this.container.clientHeight&&(this.infiniteTriggered=!0,a.trigger(this,"infinite-scroll"))}};g.prototype.calculateMovement=function(a,d){var b={top:0,left:0,speedY:0,speedX:0,absSpeedY:0,absSpeedX:0,deltaY:0,deltaX:0,absDeltaY:0,absDeltaX:0,y:0,x:0,duration:0},e=d?this.firstEventInfo:this.lastEventInfo,f=d?a.pageX:a.touches[0].pageX,h=d?a.pageY:a.touches[0].pageY,g=d?a.time:a.timeStamp;b.deltaY=this.elementInfo.hasVertScroll?h-e.pageY:0;b.deltaX=this.elementInfo.hasHorScroll?
 177.161 +f-e.pageX:0;b.time=g;b.duration=g-e.time;return b};g.prototype.calculateTarget=function(a){a.y=this.lastScrollInfo.y+a.deltaY;a.x=this.lastScrollInfo.x+a.deltaX;0<Math.abs(a.deltaY)&&(a.y+=(0<a.deltaY?1:-1)*this.elementInfo.divHeight*this.androidPerfHack);0<Math.abs(a.deltaX)&&(a.x+=(0<a.deltaX?1:-1)*this.elementInfo.divWidth*this.androidPerfHack)};g.prototype.checkYboundary=function(a){var d=this.container.clientHeight/2,b=this.elementInfo.maxTop+d;if(a.y>d)a.y=d;else if(-a.y>b)a.y=-b;else return;
 177.162 +this.recalculateDeltaY(a)};g.prototype.checkXboundary=function(a){var d=this.container.clientWidth/2,b=this.elementInfo.maxLeft+d;if(a.x>d)a.x=d;else if(-a.x>b)a.x=-b;else return;this.recalculateDeltaX(a)};g.prototype.recalculateDeltaY=function(a){var d=Math.abs(a.deltaY);a.deltaY=a.y-a.top;var b=Math.abs(a.deltaY);a.duration=a.duration*b/d};g.prototype.recalculateDeltaX=function(a){var d=Math.abs(a.deltaX);a.deltaX=a.x-a.left;var b=Math.abs(a.deltaX);a.duration=a.duration*b/d};g.prototype.hideRefresh=
 177.163 +function(b){var d=this;if(!this.preventHideRefresh){var e=function(){d.setRefreshContent("Pull to Refresh");a.trigger(d,"refresh-finish")};this.scrollerMoveCSS({x:0,y:0},325);!1===b||!d.afEl.css3Animate?e():d.afEl.css3Animate({time:"325ms",complete:e});this.refreshTriggered=!1}};g.prototype.setMomentum=function(a){a.speedY=this.divide(a.deltaY,a.duration);a.speedX=this.divide(a.deltaX,a.duration);a.absSpeedY=Math.abs(a.speedY);a.absSpeedX=Math.abs(a.speedX);a.absDeltaY=Math.abs(a.deltaY);a.absDeltaX=
 177.164 +Math.abs(a.deltaX);if(0<a.absDeltaY){if(a.deltaY=(0>a.deltaY?-1:1)*a.absSpeedY*a.absSpeedY/0.0024,a.absDeltaY=Math.abs(a.deltaY),a.duration=a.absSpeedY/0.0012,a.speedY=a.deltaY/a.duration,a.absSpeedY=Math.abs(a.speedY),0.12>a.absSpeedY||5>a.absDeltaY)a.deltaY=a.absDeltaY=a.duration=a.speedY=a.absSpeedY=0}else if(a.absDeltaX){if(a.deltaX=(0>a.deltaX?-1:1)*a.absSpeedX*a.absSpeedX/0.0024,a.absDeltaX=Math.abs(a.deltaX),a.duration=a.absSpeedX/0.0012,a.speedX=a.deltaX/a.duration,a.absSpeedX=Math.abs(a.speedX),
 177.165 +0.12>a.absSpeedX||5>a.absDeltaX)a.deltaX=a.absDeltaX=a.duration=a.speedX=a.absSpeedX=0}else a.duration=0};g.prototype.onTouchEnd=function(){var b=this;if(null!==this.currentScrollingObject&&this.moved){this.finishScrollingObject=this.currentScrollingObject;this.currentScrollingObject=null;var d=this.calculateMovement(this.lastEventInfo,!0);this.androidFormsMode||this.setMomentum(d);this.calculateTarget(d);var e=this.getCSSMatrix(this.el);d.top=numOnly(e.f);d.left=numOnly(e.e);this.checkYboundary(d);
 177.166 +this.elementInfo.hasHorScroll&&this.checkXboundary(d);e=!this.preventPullToRefresh&&(d.top>this.refreshHeight||d.y>this.refreshHeight);this.fireRefreshRelease(e,0<d.top);if(this.refresh&&e)d.y=this.refreshHeight,d.duration=325;else if(0<=d.y)d.y=0,0<=d.top&&(d.duration=325);else if(-d.y>this.elementInfo.maxTop||0===this.elementInfo.maxTop)d.y=-this.elementInfo.maxTop,-d.top>this.elementInfo.maxTop&&(d.duration=325);if(this.elementInfo.hasHorScroll)if(0<=d.x)d.x=0,0<=d.left&&this.refresh&&(d.duration=
 177.167 +325);else if(-d.x>this.elementInfo.maxLeft||0===this.elementInfo.maxLeft)d.x=-this.elementInfo.maxLeft,-d.left>this.elementInfo.maxLeft&&this.refresh&&(d.duration=325);if(d.x===d.left&&d.y===d.top||this.androidFormsMode)d.duration=0;setTimeout(function(){b.scrollerMoveCSS(d,d.duration,"cubic-bezier(0.33,0.66,0.66,1)")});this.setVScrollBar(d,d.duration,"cubic-bezier(0.33,0.66,0.66,1)");this.setHScrollBar(d,d.duration,"cubic-bezier(0.33,0.66,0.66,1)");this.setFinishCalback(d.duration);this.infinite&&
 177.168 +!this.infiniteTriggered&&Math.abs(d.y)>=this.el.clientHeight-this.container.clientHeight&&(b=this,setTimeout(function(){b.infiniteTriggered=!0;a.trigger(b,"infinite-scroll")},d.duration-50))}};g.prototype.setFinishCalback=function(b){var d=this;this.scrollingFinishCB=setTimeout(function(){d.hideScrollbars();a.trigger(a.touchLayer,"scrollend",[d.el]);a.trigger(d,"scrollend",[d.el]);d.isScrolling=!1;d.elementInfo=null;d.infinite&&d.infiniteTriggered&&a.trigger(d,"infinite-scroll-end")},b)};g.prototype.startFormsMode=
 177.169 +function(){if(!this.blockFormsFix){var b=this.getCSSMatrix(this.el);this.refreshSafeKeep=this.refresh;this.refresh=!1;this.androidFormsMode=!0;this.el.style[a.feat.cssPrefix+"Transform"]="none";this.el.style[a.feat.cssPrefix+"Transition"]="none";this.el.style[a.feat.cssPrefix+"Perspective"]="none";this.scrollerMoveCSS({x:numOnly(b.e),y:numOnly(b.f)},0);this.container.style[a.feat.cssPrefix+"Perspective"]="none";this.container.style[a.feat.cssPrefix+"BackfaceVisibility"]="visible";this.vscrollBar&&
 177.170 +(this.vscrollBar.style[a.feat.cssPrefix+"Transform"]="none",this.vscrollBar.style[a.feat.cssPrefix+"Transition"]="none",this.vscrollBar.style[a.feat.cssPrefix+"Perspective"]="none",this.vscrollBar.style[a.feat.cssPrefix+"BackfaceVisibility"]="visible");this.hscrollBar&&(this.hscrollBar.style[a.feat.cssPrefix+"Transform"]="none",this.hscrollBar.style[a.feat.cssPrefix+"Transition"]="none",this.hscrollBar.style[a.feat.cssPrefix+"Perspective"]="none",this.hscrollBar.style[a.feat.cssPrefix+"BackfaceVisibility"]=
 177.171 +"visible")}};g.prototype.stopFormsMode=function(){if(!this.blockFormsFix){var b=this.getCSSMatrix(this.el);this.refresh=this.refreshSafeKeep;this.androidFormsMode=!1;this.el.style[a.feat.cssPrefix+"Perspective"]=1E3;this.el.style.marginTop=0;this.el.style.marginLeft=0;this.el.style[a.feat.cssPrefix+"Transition"]="0ms linear";this.scrollerMoveCSS({x:numOnly(b.e),y:numOnly(b.f)},0);this.container.style[a.feat.cssPrefix+"Perspective"]=1E3;this.container.style[a.feat.cssPrefix+"BackfaceVisibility"]="hidden";
 177.172 +this.vscrollBar&&(this.vscrollBar.style[a.feat.cssPrefix+"Perspective"]=1E3,this.vscrollBar.style[a.feat.cssPrefix+"BackfaceVisibility"]="hidden");this.hscrollBar&&(this.hscrollBar.style[a.feat.cssPrefix+"Perspective"]=1E3,this.hscrollBar.style[a.feat.cssPrefix+"BackfaceVisibility"]="hidden")}};g.prototype.scrollerMoveCSS=function(b,d,e){d||(d=0);e||(e="linear");d=numOnly(d);var f=this;this.el&&this.el.style&&(this.eventsActive&&(this.androidFormsMode?(this.el.style.marginTop=Math.round(b.y)+"px",
 177.173 +this.el.style.marginLeft=Math.round(b.x)+"px"):(d={x:b.x,y:b.y,duration:d,easing:"easeOutSine"},f.initScrollProgress&&(d.update=function(b){a.trigger(f,"scroll",[b]);a.trigger(a.touchLayer,"scroll",[b])}),a(this.el).animateCss(d).start())),this.logPos(b.x,b.y))};g.prototype.logPos=function(a,b){var e;e=this.elementInfo?{h:this.elementInfo.bottomMargin,w:this.elementInfo.rightMargin}:this.getViewportSize();this.loggedPcentX=this.divide(a,this.el.clientWidth-e.w);this.loggedPcentY=this.divide(b,this.el.clientHeight-
 177.174 +e.h);this.scrollTop=b;this.scrollLeft=a};g.prototype.scrollbarMoveCSS=function(b,d,e,f){e||(e=0);b&&b.style&&(this.androidFormsMode?(b.style.marginTop=Math.round(d.y)+"px",b.style.marginLeft=Math.round(d.x)+"px"):a(b).animateCss({x:d.x,y:d.y,duration:e,easing:"easeOutSine"}).start())};g.prototype.scrollTo=function(a,b){b||(b=0);this.scrollerMoveCSS(a,b)};g.prototype.scrollBy=function(a,b){var e=this.getCSSMatrix(this.el),f=numOnly(e.f),e=numOnly(e.e);this.scrollTo({y:f-a.y,x:e-a.x},b)};g.prototype.scrollToBottom=
 177.175 +function(a){this.scrollTo({y:-1*(this.el.clientHeight-this.container.clientHeight),x:0},a)};g.prototype.scrollToTop=function(a){this.scrollTo({x:0,y:0},a)};return function(c,d){var p;if(!k&&a.touchLayer&&a.isObject(a.touchLayer))n();else if(!a.touchLayer||!a.isObject(a.touchLayer))a.touchLayer={};if(p="string"===typeof c||c instanceof String?document.getElementById(c):c){var f=a(p);d.hasParent&&(f=f.parent());f.hasClass("x-scroll")&&(d.horizontalScroll=!0);f.hasClass("y-scroll")&&(d.verticalScroll=
 177.176 +!0);return a.os.desktop?new e(p,d):d.useJsScroll?new g(p,d):new b(p,d)}window.alert("Could not find element for scroller "+c)}}()})(af);
 177.177 +(function(a){function n(f,h,g){!0===g&&(this.getAttribute("multiple")||a.selectBox.updateMaskValue(this.parentNode.id,this.text,this.value),this.parentNode.value=this.value);return g}function l(f,h,g){this.options[g]&&(this.getAttribute("multiple")||a.selectBox.updateMaskValue(this.linker,this.options[g].value,this.options[g].text),this.value=this.options[g].value);return g}function k(f){var h=f.target;a(h.linker).remove();delete h.linker;f.stopPropagation()}a.selectBox={scroller:null,currLinker:null,
 177.178 +getOldSelects:function(f){if(a.os.android&&!a.os.androidICS)if(a.fn.scroller){var h=f&&document.getElementById(f)?document.getElementById(f):document;if(h){f=h.getElementsByTagName("select");for(h=0;h<f.length;h++){var g=f[h];g.style.display="none";var b=a.create("div",{className:"afFakeSelect"});b.get(0).linker=f[h];g.linker=b.get(0);b.insertAfter(f[h]);g.watch("selectedIndex",l);for(var e=0;e<g.options.length;e++)g.options[e].watch("selected",n),g.options[e].selected&&b.html(g.options[e].text);
 177.179 +a(g).one("destroy",k)}this.createHtml()}else window.alert("Could not find container element for af.selectBox "+f)}else window.alert("This library requires af.scroller")},updateDropdown:function(a){if(a)for(var h=0;h<a.options.length;h++)a.options[h].selected&&(a.linker.innerHTML=a.options[h].text)},initDropDown:function(f){if(!f.disabled&&f&&f.options&&0!==f.options.length){var h=0,g=a("#afSelectBoxfix");g.html("<ul></ul>");for(var g=g.find("ul"),b=0;b<f.options.length;b++){f.options[b].watch("selected",
 177.180 +n);var e=f.options[b].selected?"selected":"";e&&(h=b+1);e=a.create("li",{html:f.options[b].text,className:e});e.data("ind",b);g.append(e)}a("#afModalMask").show();try{if(0<h&&"multiple"!==f.getAttribute("multiple")){f=0;var c=numOnly(g.find("li").computedStyle("height")),d=numOnly(a("#afSelectBoxContainer").computedStyle("height"));h*c>=d&&(f=(h-1)*-c);this.scroller.scrollTo({x:0,y:f})}}catch(p){console.log("error init dropdown"+p)}h="block"===a("#afSelectClose").css("display")?numOnly(a("#afSelectClose").height()):
 177.181 +0;a("#afSelectWrapper").height(numOnly(a("#afSelectBoxContainer").height())-h+"px")}},updateMaskValue:function(f,h,g){a(f).html(g)},setDropDownValue:function(f,h){if(f){var g=a(f);h=parseInt(h,10);isNaN(h)||(f.getAttribute("multiple")?(g=a("#afSelectBoxfix li:nth-child("+(h+1)+")"),g.hasClass("selected")?g.removeClass("selected"):g.addClass("selected")):(f.selectedIndex=h,g.find("option").prop("selected",!1),g.find("option:nth-child("+(h+1)+")").prop("selected",!0),this.scroller.scrollTo({x:0,y:0}),
 177.182 +this.hideDropDown()),a(f).trigger("change"))}},hideDropDown:function(){a("#afModalMask").hide();a("#afSelectBoxfix").html("")},createHtml:function(){var f=this;document.getElementById("afSelectBoxfix")||a(document).ready(function(){a(document).on("click",".afFakeSelect",function(){this.linker.disabled||(f.currLinker=this,"multiple"===this.linker.getAttribute("multiple")?a("#afSelectClose").show():a("#afSelectClose").hide(),f.initDropDown(this.linker))});var h=a.create("div",{id:"afSelectBoxContainer"}),
 177.183 +g=a.create("div",{id:"afSelectBoxfix"}),b=a.create("div",{id:"afSelectWrapper"});b.css("position","relative");b.append(g);var g=a.create("div",{id:"afSelectClose",html:"<a id='afSelectDone'>Done</a> <a id='afSelectCancel'>Cancel</a>"}),e=a.create("div",{id:"afModalMask"}),c=a("#afui");h.prepend(g).append(b);e.append(h);0<c.length?c.append(e):document.body.appendChild(e.get(0));f.scroller=a.query("#afSelectBoxfix").scroller({scroller:!1,verticalScroll:!0,vScrollCSS:"afselectscrollBarV",hasParent:!0});
 177.184 +a("#afModalMask").on("click",function(b){0===a(b.target).closest("#afSelectBoxContainer").length&&f.hideDropDown()});a("#afSelectBoxfix").on("click","li",function(b){b=a(b.target);f.setDropDownValue(f.currLinker.linker,b.data("ind"))});a("#afSelectBoxContainer").on("click","a",function(b){if("afSelectCancel"===b.target.id)return f.hideDropDown();var c=a(f.currLinker.linker);c.find("option").prop("selected",!1);a("#afSelectBoxfix li").each(function(){var b=a(this);if(b.hasClass("selected")){var d=
 177.185 +parseInt(b.data("ind"),10);c.find("option:nth-child("+(d+1)+")").prop("selected",!0);f.currLinker.innerHTML=b.html()}});f.hideDropDown();b.stopPropagation();b.preventDefault();return!1})})}};HTMLElement.prototype.watch||(HTMLElement.prototype.watch=function(a,h){var g=this[a],b=g,e=function(){return b},c=function(d){g=b;return b=h.call(this,a,g,d)};delete this[a]&&(HTMLElement.defineProperty?HTMLElement.defineProperty(this,a,{get:e,set:c,enumerable:!1,configurable:!0}):HTMLElement.prototype.__defineGetter__&&
 177.186 +HTMLElement.prototype.__defineSetter__&&(HTMLElement.prototype.__defineGetter__.call(this,a,e),HTMLElement.prototype.__defineSetter__.call(this,a,c)))});HTMLElement.prototype.unwatch||(HTMLElement.prototype.unwatch=function(a){var h=this[a];delete this[a];this[a]=h})})(af);
 177.187 +(function(a){function n(a,e,c,d){var p=Math.abs(a-e),f=Math.abs(c-d);return p>=f?0<a-e?"Left":"Right":0<c-d?"Up":"Down"}function l(){k.last&&Date.now()-k.last>=h&&(k.el.trigger("longTap"),k={})}var k={},f,h=750,g;a(document).ready(function(){var b;a(document.body).bind("touchstart",function(e){e.originalEvent&&(e=e.originalEvent);if(e.touches&&0!==e.touches.length){var c=Date.now(),d=c-(k.last||c);e.touches&&0!==e.touches.length&&(k.el=a("tagName"in e.touches[0].target?e.touches[0].target:e.touches[0].target.parentNode),
 177.188 +f&&clearTimeout(f),k.x1=e.touches[0].pageX,k.y1=e.touches[0].pageY,k.x2=k.y2=0,0<d&&250>=d&&(k.isDoubleTap=!0),k.last=c,g=setTimeout(l,h),a.ui.useAutoPressed&&!k.el.data("ignore-pressed")&&k.el.addClass("pressed"),b&&(a.ui.useAutoPressed&&!b.data("ignore-pressed")&&b[0]!==k.el[0])&&b.removeClass("pressed"),b=k.el)}}).bind("touchmove",function(a){a.originalEvent&&(a=a.originalEvent);k.x2=a.touches[0].pageX;k.y2=a.touches[0].pageY;(3<Math.abs(k.x2-k.x1)||3<Math.abs(k.y2-k.y1))&&clearTimeout(g)}).bind("touchend",
 177.189 +function(b){b.originalEvent&&(b=b.originalEvent);k.el&&(a.ui.useAutoPressed&&!k.el.data("ignore-pressed")&&k.el.removeClass("pressed"),k.isDoubleTap?(k.el.trigger("doubleTap"),k={}):0<k.x2||0<k.y2?((30<Math.abs(k.x1-k.x2)||30<Math.abs(k.y1-k.y2))&&k.el.trigger("swipe")&&k.el.trigger("swipe"+n(k.x1,k.x2,k.y1,k.y2),k),k.x1=k.x2=k.y1=k.y2=k.last=0):"last"in k&&(k.el.trigger("tap"),f=setTimeout(function(){f=null;k.el&&k.el.trigger("singleTap");k={}},250)))}).bind("touchcancel",function(){k.el&&(a.ui.useAutoPressed&&
 177.190 +!k.el.data("ignore-pressed"))&&k.el.removeClass("pressed");k={};clearTimeout(g)})});"swipe swipeLeft swipeRight swipeUp swipeDown doubleTap tap singleTap longTap".split(" ").forEach(function(b){a.fn[b]=function(a){return this.bind(b,a)}})})(af);
 177.191 +(function(a){a.touchLayer=function(b){a.touchLayer=new c(b);return a.touchLayer};var n=["input","select","textarea","range"],l=["button","radio","checkbox","range","date"],k=a.os.ios||a.os.androidICS&&a.os.chrome,f=a.os.blackberry,h=a.os.blackberry||a.os.fennec||a.os.android&&!a.os.androidICS,g=a.os.ios&&!a.os.ios7,b=!1,e=!1,c=function(b){this.clearTouchVars();b.addEventListener("touchstart",this,!1);b.addEventListener("touchmove",this,!1);b.addEventListener("touchend",this,!1);b.addEventListener("click",
 177.192 +this,!1);b.addEventListener("focusin",this,!1);document.addEventListener("scroll",this,!1);window.addEventListener("resize",this,!1);window.addEventListener("orientationchange",this,!1);this.layer=b;this.scrollEndedProxy_=a.proxy(this.scrollEnded,this);this.exitEditProxy_=a.proxy(this.exitExit,this,[]);this.launchFixUIProxy_=a.proxy(this.launchFixUI,this);var c=this;this.scrollTimeoutExpireProxy_=function(){c.scrollTimeout_=null;c.scrollTimeoutEl_.addEventListener("scroll",c.scrollEndedProxy_,!1)};
 177.193 +this.retestAndFixUIProxy_=function(){a.os.android&&!a.os.chrome&&(c.layer.style.height="100%");a.asap(c.testAndFixUI,c,arguments)};document.addEventListener("click",function(a){if(e)return a.preventDefault(),a.stopPropagation(),!1;void 0!==a.clientX&&null!==c.lastTouchStartX&&(2>Math.abs(c.lastTouchStartX-a.clientX)&&2>Math.abs(c.lastTouchStartY-a.clientY))&&(a.preventDefault(),a.stopPropagation())},!0);a.bind(this,"scrollstart",function(b){c.isScrolling=!0;c.scrollingEl_=b;a.feat.nativeTouchScroll||
 177.194 +(c.scrollerIsScrolling=!0);c.fireEvent("UIEvents","scrollstart",b,!1,!1)});a.bind(this,"scrollend",function(b){c.isScrolling=!1;a.feat.nativeTouchScroll||(c.scrollerIsScrolling=!1);c.fireEvent("UIEvents","scrollend",b,!1,!1)});this.hideAddressBar(0,1);this.launchFixUI(5)};c.prototype={dX:0,dY:0,cX:0,cY:0,touchStartX:null,touchStartY:null,layer:null,scrollingEl_:null,scrollTimeoutEl_:null,scrollTimeout_:null,reshapeTimeout_:null,scrollEndedProxy_:null,exitEditProxy_:null,launchFixUIProxy_:null,reHideAddressBarTimeout_:null,
 177.195 +retestAndFixUIProxy_:null,panElementId:"header",blockClicks:!1,allowDocumentScroll_:!1,ignoreNextResize_:!1,blockPossibleClick_:!1,isScrolling:!1,isScrollingVertical_:!1,wasPanning_:!1,isPanning_:!1,isFocused_:!1,justBlurred_:!1,requiresNativeTap:!1,holdingReshapeType_:null,trackingClick:!1,scrollerIsScrolling:!1,handleEvent:function(a){switch(a.type){case "touchstart":this.onTouchStart(a);break;case "touchmove":this.onTouchMove(a);break;case "touchend":this.onTouchEnd(a);break;case "click":this.onClick(a);
 177.196 +break;case "blur":this.onBlur(a);break;case "scroll":this.onScroll(a);break;case "orientationchange":this.onOrientationChange(a);break;case "resize":this.onResize(a);break;case "focusin":this.onFocusIn(a)}},launchFixUI:function(a){a||(a=2);if(null===this.reHideAddressBarTimeout_)return this.testAndFixUI(0,a)},resetFixUI:function(){this.reHideAddressBarTimeout_&&clearTimeout(this.reHideAddressBarTimeout_);this.reHideAddressBarTimeout_=null},testAndFixUI:function(b,c){var e=this.getReferenceHeight(),
 177.197 +f=this.getCurrentHeight();if(e!==f&&!(0.97*f<e&&0.97*e<f))return this.hideAddressBar(b,c),!0;a.os.android&&this.resetFixUI();return!1},hideAddressBar:function(b,c){if(!a.ui||!a.ui.isIntel)if(b>=c)this.resetFixUI();else if(a.os.ios7)window.scrollTo(1,1);else if(a.os.desktop||a.os.kindle)this.layer.style.height="100%";else if(a.os.android){window.scrollTo(1,1);this.layer.style.height=this.isFocused_||window.innerHeight>=window.outerHeight?window.innerHeight+"px":window.outerHeight+"px";var e=b+1;this.reHideAddressBarTimeout_=
 177.198 +setTimeout(this.retestAndFixUIProxy_,250*e,e,c)}else this.isFocused_||(document.documentElement.style.height="5000px",window.scrollTo(0,0),document.documentElement.style.height=window.innerHeight+"px",this.layer.style.height=window.innerHeight+"px")},getReferenceHeight:function(){return window.innerHeight},getCurrentHeight:function(){return a.os.android?window.innerHeight:numOnly(document.documentElement.style.height)},onOrientationChange:function(){this.focusedElement&&this.focusedElement.blur();
 177.199 +!this.holdingReshapeType_&&this.reshapeTimeout_?this.fireReshapeEvent("orientationchange"):this.previewReshapeEvent("orientationchange");a.os.android&&a.os.chrome&&(this.layer.style.height="100%")},onResize:function(){this.ignoreNextResize_?this.ignoreNextResize_=!1:this.launchFixUI()&&this.reshapeAction()},onClick:function(b){var c=b.target&&void 0!==b.target.tagName?b.target.tagName.toLowerCase():"";if(-1!==n.indexOf(c)&&(!this.isFocused_||b.target!==this.focusedElement)){c=b.target&&void 0!==b.target.type?
 177.200 +b.target.type.toLowerCase():"";if(-1===l.indexOf(c)){this.isFocused_&&this.focusedElement.removeEventListener("blur",this,!1);this.focusedElement=b.target;this.focusedElement.addEventListener("blur",this,!1);if(!this.isFocused_&&!this.justBlurred_)if(a.trigger(this,"enter-edit",[b.target]),a.os.ios){var e=this;setTimeout(function(){e.fireReshapeEvent("enter-edit")},300)}else this.previewReshapeEvent("enter-edit");this.isFocused_=!0}else this.isFocused_=!1;this.justBlurred_=!1;this.allowDocumentScroll_=
 177.201 +!0;k&&b.target.focus()}else a.os.blackberry10&&this.isFocused_&&this.focusedElement.blur()},previewReshapeEvent:function(a){var b=this;this.reshapeTimeout_=setTimeout(function(){b.fireReshapeEvent(a);b.reshapeTimeout_=null;b.holdingReshapeType_=null},750);this.holdingReshapeType_=a},fireReshapeEvent:function(b){a.trigger(this,"reshape");a.trigger(this,b?b+"-reshape":"unknown-reshape")},reshapeAction:function(){this.reshapeTimeout_?(clearTimeout(this.reshapeTimeout_),this.fireReshapeEvent(this.holdingReshapeType_),
 177.202 +this.reshapeTimeout_=this.holdingReshapeType_=null):this.previewReshapeEvent()},onFocusIn:function(a){if(!this.isFocused_)this.onClick(a)},onBlur:function(b){a.os.android&&b.target===window||(this.isFocused_=!1,this.focusedElement&&this.focusedElement.removeEventListener("blur",this,!1),this.focusedElement=null,this.justBlurred_=!0,a.asap(this.exitEditProxy_,this,[b.target]))},exitExit:function(b){this.justBlurred_=!1;if(!this.isFocused_)if(a.trigger(this,"exit-edit",[b]),this.allowDocumentScroll_=
 177.203 +!1,a.os.ios){var c=this;setTimeout(function(){c.fireReshapeEvent("exit-edit")},300)}else this.previewReshapeEvent("exit-edit")},onScroll:function(a){!this.allowDocumentScroll_&&(!this.isPanning_&&a.target===document)&&(this.allowDocumentScroll_=!0,this.wasPanning_?(this.wasPanning_=!1,setTimeout(this.launchFixUIProxy_,2E3,[2])):this.launchFixUI())},onTouchStart:function(d){this.dX=d.touches[0].pageX;this.dY=d.touches[0].pageY;this.lastTimestamp=d.timeStamp;this.lastTouchStartX=this.lastTouchStartY=
 177.204 +null;if(a.os.ios){if(b===d.touches[0].identifier)return e=!0,d.preventDefault(),b=!1;b=d.touches[0].identifier;e=!1}if(this.scrollerIsScrolling)return this.moved=!0,this.scrollerIsScrolling=!1,d.preventDefault(),!1;this.trackingClick=!0;(g||a.feat.nativeTouchScroll)&&this.checkDOMTree(d.target,this.layer);this.isScrolling&&(null!==this.scrollTimeout_?(clearTimeout(this.scrollTimeout_),this.scrollTimeout_=null,this.scrollTimeoutEl_!==this.scrollingEl_?this.scrollEnded(!1):this.blockPossibleClick_=
 177.205 +!0):(this.scrollEnded(!0),this.blockPossibleClick_=!1));if(a.os.android&&d&&d.target&&d.target.getAttribute&&"ignore"===d.target.getAttribute("data-touchlayer")||this.isFocused_&&!a.os.blackberry10)this.allowDocumentScroll_=this.requiresNativeTap=!0;else if(h&&d.target&&void 0!==d.target.tagName){var c=d.target.tagName.toLowerCase();-1!==n.indexOf(c)&&(this.requiresNativeTap=!0)}else d.target&&(void 0!==d.target.tagName&&"input"===d.target.tagName.toLowerCase()&&"range"===d.target.type)&&(this.requiresNativeTap=
 177.206 +!0);!a.os.chrome&&(!a.os.fennec&&!a.os.androidICS)&&(!this.isPanning_&&!this.requiresNativeTap?(this.isScrolling&&!a.feat.nativeTouchScroll||!this.isScrolling)&&d.preventDefault():this.isScrollingVertical_&&this.demandVerticalScroll())},demandVerticalScroll:function(){0>=this.scrollingEl_.scrollTop?this.scrollingEl_.scrollTop=1:this.scrollingEl_.scrollTop+this.scrollingEl_.clientHeight>=this.scrollingEl_.scrollHeight&&(this.scrollingEl_.scrollTop=this.scrollingEl_.scrollHeight-this.scrollingEl_.clientHeight-
 177.207 +1)},ignoreScrolling:function(a){return void 0===a.scrollWidth||void 0===a.clientWidth||void 0===a.scrollHeight||void 0===a.clientHeight?!0:!1},allowsVerticalScroll:function(a,b){var c=b.overflowY;return"scroll"===c||"auto"===c&&a.scrollHeight>a.clientHeight?!0:!1},allowsHorizontalScroll:function(a,b){var c=b.overflowX;return"scroll"===c||"auto"===c&&a.scrollWidth>a.clientWidth?!0:!1},checkDOMTree:function(b,c){if(g&&this.panElementId===b.id)this.isPanning_=!0;else{if(a.feat.nativeTouchScroll){if(this.ignoreScrolling(b))return;
 177.208 +var e=window.getComputedStyle(b);if(this.allowsVerticalScroll(b,e)){this.isScrollingVertical_=!0;this.scrollingEl_=b;this.isScrolling=!0;return}this.allowsHorizontalScroll(b,e)&&(this.isScrollingVertical_=!1,this.scrollingEl_=null,this.isScrolling=!0)}b!==c&&b.parentNode&&this.checkDOMTree(b.parentNode,c)}},scrollEnded:function(a){null!==this.scrollTimeoutEl_&&(a&&this.scrollTimeoutEl_.removeEventListener("scroll",this.scrollEndedProxy_,!1),this.fireEvent("UIEvents","scrollend",this.scrollTimeoutEl_,
 177.209 +!1,!1),this.scrollTimeoutEl_=null)},onTouchMove:function(b){var c=this.moved;this.moved=!0;f&&(this.cY=b.touches[0].pageY-this.dY,this.cX=b.touches[0].pageX-this.dX);this.isPanning_||(this.isScrolling&&(c||this.fireEvent("UIEvents","scrollstart",this.scrollingEl_,!1,!1),this.speedY=(this.lastY-b.touches[0].pageY)/(b.timeStamp-this.lastTimestamp),this.lastY=b.touches[0].pageY,this.lastX=b.touches[0].pageX,this.lastTimestamp=b.timeStamp),!a.os.blackberry10&&!this.requiresNativeTap&&(!this.isScrolling||
 177.210 +!a.feat.nativeTouchScroll&&!this.requiresNativeTap)&&b.preventDefault())},onTouchEnd:function(b){var c=this.moved;f&&(c=c&&!(10>Math.abs(this.cX)&&10>Math.abs(this.cY)));if(!a.os.ios||!this.requiresNativeTap)this.allowDocumentScroll_=!1;if(this.isPanning_&&c)this.wasPanning_=!0;else if(!c&&!this.requiresNativeTap){this.scrollerIsScrolling=!1;if(!this.trackingClick)return;b.preventDefault();if(!this.blockClicks&&!this.blockPossibleClick_){var c=b.target,e=b.changedTouches?b.changedTouches[0]:b.touches[0];
 177.211 +3===c.nodeType&&(c=c.parentNode);this.fireEvent("Event","click",c,!0,b.mouseToTouch,e[0]);this.lastTouchStartX=this.dX;this.lastTouchStartY=this.dY}}else c&&(this.isScrolling&&(this.scrollTimeoutEl_=this.scrollingEl_,0.01>Math.abs(this.speedY)?this.scrollEnded(!1):this.scrollTimeout_=setTimeout(this.scrollTimeoutExpireProxy_,30)),this.requiresNativeTap&&(this.isFocused_||a.trigger(this,"cancel-enter-edit",[b.target])));a.os.blackberry10&&(this.lastTouchStartX=this.dX,this.lastTouchStartY=this.dY);
 177.212 +this.clearTouchVars()},clearTouchVars:function(){this.speedY=this.lastY=this.cY=this.cX=this.dX=this.dY=0;this.trackingClick=this.blockPossibleClick_=this.requiresNativeTap=this.isScrollingVertical_=this.isScrolling=this.isPanning_=this.moved=!1},fireEvent:function(b,c,e,f,h,g){var k=document.createEvent(b);k.initEvent(c,f,!0);g&&a.each(g,function(a,b){k.key=b});h&&(k.mouseToTouch=!0);e.dispatchEvent(k)}}})(af);
 177.213 +(function(a){a.fn.popup=function(a){return new l(this[0],a)};var n=[],l=function(){var f=function(f,g){if(this.container="string"===typeof f||f instanceof String?document.getElementById(f):f)try{if("string"===typeof g||"number"===typeof g)g={message:g,cancelOnly:"true",cancelText:"OK"};this.id=g.id=g.id||a.uuid();this.addCssClass=g.addCssClass?g.addCssClass:"";this.suppressTitle=g.suppressTitle||this.suppressTitle;this.title=g.suppressTitle?"":g.title||"Alert";this.message=g.message||"";this.cancelText=
 177.214 +g.cancelText||"Cancel";this.cancelCallback=g.cancelCallback||function(){};this.cancelClass=g.cancelClass||"button";this.doneText=g.doneText||"Done";this.doneCallback=g.doneCallback||function(){};this.doneClass=g.doneClass||"button";this.cancelOnly=g.cancelOnly||!1;this.onShow=g.onShow||function(){};this.autoCloseDone=void 0!==g.autoCloseDone?g.autoCloseDone:!0;n.push(this);1===n.length&&this.show()}catch(b){console.log("error adding popup "+b)}else window.alert("Error finding container for popup "+
 177.215 +f)};f.prototype={id:null,addCssClass:null,title:null,message:null,cancelText:null,cancelCallback:null,cancelClass:null,doneText:null,doneCallback:null,doneClass:null,cancelOnly:!1,onShow:null,autoCloseDone:!0,suppressTitle:!1,show:function(){var f=this,g="<div id='"+this.id+"' class='afPopup hidden "+this.addCssClass+"'><header>"+this.title+"</header><div>"+this.message+"</div><footer><a href='javascript:;' class='"+this.cancelClass+"' id='cancel'>"+this.cancelText+"</a><a href='javascript:;' class='"+
 177.216 +this.doneClass+"' id='action'>"+this.doneText+"</a><div style='clear:both'></div></footer></div>";a(this.container).append(a(g));var b=a.query("#"+this.id);b.bind("close",function(){f.hide()});this.cancelOnly&&(b.find("A#action").hide(),b.find("A#cancel").addClass("center"));b.find("A").each(function(){var b=a(this);b.bind("click",function(a){"cancel"===b.attr("id")?(f.cancelCallback.call(f.cancelCallback,f),f.hide()):(f.doneCallback.call(f.doneCallback,f),f.autoCloseDone&&f.hide());a.preventDefault()})});
 177.217 +f.positionPopup();a.blockUI(0.5);b.bind("orientationchange",function(){f.positionPopup()});b.find("header").show();b.find("footer").show();setTimeout(function(){b.removeClass("hidden").addClass("show");f.onShow(f)},50)},hide:function(){var f=this;a.query("#"+f.id).addClass("hidden");a.unblockUI();!a.os.ie&&!a.os.android?setTimeout(function(){f.remove()},250):f.remove()},remove:function(){var f=a.query("#"+this.id);f.unbind("close");f.find("BUTTON#action").unbind("click");f.find("BUTTON#cancel").unbind("click");
 177.218 +f.unbind("orientationchange").remove();n.splice(0,1);0<n.length&&n[0].show()},positionPopup:function(){var f=a.query("#"+this.id);f.css("top",window.innerHeight/2.5+window.pageYOffset-f[0].clientHeight/2+"px");f.css("left",window.innerWidth/2-f[0].clientWidth/2+"px")}};return f}(),k=!1;a.blockUI=function(f){k||(f=f?" style='opacity:"+f+";'":"",a.query("BODY").prepend(a("<div id='mask'"+f+"></div>")),a.query("BODY DIV#mask").bind("touchstart",function(a){a.preventDefault()}),a.query("BODY DIV#mask").bind("touchmove",
 177.219 +function(a){a.preventDefault()}),k=!0)};a.unblockUI=function(){k=!1;a.query("BODY DIV#mask").unbind("touchstart");a.query("BODY DIV#mask").unbind("touchmove");a("BODY DIV#mask").remove()}})(af);
 177.220 +(function(a){var n=window.location.pathname+window.location.search,l=window.location.hash,k=l,f=function(){function b(){e.useOSThemes&&(a("#afui").removeClass("ios ios7 win8 tizen bb android light dark firefox"),a.os.android?a("#afui").addClass("android"):a.os.ie?a("#afui").addClass("win8"):a.os.blackberry||a.os.blackberry10||a.os.playbook?(a("#afui").addClass("bb"),e.backButtonText="Back"):a.os.ios7?a("#afui").addClass("ios7"):a.os.ios?a("#afui").addClass("ios"):a.os.tizen?a("#afui").addClass("tizen"):
 177.221 +a.os.fennec&&(a("#afui").addClass("firefox"),e.animateHeaders=!1));if(a.os.ios){a("head").find("#iosBlurrHack").remove();var b;b="-webkit-backface-visibility: hidden;-webkit-perspective:1000;";a("head").append("<style id='iosBlurrHack'>#afui .y-scroll > *, #afui .x-scroll > * {"+b+"}</style>")}else a.os.android&&!a.os.androidICS?e.transitionTime="150ms":a.os.fennec&&e.ready(function(){window.addEventListener("deviceorientation",function(){var b=numOnly(a("#header").css("height"))+numOnly(a("#navbar").css("height"));
 177.222 +a("#content").css("height",window.innerHeight-b)})});a.os.ios7&&a("#afui").hasClass("ios7")&&e.overlayStatusbar&&(e.ready(function(){a("#afui").addClass("overlayStatusbar")}),a(document.body).css("background","rgb(249,249,249)"))}var e=this;this.availableTransitions={};this.availableTransitions["default"]=this.availableTransitions.none=this.noTransition;if("function"===typeof define&&define.amd||"undefined"!==typeof module&&module.exports)e.autoLaunch=!1;var c=function(){var c=document.getElementById("afui");
 177.223 +if(null===c){c=document.createElement("div");c.id="afui";for(var f=document.body;f&&f.firstChild;)c.appendChild(f.firstChild);a(document.body).prepend(c)}e.isIntel="intel"in window&&window.intel&&window.intel.xdk&&"app"in window.intel.xdk;a.os.supportsTouch&&a.touchLayer(c);b()};if("complete"===document.readyState||"loaded"===document.readyState)if(c(),e.init)e.autoBoot();else a(window).one("afui:init",function(){e.autoBoot()});else a(document).ready(function(){c();if(e.init)e.autoBoot();else a(window).one("afui:init",
 177.224 +function(){e.autoBoot()})},!1);"intel"in window||(window.intel={xdk:{}},window.intel.xdk.webRoot="");window.addEventListener("popstate",function(){if(e.useInternalRouting){var a=e.getPanelId(document.location.hash);"#"!==document.location.href.replace(document.location.origin+"/","")&&(""===a&&1===e.history.length&&(a="#"+e.firstDiv.id),""!==a&&0!==af(a).filter(".panel").length&&a!=="#"+e.activeDiv.id&&e.goBack())}},!1)};f.prototype={init:!1,transitionTime:"230ms",showLoading:!0,loadingText:"Loading Content",
 177.225 +loadContentQueue:[],isIntel:!1,titlebar:"",navbar:"",header:"",viewportContainer:"",remotePages:{},history:[],homeDiv:"",screenWidth:"",content:"",modalWindow:"",customFooter:!1,defaultFooter:"",defaultHeader:null,customMenu:!1,customAside:!1,defaultAside:"",defaultMenu:"",_readyFunc:null,doingTransition:!1,passwordBox:a.passwordBox?new a.passwordBox:!1,selectBox:a.selectBox?a.selectBox:!1,ajaxUrl:"",transitionType:"slide",scrollingDivs:{},firstDiv:"",hasLaunched:!1,isLaunching:!1,launchCompleted:!1,
 177.226 +activeDiv:"",customClickHandler:"",menuAnimation:null,togglingSideMenu:!1,sideMenuWidth:"200px",handheldMinWidth:"768",trimBackButtonText:!0,useOSThemes:!0,overlayStatusbar:!1,lockPageBounce:!0,animateHeaders:!0,useAutoPressed:!0,horizontalScroll:!1,_currentHeaderID:"defaultHeader",useInternalRouting:!0,autoBoot:function(){this.hasLaunched=!0;var a=this;if(this.autoLaunch)if(this.isIntel){var e=function(){a.launch();document.removeEventListener("intel.xdk.device.ready",e)};document.addEventListener("intel.xdk.device.ready",
 177.227 +e)}else this.launch()},css3animate:function(b,e){b=a(b);return b.css3Animate(e)},dispatchPanelEvent:function(a,e){if("string"===typeof a&&window[a])return window[a](e);if(-1!==a.indexOf(".")){var c=window,d=a.split("."),f=d.length,g=0;for(g;g<f-1;g++)if(c=c[d[g]],void 0===c)return;return c[d[g]](e)}},enableTabBar:function(){a(document).on("click",".button-grouped.tabbed",function(b){var e=a(b.target);e.closest(".tabbed").find(".button").data("ignore-pressed","true").removeClass("pressed");e.closest(".button").addClass("pressed");
 177.228 +setTimeout(function(){e.closest(".button").addClass("pressed")})})},disableTabBar:function(){a(document).off("click",".button-grouped.tabbed");a(".button-grouped.tabbed .button").removeAttr("data-ignore-pressed")},setLeftSideMenuWidth:function(b){this.sideMenuWidth=b;b=(b+"").replace("px","")+"px";var e=numOnly(window.innerWidth)-numOnly(b);a("head").find("style#afui_sideMenuWidth").remove();b="@media handheld, only screen and (min-width: 768px) {#afui > #navbar.hasMenu.splitview, #afui > #header.hasMenu.splitview, #afui > #content.hasMenu.splitview  {    margin-left:"+
 177.229 +b+" !important;    width: "+e+"px !important;}}#afui #menu {width:"+b+"  !important}";a("head").append("<style id='afui_sideMenuWidth'>"+b+"</style>")},setSideMenuWidth:function(){this.setLeftSideMenuWidth.apply(this,arguments)},setRightSideMenuWidth:function(b){this.sideMenuWidth=b;b=(b+"").replace("px","")+"px";a("head").find("style#afui_asideMenuWidth").remove();a("head").append("<style id='afui_asideMenuWidth'>#afui #aside_menu {width:"+b+"  !important}</style>")},disableNativeScrolling:function(){a.feat.nativeTouchScroll=
 177.230 +!1},manageHistory:!0,loadDefaultHash:!0,useAjaxCacheBuster:!1,actionsheet:function(b){return a.query("#afui").actionsheet(b)},popup:function(b){return a.query("#afui").popup(b)},blockUI:function(b){a.blockUI(b)},unblockUI:function(){a.unblockUI()},removeFooterMenu:function(){a.query("#navbar").hide();this.showNavMenu=!1},showNavMenu:!0,autoLaunch:!0,showBackbutton:!0,showBackButton:!0,backButtonText:"",resetScrollers:!1,ready:function(b){if(this.launchCompleted)b();else a(document).one("afui:ready",
 177.231 +function(){b()})},setBackButtonStyle:function(b){a.query("#header .backButton").get(0).className=b},goBack:function(a){if(a=Math.min(Math.abs(~~a||1),this.history.length))a=this.history.splice(-a).shift(),this.loadContent(a.target+"",0,1,a.transition),this.transitionType=a.transition,this.updateHash(a.target)},clearHistory:function(){this.history=[];this.setBackButtonVisibility(!1)},pushHistory:function(b,e,c,d){this.history.push({target:b,transition:c});try{this.manageHistory&&(window.history.pushState(e,
 177.232 +e,n+"#"+e+d),a(window).trigger("hashchange",null,{newUrl:n+"#"+e+d,oldUrl:n+b}))}catch(f){}},updateHash:function(b){if(this.manageHistory){k=b=-1===b.indexOf("#")?"#"+b:b;var e=window.location.hash,c=this.getPanelId(b).substring(1);try{window.history.replaceState(c,c,n+b),a(window).trigger("hashchange",null,{newUrl:n+b,oldUrl:n+e})}catch(d){}}},getPanelId:function(a){var e=a.indexOf("/");return-1===e?a:a.substring(0,e)},updateBadge:function(b,e,c,d){void 0===c&&(c="");b=a(b);var f=b.find("span.af-badge");
 177.233 +0===f.length?("absolute"!==b.css("position")&&b.css("position","relative"),f=a.create("span",{className:"af-badge "+c,html:e}),b.append(f)):f.html(e);f.removeClass("tl bl br tr");f.addClass(c);void 0===d&&(d="red");a.isObject(d)?f.css(d):d&&f.css("background",d);f.data("ignore-pressed","true")},removeBadge:function(b){a(b).find("span.af-badge").remove()},toggleNavMenu:function(b){this.showNavMenu&&("none"!==a.query("#navbar").css("display")&&(void 0!==b&&!0!==b||void 0===b)?a.query("#navbar").hide():
 177.234 +(void 0===b||void 0!==b&&!0===b)&&a.query("#navbar").show())},toggleHeaderMenu:function(b){"none"!==a.query("#header").css("display")&&(void 0!==b&&!0!==b||void 0===b)?a.query("#header").hide():(void 0===b||void 0!==b&&!0===b)&&a.query("#header").show()},toggleAsideMenu:function(){this.toggleRightSideMenu.apply(this,arguments)},toggleRightSideMenu:function(a,e,c){if(this.isAsideMenuEnabled())return this.toggleLeftSideMenu(a,e,c,!0)},toggleLeftSideMenu:function(b,e,c,d){if(!(!this.isSideMenuEnabled()&&
 177.235 +!this.isAsideMenuEnabled()||this.togglingSideMenu))if(d||this.isSideMenuEnabled())if(d||!(a.ui.splitview&&window.innerWidth>=a.ui.handheldMinWidth)){var f=this,g=a.query("#menu"),h=a.query("#aside_menu"),k=a.query("#content,  #header, #navbar"),l=a.query(".afui_panel_mask");c=c||this.transitionTime;var n=this.isSideMenuOn(),z=d?"-"+numOnly(h.css("width")):numOnly(g.css("width"));0===l.length&&window.innerWidth<a.ui.handheldMinWidth&&(k.append("<div class='afui_panel_mask'></div>"),l=a.query(".afui_panel_mask"),
 177.236 +a(".afui_panel_mask").bind("click",function(){a.ui.toggleSideMenu(!1,null,null,d)}));var s=this.getSideMenuPosition();n&&!d&&0>s?n=!1:n&&(d&&0<s)&&(n=!1);if(2===b||!n&&(void 0!==b&&!1!==b||void 0===b))this.togglingSideMenu=!0,d?h.show():g.show(),f.css3animate(k,{x:z,time:c,complete:function(b){f.togglingSideMenu=!1;k.vendorCss("Transition","");e&&e(b);0!==l.length&&window.innerWidth<a.ui.handheldMinWidth&&l.show()}});else if(void 0===b||void 0!==b&&!1===b)this.togglingSideMenu=!0,f.css3animate(k,
 177.237 +{x:"0px",time:c,complete:function(b){k.vendorCss("Transition","");k.vendorCss("Transform","");f.togglingSideMenu=!1;e&&e(b);a.ui.splitview||g.hide();h.hide();0!==l.length&&window.innerWidth<a.ui.handheldMinWidth&&l.hide()}})}},toggleSideMenu:function(){this.toggleLeftSideMenu.apply(this,arguments)},disableSideMenu:function(){this.disableLeftSideMenu()},disableLeftSideMenu:function(){var b=a.query("#content, #header, #navbar");this.isSideMenuOn()?this.toggleSideMenu(!1,function(a){a||b.removeClass("hasMenu")}):
 177.238 +b.removeClass("hasMenu")},enableLeftSideMenu:function(){a.query("#content, #header, #navbar").addClass("hasMenu")},enableSideMenu:function(){return this.enableLeftSideMenu()},disableRightSideMenu:function(){var b=a.query("#content, #header, #navbar");this.isSideMenuOn()?this.toggleSideMenu(!1,function(a){a||b.removeClass("hasAside")}):b.removeClass("hasAside")},enableRightSideMenu:function(){a.query("#content, #header, #navbar").addClass("hasAside")},isSideMenuEnabled:function(){return a.query("#content").hasClass("hasMenu")},
 177.239 +isAsideMenuEnabled:function(){return a.query("#content").hasClass("hasAside")},isSideMenuOn:function(){var a=0!==this.getSideMenuPosition()?!0:!1;return(this.isSideMenuEnabled()||this.isAsideMenuEnabled)&&a},getSideMenuPosition:function(){return numOnly(parseFloat(a.getCssMatrix(a("#content")).e))},splitview:!0,disableSplitView:function(){a.query("#content, #header, #navbar, #menu").removeClass("splitview");this.splitview=!1},prevFooter:null,updateNavbarElements:function(b){if(this.prevFooter)if(this.prevFooter.data("parent")){var e=
 177.240 +this.scrollingDivs.hasOwnProperty(this.prevFooter.data("parent"));a.feat.nativeTouchScroll||a.os.desktop||!e?this.prevFooter.appendTo("#"+this.prevFooter.data("parent")):this.prevFooter.appendTo(a("#"+this.prevFooter.data("parent")).find(".afScrollPanel"))}else this.prevFooter.appendTo("#afui");a.is$(b)||(b=a.query("#"+b));a.query("#navbar").append(b);this.prevFooter=b;b=a.query("#navbar > footer > a:not(.button)");0<b.length&&(b.data("ignore-pressed","true").data("resetHistory","true"),e=parseFloat(100/
 177.241 +b.length),b.css("width",e+"%"));b=a.query("#navbar footer");if(0!==b.length){b=b.get(0).childNodes;for(e=0;e<b.length;e++)3===b[e].nodeType&&b[e].parentNode.removeChild(b[e])}},prevHeader:null,updateHeaderElements:function(b,e){var c=this;a.is$(b)||(b=a.query("#"+b));if(b!==this.prevHeader)if(this._currentHeaderID=b.prop("id"),this.prevHeader){var d=this.scrollingDivs.hasOwnProperty(this.prevHeader.data("parent"));a.query("#header").append(b);if(a.ui.animateHeaders){var f=e?"100px":"-100px",g=e?"-100px":
 177.242 +"100px";c.prevHeader.addClass("ignore");c.css3animate(b,{x:g,opacity:0.3,time:"1ms"});c.css3animate(c.prevHeader,{x:f,y:0,opacity:0.3,time:c.transitionTime,delay:numOnly(c.transitionTime)/5+"ms",complete:function(){c.prevHeader.data("parent")?a.feat.nativeTouchScroll||a.os.desktop||!d?c.prevHeader.appendTo("#"+c.prevHeader.data("parent")):c.prevHeader.appendTo(a("#"+c.prevHeader.data("parent")).find(".afScrollPanel")):c.prevHeader.appendTo("#afui");c.prevHeader.removeClass("ignore");c.css3animate(c.prevHeader,
 177.243 +{x:g,opacity:1,time:"1ms"});c.prevHeader=b}});c.css3animate(b,{x:"0px",opacity:1,time:c.transitionTime})}else c.prevHeader.data("parent")?a.feat.nativeTouchScroll||a.os.desktop||!d?this.prevHeader.appendTo("#"+this.prevHeader.data("parent")):this.prevHeader.appendTo(a("#"+this.prevHeader.data("parent")).find(".afScrollPanel")):c.prevHeader.appendTo("#afui"),c.prevHeader=b}else a.query("#header").append(b),this.prevHeader=b},previAsideMenu:null,updateAsideElements:function(){return this.updateRightSideMenuElements.apply(this,
 177.244 +arguments)},updateRightSideMenuElements:function(b){if(!(void 0===b||null===b)){var e=a.query("#aside_menu_scroller");this.prevAsideMenu&&(this.prevAsideMenu.insertBefore("#afui #aside_menu"),this.prevAsideMenu=null);a.is$(b)||(b=a.query("#"+b));a(b).attr("title")&&(a(b).prepend(a.create("header",{className:"header"}).append(a.create("h1",{html:a(b).attr("title")}).get(0))),a(b).removeAttr("title"));e.html("");e.append(b);this.prevAsideMenu=b;this.scrollingDivs.aside_menu_scroller.hideScrollbars();
 177.245 +this.scrollingDivs.aside_menu_scroller.scrollToTop()}},updateSideMenu:function(a){return this.updateSideMenuElements(a)},updateSideMenuElements:function(){return this.updateLeftSideMenuElements.apply(this,arguments)},updateLeftSideMenuElements:function(b){if(!(void 0===b||null===b)){var e=a.query("#menu_scroller");this.prevMenu&&(this.prevMenu.insertBefore("#afui #menu"),this.prevMenu=null);a.is$(b)||(b=a.query("#"+b));a(b).attr("title")&&(a(b).prepend(a.create("header",{className:"header"}).append(a.create("h1",
 177.246 +{html:a(b).attr("title")}).get(0))),a(b).removeAttr("title"));e.html("");e.append(b);this.prevMenu=b;this.scrollingDivs.menu_scroller.hideScrollbars();this.scrollingDivs.menu_scroller.scrollToTop()}},setTitle:function(b){"defaultHeader"===this._currentHeaderID&&a.query("#header header:not(.ignore)  #pageTitle").html(b)},setBackButtonText:function(b){"defaultHeader"===this._currentHeaderID&&(this.trimBackButtonText&&7<=b.length&&(b=b.substring(0,5)+"..."),0<this.backButtonText.length?a.query("#header header:not(.ignore) .backButton").html(this.backButtonText):
 177.247 +a.query("#header header:not(.ignore)  .backButton").html(b))},setBackButtonVisibility:function(b){b?a.query("#header .backButton").css("visibility","visible"):a.query("#header .backButton").css("visibility","hidden")},showMask:function(b){b||(b=this.loadingText||"");a.query("#afui_mask>h1").html(b);a.query("#afui_mask").show()},hideMask:function(){a.query("#afui_mask").hide()},modalReference_:null,showModal:function(b,e){this.modalTransition=e||"up";var c=a.query("#modalContainer");"string"===typeof b&&
 177.248 +(b="#"+b.replace("#",""));var d=a.query(b);this.modalReference_=d;var f=a.query("#afui_modal");if(d.length){var g=this.scrollingDivs.hasOwnProperty(d.attr("id")),h;a.feat.nativeTouchScroll||a.os.desktop||!g?(h=d.contents(),c.append(h)):(h=a(d.get(0).childNodes[0]).contents(),c.children().eq(0).append(h));this.runTransition(this.modalTransition,this.modalTransContainer,this.modalWindow,!1);a(this.modalWindow).css("display","");a(this.modalWindow).addClass("display","flexContainer");g?this.scrollingDivs.modal_container.enable(this.resetScrollers):
 177.249 +this.scrollingDivs.modal_container.disable();c.addClass("panel").show();"none"===d.data("header")?f.find("#modalHeader").hide():0<h.filter("header").length?f.find("#modalHeader").append(h.filter("header")).show():f.find("#modalHeader").append(a.create("header",{}).append(a.create("h1",{html:d.data("title")}).get(0)).append(a.create("a",{className:"button icon close"}).attr("onclick","$.ui.hideModal()").get(0))).show();if("none"===d.data("footer"))f.find("#modalFooter").hide();else if(0<h.filter("footer").length){f.find("#modalFooter").append(h.filter("footer")).show();
 177.250 +f=a.query("#modalFooter > footer > a:not(.button)");0<f.length&&(g=parseFloat(100/f.length),f.css("width",g+"%"));f=a.query("#modalFooter footer");if(0===f.length)return;f=f.get(0).childNodes;for(g=0;g<f.length;g++)3===f[g].nodeType&&f[g].parentNode.removeChild(f[g])}else f.find("#modalFooter").hide();this.scrollToTop("modal");c.data("panel",b);c=d.get(0);(f=c.getAttribute("data-load"))&&this.dispatchPanelEvent(f,c);d.trigger("loadpanel")}},hideModal:function(){var b=this,e=a.query("#modalContainer");
 177.251 +if(this.modalReference_){var c=this.scrollingDivs.hasOwnProperty(this.modalReference_.attr("id"));this.runTransition(b.modalTransition,b.modalWindow,b.modalTransContainer,!0);this.scrollingDivs.modal_container.disable();var d=a.query(e.data("panel")),f=d.data("unload");f&&this.dispatchPanelEvent(f,d.get(0));d.trigger("unloadpanel");setTimeout(function(){a.feat.nativeTouchScroll||a.os.desktop||!c?(b.modalReference_.append(a("#modalHeader header")),b.modalReference_.append(e.contents()),b.modalReference_.append(a("#modalFooter footer"))):
 177.252 +(b.modalReference_.children().eq(0).append(a("#modalHeader header")),a(b.modalReference_.get(0).childNodes[0]).append(e.children().eq(0).contents()),b.modalReference_.children().eq(0).append(a("#modalFooter footer")));b.modalReference_=null},this.transitionTime)}},updatePanel:function(b,e){b="#"+b.replace("#","");var c=a.query(b).get(0);if(c){var d=a.create("div",{html:e}),d=d.children(".panel")&&0<d.children(".panel").length?d.children(".panel").get(0):d.get(0);c.getAttribute("js-scrolling")&&("yes"===
 177.253 +c.getAttribute("js-scrolling").toLowerCase()||"true"===c.getAttribute("js-scrolling").toLowerCase())?(a.cleanUpContent(c.childNodes[0],!1,!0),a(c.childNodes[0]).html(e)):(a.cleanUpContent(c,!1,!0),a(c).html(e));var f=this.scrollingDivs[c.id];f&&f.refresh&&f.addPullToRefresh();d.getAttribute("data-title")&&c.setAttribute("data-title",d.getAttribute("data-title"))}},updateContentDiv:function(a,e){return this.updatePanel(a,e)},addContentDiv:function(b,e,c,d,f){var g;"string"===typeof b?(-1===b.lastIndexOf("#",
 177.254 +1)&&(b="#"+b),g=a.query(b).get(0)):(g=a.is$(b)?b.get(0):b,b=g.id);g?e=g:(e=a.create("div",{html:e}),e=e.children(".panel")&&0<e.children(".panel").length?e.children(".panel").get(0):e.get(0),!e.getAttribute("data-title")&&c&&e.setAttribute("data-title",c),c=e.id?e.id:b.replace("#",""),e.id=c,e.id!==b&&e.setAttribute("data-crc",b.replace("#","")));e.className="panel";c=e.id;this.addDivAndScroll(e,d,f);return c},addDivAndScroll:function(b,e,c,d){var f=!1,g,h=b.style.overflow,h="hidden"!==h&&"visible"!==
 177.255 +h;d=d||this.content;!a.feat.nativeTouchScroll&&(h&&!a.os.desktop)&&b.setAttribute("js-scrolling","true");if(b.getAttribute("js-scrolling")&&("yes"===b.getAttribute("js-scrolling").toLowerCase()||"true"===b.getAttribute("js-scrolling").toLowerCase()))h=f=!0;g=b.getAttribute("data-title")||b.title;b.title="";b.setAttribute("data-title",g);if(a(b).hasClass("no-scroll")||b.getAttribute("scrolling")&&"no"===b.getAttribute("scrolling"))f=h=!1,b.removeAttribute("js-scrolling");f?(g=b,d.appendChild(b),!1!==
 177.256 +this.selectBox&&this.selectBox.getOldSelects(g.id),!1!==this.passwordBox&&this.passwordBox.getOldPasswords(g.id)):(d.appendChild(b),g=b,b.style["-webkit-overflow-scrolling"]="none");h&&(this.scrollingDivs[g.id]=a(b).scroller({scrollBars:!0,verticalScroll:!0,horizontalScroll:this.horizontalScroll,vScrollCSS:"afScrollbar",refresh:e,useJsScroll:f,lockBounce:this.lockPageBounce,autoEnable:!1}),a(b).addClass("y-scroll"),this.horizontalScroll&&a(b).addClass("x-scroll"),c&&a.bind(this.scrollingDivs[g.id],
 177.257 +"refresh-release",function(a){if(a)return c(),!1}),f&&a(b).children().eq(0).addClass("afScrollPanel"));return g.id},scrollToTop:function(a,e){e=e||"300ms";a=a.replace("#","");this.scrollingDivs[a]&&this.scrollingDivs[a].scrollToTop(e)},scrollToBottom:function(a,e){a=a.replace("#","");this.scrollingDivs[a]&&this.scrollingDivs[a].scrollToBottom(e)},parsePanelFunctions:function(b,e,c){var d=b.getAttribute("data-footer"),f=b.getAttribute("data-header");d&&"none"===d.toLowerCase()?(this.toggleNavMenu(!1),
 177.258 +d=!1):this.toggleNavMenu(!0);d&&this.customFooter!==d?(this.customFooter=d,this.updateNavbarElements(d)):d!==this.customFooter&&(this.customFooter&&this.updateNavbarElements(this.defaultFooter),this.customFooter=!1);f&&"none"===f.toLowerCase()?(this.toggleHeaderMenu(!1),f=!1):this.toggleHeaderMenu(!0);f&&this.customHeader!==f?(this.customHeader=f,this.updateHeaderElements(f,c)):f!==this.customHeader&&(this.customHeader&&this.updateHeaderElements(this.defaultHeader,c),this.customHeader=!1);d=a(b).find("footer");
 177.259 +0<d.length&&(this.customFooter=b.id,d.data("parent",b.id),this.updateNavbarElements(d));d=a(b).find("header");0<d.length&&(this.customHeader=b.id,d.data("parent",b.id),this.updateHeaderElements(d,c));b.getAttribute("data-tab")&&(a.query("#navbar>footer>a:not(.button)").removeClass("pressed"),a.query("#navbar #"+b.getAttribute("data-tab")).addClass("pressed"));(c=b.getAttribute("data-left-menu")||b.getAttribute("data-nav"))&&this.customMenu!==c?(this.customMenu=c,this.updateSideMenuElements(c)):c!==
 177.260 +this.customMenu&&(this.customMenu&&this.updateSideMenuElements(this.defaultMenu),this.customMenu=!1);(c=b.getAttribute("data-right-menu")||b.getAttribute("data-aside"))&&this.customAside!==c?(this.customAside=c,this.updateAsideElements(c)):c!==this.customAside&&(this.customAside&&this.updateAsideElements(this.defaultAside),this.customAside=!1);e&&((c=e.getAttribute("data-unload"))&&this.dispatchPanelEvent(c,e),a(e).trigger("unloadpanel"));(c=b.getAttribute("data-load"))&&this.dispatchPanelEvent(c,
 177.261 +b);a(b).trigger("loadpanel");this.isSideMenuOn()&&this.toggleSideMenu(!1)},parseScriptTags:function(b){b&&a.fn&&"appframework"===a.fn.namespace&&a.parseJS(b)},loadContent:function(b,e,c,d,f){if(this.doingTransition)this.loadContentQueue.push([b,e,c,d,f]);else if(0!==b.length){var h=!0;f=f||document.createElement("a");if(-1===b.indexOf("#")){var k="url"+g(b),l=a.query("div.panel[data-crc='"+k+"']");0<a.query("#"+b).length?h=!1:0<l.length?(h=!1,"true"===f.getAttribute("data-refresh-ajax")||f.refresh&&
 177.262 +!0===f.refresh||this.isAjaxApp?h=!0:b="#"+l.get(0).id):0<a.query("#"+k).length&&(h=!1,"true"===f.getAttribute("data-refresh-ajax")||f.refresh&&!0===f.refresh||this.isAjaxApp?h=!0:b="#"+k)}-1===b.indexOf("#")&&h?this.loadAjax(b,e,c,d,f):this.loadDiv(b,e,c,d)}},loadDiv:function(b,e,c,d){var f=this,g=b.replace("#",""),h=g.indexOf("/"),l="";-1!==h&&(l=g.substr(h),g=g.substr(0,h));if(g=a.query("#"+g).get(0))if(g===this.activeDiv&&!c)this.isSideMenuOn()&&this.toggleSideMenu(!1);else{this.transitionType=
 177.263 +d;var n=this.activeDiv;b=g;if("true"===g.getAttribute("data-modal")||"true"===g.getAttribute("modal"))return this.showModal(g.id);n!==b&&(e?(this.clearHistory(),this.pushHistory("#"+this.firstDiv.id,g.id,d,l)):c||this.pushHistory(k,g.id,d,l),k="#"+g.id+l,this.doingTransition=!0,n.style.display="block",b.style.display="block",this.runTransition(d,n,b,c),this.parsePanelFunctions(g,n,c),this.loadContentData(g,e,c,d),a.feat.nativeTouchScroll?setTimeout(function(){f.scrollingDivs[n.id]&&f.scrollingDivs[n.id].disable()},
 177.264 +numOnly(f.transitionTime)+50):"undefined"!==typeof f.scrollingDivs[n.id]&&f.scrollingDivs[n.id].disable())}else a(document).trigger("missingpanel",null,{missingTarget:b})},loadContentData:function(b,e,c){var d;c?0<this.history.length&&(c=this.history[this.history.length-1],d=c.target.indexOf("/"),c=-1!==d?c.target.substr(0,d):c.target,(c=a.query(c).get(0))?this.setBackButtonText(c.getAttribute("data-title")):this.setBackButtonText("Back")):this.activeDiv.getAttribute("data-title")?this.setBackButtonText(this.activeDiv.getAttribute("data-title")):
 177.265 +this.setBackButtonText("Back");b.getAttribute("data-title")&&this.setTitle(b.getAttribute("data-title"));e&&(this.setBackButtonText(this.firstDiv.getAttribute("data-title")),b===this.firstDiv&&(this.history.length=0));a("#header #menubadge").css("float","right");0===this.history.length?(this.setBackButtonVisibility(!1),this.history=[],a("#header #menubadge").css("float","left")):this.setBackButtonVisibility(this.showBackButton&&this.showBackbutton);this.activeDiv=b;this.scrollingDivs[this.activeDiv.id]&&
 177.266 +this.scrollingDivs[this.activeDiv.id].enable(this.resetScrollers)},loadAjax:function(b,e,c,d,f){if(!("afui_ajax"===this.activeDiv.id&&b===this.ajaxUrl)){var h="url"+g(b),k=this;-1===b.indexOf("http")&&(b=intel.xdk.webRoot+b);var l=new XMLHttpRequest;f&&"object"!==typeof f&&(f=document.createElement("a"),f.setAttribute("data-persist-ajax",!0));f=f||document.createElement("a");l.onreadystatechange=function(){if(4===l.readyState&&200===l.status){this.doingTransition=!1;var g,n=!1;g=a.query("#"+h);var s=
 177.267 +"",A=function(a){(a=k.scrollingDivs[a])&&a.refresh&&a.hideRefresh()};if(0<g.length)A(h),k.updatePanel(h,l.responseText),g.get(0).setAttribute("data-title",f.title?f.title:b);else if(f.getAttribute("data-persist-ajax")||k.isAjaxApp){var q="true"===f.getAttribute("data-pull-scroller")?!0:!1;g=q?function(){setTimeout(function(){f.refresh=!0;k.loadContent(b,e,c,d,f);f.refresh=!1},500)}:null;var r=a(l.responseText);r.hasClass("panel")?(s=r.get(0).className,h=r.attr("id"),r=r.get(0).innerHTML):(s=r.className,
 177.268 +r=r.html());A(h);0<a("#"+h).length?k.updatePanel("#"+h,r):0<a("div.panel[data-crc='"+h+"']").length?(k.updatePanel(a("div.panel[data-crc='"+h+"']").get(0).id,r),h=a("div.panel[data-crc='"+h+"']").get(0).id):h=k.addContentDiv(h,l.responseText,f.title?f.title:b,q,g)}else k.updatePanel("afui_ajax",l.responseText),a.query("#afui_ajax").attr("data-title",f.title?f.title:b),k.loadContent("#afui_ajax",e,c,d),n=!0;A=document.createElement("div");a(A).html(l.responseText);k.parseScriptTags(A);if(n)k.showLoading&&
 177.269 +k.hideMask();else{if(s){n=s.split(" ");for(s=0;s<n.length;s++)"panel"!==n[s].trim()&&a("#"+h).addClass(n[s])}k.loadContent("#"+h,e,c,d);k.showLoading&&k.hideMask();return null}}else 4===l.readyState&&a.ui.hideMask()};this.ajaxUrl=b;var n=this.useAjaxCacheBuster?b+(b.split("?")[1]?"&":"?")+"cache="+1E16*Math.random():b;l.open("GET",n,!0);l.setRequestHeader("X-Requested-With","XMLHttpRequest");l.send();this.showLoading&&this.showMask()}},runTransition:function(a,e,c,d){this.availableTransitions[a]||
 177.270 +(a="default");"none"===e.style.display&&(e.style.display="block");"none"===c.style.display&&(c.style.display="block");this.availableTransitions[a].call(this,e,c,d)},launch:function(){if(!1===this.hasLaunched||this.launchCompleted)this.hasLaunched=!0;else{if(this.isLaunching)return!0;this.isLaunching=!0;var b=this;this.viewportContainer=af.query("#afui");this.navbar=af.query("#navbar").get(0);this.content=af.query("#content").get(0);this.header=af.query("#header").get(0);this.menu=af.query("#menu").get(0);
 177.271 +this.viewportContainer.on("click","a",function(a){b.useInternalRouting&&h(a,a.currentTarget)});var e=null;a.bind(a.touchLayer,"enter-edit",function(a){e=a});a.os.android&&(a.bind(a.touchLayer,"enter-edit-reshape",function(){var c=a(e),d=c.closest(b.activeDiv);if(d&&0<d.size())if(a.os.androidICS){var f=b.scrollingDivs[b.activeDiv.id],g=f.scrollTop;f.scrollBy({x:0,y:(c.offset().top-d.offset().top+g)/2})}else if(a.os.android||a.os.blackberry)f=c.offset(),d=d.offset(),f.bottom>d.bottom&&f.height<d.height&&
 177.272 +b.scrollingDivs[b.activeDiv.id].scrollToItem(c,"bottom")}),a.bind(a.touchLayer,"exit-edit-reshape",function(){b.activeDiv&&(b.activeDiv.id&&b.scrollingDivs.hasOwnProperty(b.activeDiv.id))&&b.scrollingDivs[b.activeDiv.id].setPaddings(0,0)}));this.navbar||(this.navbar=a.create("div",{id:"navbar"}).get(0),this.viewportContainer.append(this.navbar));this.header||(this.header=a.create("div",{id:"header"}).get(0),this.viewportContainer.prepend(this.header));this.content||(this.content=a.create("div",{id:"content"}).get(0),
 177.273 +a(this.content).insertAfter(this.header));this.menu||(this.menu=a.create("div",{id:"menu",html:"<div id='menu_scroller'></div>"}).get(0),this.viewportContainer.append(this.menu),this.menu.style.overflow="hidden",this.scrollingDivs.menu_scroller=a.query("#menu_scroller").scroller({scrollBars:!0,verticalScroll:!0,vScrollCSS:"afScrollbar",useJsScroll:!a.feat.nativeTouchScroll,autoEnable:!0,lockBounce:this.lockPageBounce,hasParent:!0}),a.feat.nativeTouchScroll&&a.query("#menu_scroller").css("height",
 177.274 +"100%"),this.asideMenu=a.create("div",{id:"aside_menu",html:"<div id='aside_menu_scroller'></div>"}).get(0),this.viewportContainer.append(this.asideMenu),this.asideMenu.style.overflow="hidden",this.scrollingDivs.aside_menu_scroller=a.query("#aside_menu_scroller").scroller({scrollBars:!0,verticalScroll:!0,vScrollCSS:"afScrollbar",useJsScroll:!a.feat.nativeTouchScroll,autoEnable:!0,lockBounce:this.lockPageBounce,hasParent:!0}),a.feat.nativeTouchScroll&&a.query("#aside_menu_scroller").css("height","100%"));
 177.275 +a(this.header).html("<a class='backButton button'></a> <h1 id='pageTitle'></h1>"+this.header.innerHTML);this.backButton=a.query("#header .backButton").css("visibility","hidden");a(document).on("click","#header .backButton",function(a){a.preventDefault();b.goBack()});this.titlebar=a.query("#header #pageTitle").get(0);this.addContentDiv("afui_ajax","");var c=a.create("div",{id:"afui_mask",className:"ui-loader",html:"<span class='ui-icon ui-icon-loading spin'></span><h1>Loading Content</h1>"}).css({"z-index":2E4,
 177.276 +display:"none"});document.body.appendChild(c.get(0));c=a.create("div",{id:"afui_modal"}).get(0);a(c).hide();c.appendChild(a.create("div",{id:"modalHeader",className:"header"}).get(0));c.appendChild(a.create("div",{id:"modalContainer"}).get(0));c.appendChild(a.create("div",{id:"modalFooter",className:"footer"}).get(0));this.modalTransContainer=a.create("div",{id:"modalTransContainer"}).appendTo(c).get(0);this.viewportContainer.append(c);this.scrollingDivs.modal_container=a.query("#modalContainer").scroller({scrollBars:!0,
 177.277 +vertical:!0,vScrollCSS:"afScrollbar",lockBounce:this.lockPageBounce});this.modalWindow=c;for(var d={},c=this.viewportContainer.get(0).querySelectorAll(".panel"),f=0;f<c.length;f++){var g=c[f],n=g,y=g.previousSibling;g.parentNode&&"content"!==g.parentNode.id?(n.getAttribute("selected")&&(this.firstDiv=g),this.addDivAndScroll(n),a.query("#content").append(g)):g.parsedContent||(g.parsedContent=1,n.getAttribute("selected")&&(this.firstDiv=g),this.addDivAndScroll(g),a(g).insertAfter(y));g.getAttribute("data-defer")&&
 177.278 +(d[g.id]=g.getAttribute("data-defer"));this.firstDiv||(this.firstDiv=g);g=null}var c=null,u=!1,F=Object.keys(d).length,c=function(c){a.ajax({url:intel.xdk.webRoot+d[c],success:function(d){0<d.length&&(b.updatePanel(c,d),b.parseScriptTags(a.query("#"+c).get(0)));z++;z>=F&&(u=!1,a(document).trigger("defer:loaded"))},error:function(){console.log("Error with deferred load "+intel.xdk.webRoot+d[c]);z++;z>=F&&(u=!1,a(document).trigger("defer:loaded"))}})};if(0<F){var u=!0,z=0,s;for(s in d)c(s)}if(this.firstDiv)if(this.activeDiv=
 177.279 +this.firstDiv,this.scrollingDivs[this.activeDiv.id]&&this.scrollingDivs[this.activeDiv.id].enable(),s=function(){a.query("#navbar").append(a.create("footer",{id:"defaultNav"}).append(a.query("#navbar").children()));b.defaultFooter="defaultNav";b.prevFooter=a.query("#defaultNav");b.updateNavbarElements(b.prevFooter);var c=a.query("nav").get(0);c&&(b.defaultMenu=a(c),b.updateSideMenuElements(b.defaultMenu),b.prevMenu=b.defaultMenu);if(c=a.query("aside").get(0))b.defaultAside=a(c),b.updateAsideElements(b.defaultAside),
 177.280 +b.prevAsideMenu=b.defaultAside;b.defaultHeader="defaultHeader";a.query("#header").append(a.create("header",{id:"defaultHeader"}).append(a.query("#header").children()));b.prevHeader=a.query("#defaultHeader");a.query("#header").addClass("header");a.query("#navbar").addClass("footer");a.query("#navbar").on("click","footer>a:not(.button)",function(b){a.query("#navbar>footer>a").not(b.currentTarget).removeClass("pressed");a(b.currentTarget).addClass("pressed")});0<a.query("nav").length&&(c=b.splitview?
 177.281 +" splitview":"",a.query("#afui #header").addClass("hasMenu"+c),a.query("#afui #content").addClass("hasMenu"+c),a.query("#afui #navbar").addClass("hasMenu"+c),a.query("#afui #menu").addClass("hasMenu"+c),a.query("#afui #aside_menu").addClass(c));0<a.query("aside").length&&a.query("#afui #header, #afui #content, #afui #navbar").addClass("hasAside");a.query("#afui #menu").addClass("tabletMenu");a.ui.splitview&&window.innerWidth>parseInt(a.ui.handheldMinWidth,10)&&(a.ui.sideMenuWidth=a("#menu").css("width")+
 177.282 +"px");var c=b.getPanelId(l),d=null!==c&&c==="#"+b.firstDiv.id;0<c.length&&b.loadDefaultHash&&!d?b.loadContent(l,!0,!1,"none"):(k="#"+b.firstDiv.id,b.firstDiv.style.display="block",b.parsePanelFunctions(b.firstDiv),b.loadContentData(b.firstDiv),a.query("#header .backButton").css("visibility","hidden"),("true"===b.firstDiv.getAttribute("data-modal")||"true"===b.firstDiv.getAttribute("modal"))&&b.showModal(b.firstDiv.id));b.launchCompleted=!0;a.query("#afui #splashscreen").remove();a.os.fennec?a(document).trigger("afui:ready"):
 177.283 +setTimeout(function(){a(document).trigger("afui:ready")})},u)a(document).one("defer:loaded",s);else s();else setTimeout(function(){a(document).trigger("afui:ready")});a.bind(b,"content-loaded",function(){if(0<b.loadContentQueue.length){var a=b.loadContentQueue.splice(0,1)[0];b.loadContent(a[0],a[1],a[2],a[3],a[4])}});(window.navigator.standalone||this.isIntel)&&this.blockPageScroll();this.enableTabBar();this.topClickScroll()}},topClickScroll:function(){var a=this;document.getElementById("header").addEventListener("click",
 177.284 +function(e){15>=e.clientY&&"h1"===e.target.nodeName.toLowerCase()&&a.scrollingDivs[a.activeDiv.id].scrollToTop("100")})},blockPageScroll:function(){a.query("#afui #header").bind("touchmove",function(a){a.preventDefault()})},noTransition:function(a,e){e.style.display="block";a.style.display="block";this.clearAnimations(e);this.css3animate(a,{x:"0%",y:0});this.finishTransition(a);e.style.zIndex=2;a.style.zIndex=1},finishTransition:function(b,e){b.style.display="none";this.doingTransition=!1;b&&a(b).trigger("unloadpanelcomplete");
 177.285 +e&&a(e).trigger("loadpanelcomplete");e&&this.clearAnimations(e);b&&this.clearAnimations(b);a.trigger(this,"content-loaded")},clearAnimations:function(b){b.style[a.feat.cssPrefix+"Transform"]="none";b.style[a.feat.cssPrefix+"Transition"]="none"}};var h=function(b,e){var c=document.getElementById("afui");if(e!==c){if("a"!==e.tagName.toLowerCase()&&e.parentNode)return h(b,e.parentNode);if("undefined"!==e.tagName&&"a"===e.tagName.toLowerCase()){if(!1!==("function"===typeof a.ui.customClickHandler?a.ui.customClickHandler:
 177.286 +!1)&&a.ui.customClickHandler(e,b))return b.preventDefault();if(!(-1!==e.href.toLowerCase().indexOf("javascript:")||e.getAttribute("data-ignore")))if(-1===e.hash.indexOf("#")&&0<e.target.length)0!==e.href.toLowerCase().indexOf("javascript:")&&(a.ui.isIntel?(b.preventDefault(),intel.xdk.device.launchExternal(e.href)):a.os.desktop||(b.target.target="_blank"));else{var c=e.href,d=location.protocol+"//"+location.hostname+":"+location.port+location.pathname;0===c.indexOf(d)&&(c=c.substring(d.length));if("#"===
 177.287 +c||c.indexOf("#")===c.length-1||0===c.length&&0===e.hash.length)return b.preventDefault();d=/^((http|https|file):\/\/)/;-1!==e.href.indexOf(":")&&d.test(e.href)&&b.preventDefault();var d=e.getAttribute("data-transition"),f=e.getAttribute("data-resetHistory"),f=f&&"true"===f.toLowerCase()?!0:!1,c=0<e.hash.length?e.hash:c;a.ui.loadContent(c,f,0,d,e)}}}},g=function(a,e){void 0===e&&(e=0);var c=0,c=0;e^=-1;for(var d=0,f=a.length;d<f;d++)c=(e^a.charCodeAt(d))&255,c="0x"+"00000000 77073096 EE0E612C 990951BA 076DC419 706AF48F E963A535 9E6495A3 0EDB8832 79DCB8A4 E0D5E91E 97D2D988 09B64C2B 7EB17CBD E7B82D07 90BF1D91 1DB71064 6AB020F2 F3B97148 84BE41DE 1ADAD47D 6DDDE4EB F4D4B551 83D385C7 136C9856 646BA8C0 FD62F97A 8A65C9EC 14015C4F 63066CD9 FA0F3D63 8D080DF5 3B6E20C8 4C69105E D56041E4 A2677172 3C03E4D1 4B04D447 D20D85FD A50AB56B 35B5A8FA 42B2986C DBBBC9D6 ACBCF940 32D86CE3 45DF5C75 DCD60DCF ABD13D59 26D930AC 51DE003A C8D75180 BFD06116 21B4F4B5 56B3C423 CFBA9599 B8BDA50F 2802B89E 5F058808 C60CD9B2 B10BE924 2F6F7C87 58684C11 C1611DAB B6662D3D 76DC4190 01DB7106 98D220BC EFD5102A 71B18589 06B6B51F 9FBFE4A5 E8B8D433 7807C9A2 0F00F934 9609A88E E10E9818 7F6A0DBB 086D3D2D 91646C97 E6635C01 6B6B51F4 1C6C6162 856530D8 F262004E 6C0695ED 1B01A57B 8208F4C1 F50FC457 65B0D9C6 12B7E950 8BBEB8EA FCB9887C 62DD1DDF 15DA2D49 8CD37CF3 FBD44C65 4DB26158 3AB551CE A3BC0074 D4BB30E2 4ADFA541 3DD895D7 A4D1C46D D3D6F4FB 4369E96A 346ED9FC AD678846 DA60B8D0 44042D73 33031DE5 AA0A4C5F DD0D7CC9 5005713C 270241AA BE0B1010 C90C2086 5768B525 206F85B3 B966D409 CE61E49F 5EDEF90E 29D9C998 B0D09822 C7D7A8B4 59B33D17 2EB40D81 B7BD5C3B C0BA6CAD EDB88320 9ABFB3B6 03B6E20C 74B1D29A EAD54739 9DD277AF 04DB2615 73DC1683 E3630B12 94643B84 0D6D6A3E 7A6A5AA8 E40ECF0B 9309FF9D 0A00AE27 7D079EB1 F00F9344 8708A3D2 1E01F268 6906C2FE F762575D 806567CB 196C3671 6E6B06E7 FED41B76 89D32BE0 10DA7A5A 67DD4ACC F9B9DF6F 8EBEEFF9 17B7BE43 60B08ED5 D6D6A3E8 A1D1937E 38D8C2C4 4FDFF252 D1BB67F1 A6BC5767 3FB506DD 48B2364B D80D2BDA AF0A1B4C 36034AF6 41047A60 DF60EFC3 A867DF55 316E8EEF 4669BE79 CB61B38C BC66831A 256FD2A0 5268E236 CC0C7795 BB0B4703 220216B9 5505262F C5BA3BBE B2BD0B28 2BB45A92 5CB36A04 C2D7FFA7 B5D0CF31 2CD99E8B 5BDEAE1D 9B64C2B0 EC63F226 756AA39C 026D930A 9C0906A9 EB0E363F 72076785 05005713 95BF4A82 E2B87A14 7BB12BAE 0CB61B38 92D28E9B E5D5BE0D 7CDCEFB7 0BDBDF21 86D3D2D4 F1D4E242 68DDB3F8 1FDA836E 81BE16CD F6B9265B 6FB077E1 18B74777 88085AE6 FF0F6A70 66063BCA 11010B5C 8F659EFF F862AE69 616BFFD3 166CCF45 A00AE278 D70DD2EE 4E048354 3903B3C2 A7672661 D06016F7 4969474D 3E6E77DB AED16A4A D9D65ADC 40DF0B66 37D83BF0 A9BCAE53 DEBB9EC5 47B2CF7F 30B5FFE9 BDBDF21C CABAC28A 53B39330 24B4A3A6 BAD03605 CDD70693 54DE5729 23D967BF B3667A2E C4614AB8 5D681B02 2A6F2B94 B40BBE37 C30C8EA1 5A05DF1B 2D02EF8D".substr(9*
 177.288 +c,8),e=e>>>8^c;return(e^-1)>>>0};a.ui=new f;a.ui.init=!0;a(window).trigger("afui:preinit");a(window).trigger("afui:init")})(af);
 177.289 +(function(a){var n=function(){a.ui.isIntel=!0;setTimeout(function(){document.getElementById("afui").style.height="100%";document.body.style.height="100%";document.documentElement.style.minHeight=window.innerHeight},30);document.removeEventListener("intel.xdk.device.ready",n)};document.addEventListener("intel.xdk.device.ready",n);a.feat.nativeTouchScroll&&document.addEventListener("orientationchange",function(){if(a.ui.scrollingDivs[a.ui.activeDiv.id]){var l=a.ui.scrollingDivs[a.ui.activeDiv.id];l&&
 177.290 +(0===l.el.scrollTop&&(l.disable(),setTimeout(function(){l.enable()},300)),l.refresh&&l.updateP2rHackPosition())}})})(af);
 177.291 +(function(a){a.availableTransitions.fade=function(n,l,k){var f=this;k?(l.style.zIndex=1,n.style.zIndex=2,f.clearAnimations(l),f.css3animate(n,{x:"0%",time:a.transitionTime,opacity:0.1,complete:function(a){a?f.finishTransition(n,l):(f.css3animate(n,{x:"-100%",opacity:1,complete:function(){f.finishTransition(n)}}),l.style.zIndex=2,n.style.zIndex=1)}})):(n.style.zIndex=1,l.style.zIndex=2,l.style.opacity=0,f.css3animate(l,{x:"0%",opacity:0.1,complete:function(){f.css3animate(l,{x:"0%",time:a.transitionTime,
 177.292 +opacity:1,complete:function(a){a?f.finishTransition(n,l):(f.clearAnimations(l),f.css3animate(n,{x:"-100%",y:0,complete:function(){f.finishTransition(n)}}))}})}}))}})(af.ui);
 177.293 +(function(a){a.availableTransitions.flip=function(n,l,k){var f=this;k||(n.style.zIndex=1,l.style.zIndex=2);f.css3animate(l,{x:"100%",scale:0.8,rotateY:"180deg",complete:function(){f.css3animate(l,{x:"0%",scale:1,time:a.transitionTime,rotateY:"0deg",complete:function(){f.clearAnimations(l)}})}});f.css3animate(n,{x:"100%",time:a.transitionTime,scale:0.8,rotateY:"180deg",complete:function(){f.css3animate(n,{x:"-100%",opacity:1,scale:1,rotateY:"0deg",complete:function(){f.finishTransition(n)}});l.style.zIndex=
 177.294 +2;n.style.zIndex=1}})}})(af.ui);
 177.295 +(function(a){a.availableTransitions.pop=function(n,l,k){var f=this;k?(l.style.zIndex=1,n.style.zIndex=2,f.clearAnimations(l),f.css3animate(n,{x:"0%",time:a.transitionTime,opacity:0.1,scale:0.2,origin:"50% 50%",complete:function(a){a?f.finishTransition(n):(f.css3animate(n,{x:"-100%",opacity:1,complete:function(){f.finishTransition(n)}}),l.style.zIndex=2,n.style.zIndex=1)}})):(n.style.zIndex=1,l.style.zIndex=2,f.css3animate(l,{x:"0%",scale:0.2,origin:"50% 50%",opacity:0.1,time:"0ms",complete:function(){f.css3animate(l,
 177.296 +{x:"0%",time:a.transitionTime,scale:1,opacity:1,origin:"0% 0%",complete:function(a){a?f.finishTransition(n,l):(f.clearAnimations(l),f.css3animate(n,{x:"100%",y:0,complete:function(){f.finishTransition(n)}}))}})}}))}})(af.ui);
 177.297 +(function(a){function n(l,k,f){var h=this;f?h.css3animate(l,{x:"0%",y:"0%",complete:function(){h.css3animate(l,{x:"100%",time:a.transitionTime,complete:function(){h.finishTransition(l,k)}}).link(k,{x:"0%",time:a.transitionTime})}}).link(k,{x:"-100%",y:"0%"}):h.css3animate(l,{x:"0%",y:"0%",complete:function(){h.css3animate(l,{x:"-100%",time:a.transitionTime,complete:function(){h.finishTransition(l,k)}}).link(k,{x:"0%",time:a.transitionTime})}}).link(k,{x:"100%",y:"0%"})}a.availableTransitions.slide=
 177.298 +n;a.availableTransitions["default"]=n})(af.ui);(function(a){a.availableTransitions.down=function(n,l,k){var f=this;k?(n.style.zIndex=2,l.style.zIndex=1,f.css3animate(n,{y:"0%",x:"0%",complete:function(){f.css3animate(n,{y:"-100%",time:a.transitionTime,complete:function(){f.finishTransition(n,l)}})}})):(n.style.zIndex=1,l.style.zIndex=2,f.css3animate(l,{y:"-100%",x:"0%",time:"10ms",complete:function(){f.css3animate(l,{y:"0%",time:a.transitionTime,complete:function(){f.finishTransition(n,l)}})}}))}})(af.ui);
 177.299 +(function(a){a.availableTransitions.up=function(n,l,k){var f=this;k?(n.style.zIndex=2,l.style.zIndex=1,f.css3animate(n,{y:"0%",x:"0%",complete:function(){f.css3animate(n,{y:"100%",time:a.transitionTime,complete:function(){f.finishTransition(n,l)}})}})):(n.style.zIndex=1,l.style.zIndex=2,f.css3animate(l,{y:"100%",x:"0%",time:"10ms",complete:function(){f.css3animate(l,{y:"0%",time:a.transitionTime,complete:function(){f.finishTransition(n,l)}})}}))}})(af.ui);
 177.300 +(function(a){function n(){a.ui.isWin8=!0;a.os.ie&&a.ui.isSideMenuEnabled()&&a.ui.ready(function(){if(!a.ui.tilesLoaded){a.ui.tilesLoaded=!0;if(window.innerWidth>a.ui.handheldMinWidth)return!0;a.ui.slideSideMenu&&(a.ui.slideSideMenu=!1);a.query("#afui #navbar footer").append("<a id='metroMenu' onclick='$.ui.toggleSideMenu()'>\u2022\u2022\u2022</a>");var l=a.query("#afui #navbar").find("a").not(".button");if(0<l.length){l.data("ignore-pressed","true").data("resetHistory","true");var k=parseFloat(100/
 177.301 +l.length);l.css("width",k+"%")}var f=a.ui.updateNavbarElements;a.ui.updateNavbarElements=function(){f.apply(a.ui,arguments);1!==a.query("#afui #navbar #metroMenu").length&&a.query("#afui #navbar footer").append("<a id='metroMenu' onclick='$.ui.toggleSideMenu()'>\u2022\u2022\u2022</a>")};a.ui.isSideMenuOn=function(){var f=0>parseInt(a.getCssMatrix(a("#navbar")).f,10)?!0:!1;return this.isSideMenuEnabled()&&f};a.ui.toggleRightSideMenu=function(f,g,b){if(this.isAsideMenuEnabled()&&!this.togglingAsideMenu){var e=
 177.302 +this,c=a("#menu"),d=a.query("#aside_menu"),k=a.query("#content,  #header, #navbar"),l=a.query(".afui_panel_mask");b=b||this.transitionTime;var n="block"===a("#aside_menu").css("display"),y="-"+e.sideMenuWidth;0===l.length&&window.innerWidth<a.ui.handheldMinWidth&&(k.append("<div class='afui_panel_mask'></div>"),l=a.query(".afui_panel_mask"),a(".afui_panel_mask").bind("click",function(){a.ui.toggleSideMenu(!1,null,null,!0)}));var u=this.getSideMenuPosition();n&&0<u&&(n=!1);if(2===f||!n&&(void 0!==
 177.303 +f&&!1!==f||void 0===f))this.togglingSideMenu=!0,d.show(),e.css3animate(k,{x:y,time:b,complete:function(b){e.togglingSideMenu=!1;k.vendorCss("Transition","");g&&g(b);0!==l.length&&window.innerWidth<a.ui.handheldMinWidth&&l.show()}});else if(void 0===f||void 0!==f&&!1===f)this.togglingSideMenu=!0,e.css3animate(k,{x:"0px",time:b,complete:function(b){k.vendorCss("Transition","");k.vendorCss("Transform","");e.togglingSideMenu=!1;g&&g(b);a.ui.splitview||c.hide();d.hide();0!==l.length&&window.innerWidth<
 177.304 +a.ui.handheldMinWidth&&l.hide()}})}};a.ui.toggleLeftSideMenu=function(f,g){if(this.isSideMenuEnabled()&&!this.togglingSideMenu){this.togglingSideMenu=!0;var b=this,e=a.query("#menu"),c=a.query("#navbar"),d=this.isSideMenuOn();if(2===f||!d&&(void 0!==f&&!1!==f||void 0===f))e.show(),b.css3animate(c,{y:"-150px",time:a.ui.transitionTime,complete:function(){b.togglingSideMenu=!1;g&&g(!0)}}),b.css3animate(e,{y:"0px",time:a.ui.transitionTime});else if(void 0===f||void 0!==f&&!1===f)b.css3animate(c,{y:"0",
 177.305 +time:a.ui.transitionTime,complete:function(){b.togglingSideMenu=!1;g&&g(!0);e.hide()}}),b.css3animate(e,{y:"150px",time:a.ui.transitionTime})}}}})}if(!a)throw"This plugin requires AFUi";a.ui?a.ui.ready(function(){n()}):a(document).ready(function(){n()})})(af);
   178.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   178.2 +++ b/Touchgui/www/lib/appframework/jq.appframework.min.js	Thu Jun 04 14:50:33 2015 +0200
   178.3 @@ -0,0 +1,18 @@
   178.4 +/*! intel-appframework - v2.1.0 - 2014-09-16 */
   178.5 +
   178.6 +/*
   178.7 + Intel 2013
   178.8 + @author Ian Maffett
   178.9 + @description A plugin to allow jQuery developers to use App Framework UI
  178.10 +*/
  178.11 +(function(c,f){function p(a,b){if(a)if(a.nodeType)b[b.length++]=a;else for(var e=0,d=a.length;e<d;e++)b[b.length++]=a[e]}function m(a,b){a.os={};a.os.webkit=b.match(/WebKit\/([\d.]+)/)?!0:!1;a.os.android=b.match(/(Android)\s+([\d.]+)/)||b.match(/Silk-Accelerated/)?!0:!1;a.os.androidICS=a.os.android&&b.match(/(Android)\s4/)?!0:!1;a.os.ipad=b.match(/(iPad).*OS\s([\d_]+)/)?!0:!1;a.os.iphone=!a.os.ipad&&b.match(/(iPhone\sOS)\s([\d_]+)/)?!0:!1;a.os.ios7=(a.os.ipad||a.os.iphone)&&b.match(/7_/)||(a.os.ipad||
  178.12 +a.os.iphone)&&b.match(/8_/)?!0:!1;a.os.webos=b.match(/(webOS|hpwOS)[\s\/]([\d.]+)/)?!0:!1;a.os.touchpad=a.os.webos&&b.match(/TouchPad/)?!0:!1;a.os.ios=a.os.ipad||a.os.iphone;a.os.playbook=b.match(/PlayBook/)?!0:!1;a.os.blackberry10=b.match(/BB10/)?!0:!1;a.os.blackberry=a.os.playbook||a.os.blackberry10||b.match(/BlackBerry/)?!0:!1;a.os.chrome=b.match(/Chrome/)?!0:!1;a.os.opera=b.match(/Opera/)?!0:!1;a.os.fennec=b.match(/fennec/i)?!0:b.match(/Firefox/)?!0:!1;a.os.ie=b.match(/MSIE 10.0/i)||b.match(/Trident\/7/i)?
  178.13 +!0:!1;a.os.ieTouch=a.os.ie&&b.toLowerCase().match(/touch/i)?!0:!1;a.os.tizen=b.match(/Tizen/i)?!0:!1;a.os.supportsTouch=f.DocumentTouch&&h instanceof f.DocumentTouch||"ontouchstart"in f;a.os.kindle=b.match(/Silk-Accelerated/)?!0:!1;a.feat={};var e=h.documentElement.getElementsByTagName("head")[0];a.feat.nativeTouchScroll="undefined"!==typeof e.style["-webkit-overflow-scrolling"]&&(a.os.ios||a.os.blackberry10);a.feat.cssPrefix=a.os.webkit?"Webkit":a.os.fennec?"Moz":a.os.ie?"ms":a.os.opera?"O":"";a.feat.cssTransformStart=
  178.14 +!a.os.opera?"3d(":"(";a.feat.cssTransformEnd=!a.os.opera?",0)":")";a.os.android&&!a.os.webkit&&(a.os.android=!1)}jQuery.event.props.push("touches");jQuery.event.props.push("originalTouches");jQuery.event.props.push("changedTouches");var h=f.document,l={},k="object"===typeof MSApp,q=1;c.extend(c.fn,{vendorCss:function(a,b,e){return this.css(c.feat.cssPrefix+a,b,e)},cssTranslate:function(a){return this.vendorCss("Transform","translate"+c.feat.cssTransformStart+a+c.feat.cssTransformEnd)},computedStyle:function(a){if(!(0===
  178.15 +this.length||void 0==a))return f.getComputedStyle(this[0],"")[a]},replaceClass:function(a,b){if(void 0==a||void 0==b)return this;var e=function(a){c=c.replace(a in l?l[a]:l[a]=RegExp("(^|\\s)"+a+"(\\s|$)")," ")},d=0;for(;d<this.length;d++)if(void 0==a)this[d].className=b;else{var c=this[d].className;a.split(/\s+/g).concat(b.split(/\s+/g)).forEach(e);c=c.trim();this[d].className=0<c.length?(c+" "+b).trim():b}return this}});m(c,navigator.userAgent);c.__detectUA=m;c.uuid=function(){var a=function(){return(65536*
  178.16 +(1+Math.random())|0).toString(16).substring(1)};return a()+a()+"-"+a()+"-"+a()+"-"+a()+"-"+a()+a()+a()};c.getCssMatrix=function(a){c.is$(a)&&(a=a.get(0));var b=f.WebKitCSSMatrix||f.MSCSSMatrix;if(void 0===a)return b?new b:{a:0,b:0,c:0,d:0,e:0,f:0};a=f.getComputedStyle(a);a=a.webkitTransform||a.transform||a[c.feat.cssPrefix+"Transform"];return b?new b(a):a?(b=a.replace(/[^0-9\-.,]/g,"").split(","),{a:+b[0],b:+b[1],c:+b[2],d:+b[3],e:+b[4],f:+b[5]}):{a:0,b:0,c:0,d:0,e:0,f:0}};c.create=function(a,b){var e,
  178.17 +d=new c;if(b||"<"!==a[0]){b.html&&(b.innerHTML=b.html,delete b.html);e=h.createElement(a);for(var g in b)e[g]=b[g];d[d.length++]=e}else e=h.createElement("div"),k?MSApp.execUnsafeLocalFunction(function(){e.innerHTML=a.trim()}):e.innerHTML=a,p(e.childNodes,d);return d};c.query=function(a,b){try{return c(a,b)}catch(e){return c()}};c.bind=function(a,b,e){a.__events||(a.__events={});c.isArray(b)||(b=[b]);for(var d=0;d<b.length;d++)a.__events[b[d]]||(a.__events[b[d]]=[]),a.__events[b[d]].push(e)};c.trigger=
  178.18 +function(a,b,e){var d=!0;if(!a.__events)return d;c.isArray(b)||(b=[b]);c.isArray(e)||(e=[]);for(var g=0;g<b.length;g++)if(a.__events[b[g]])for(var f=a.__events[b[g]],h=0;h<f.length;h++)c.isFunction(f[h])&&!1===f[h].apply(a,e)&&(d=!1);return d};c.unbind=function(a,b,e){if(a.__events)if(void 0==b)delete a.__events;else{c.isArray(b)||(b=[b]);for(var d=0;d<b.length;d++)if(a.__events[b[d]])for(var g=a.__events[b[d]],f=0;f<g.length;f++)if(void 0==e&&delete g[f],g[f]===e){g.splice(f,1);break}}};c.cleanUpContent=
  178.19 +function(){};c.isObject=function(a){return"object"===typeof a};c.asap=function(a,b,e){if(!c.isFunction(a))throw"$.asap - argument is not a valid function";setTimeout(function(){a.apply(b,e)})};var n={};c.parseJS=function(a){if(a){if("string"===typeof a){var b=h.createElement("div");k?MSApp.execUnsafeLocalFunction(function(){b.innerHTML=a}):b.innerHTML=a;a=b}var c=a.getElementsByTagName("script");a=null;for(var d=0;d<c.length;d++)if(0<c[d].src.length&&!n[c[d].src]&&!k){var g=h.createElement("script");
  178.20 +g.type=c[d].type;g.src=c[d].src;h.getElementsByTagName("head")[0].appendChild(g);n[c[d].src]=1;g=null}else f.eval(c[d].innerHTML)}};c.is$=function(a){return a instanceof c};c.jsonP=function(a){if(k)return a.type="get",a.dataType=null,c.get(a);var b="jsonp_callback"+ ++q,e="",d,g=h.createElement("script");f[b]=function(d){clearTimeout(e);c(g).remove();delete f[b];a.success.call(void 0,d)};-1!==a.url.indexOf("callback=?")?g.src=a.url.replace(/=\?/,"="+b):(d=a.jsonp?a.jsonp:"callback",-1===a.url.indexOf("?")?
  178.21 +a.url+="?"+d+"="+b:a.url+="&"+d+"="+b,g.src=a.url);a.error&&(g.onerror=function(){clearTimeout(e);a.error.call(void 0,"","error")});c("head").append(g);0<a.timeout&&(e=setTimeout(function(){a.error.call(void 0,"","timeout")},a.timeout));return{}};f.$afm=c;f.numOnly||(f.numOnly=function(a){if(void 0===a||""===a)return 0;if(isNaN(parseFloat(a)))if(a.replace)a=a.replace(/[^0-9.-]/g,"");else return 0;return parseFloat(a)})})(jQuery,window);window.af=window.jq=jQuery;
   179.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   179.2 +++ b/Touchgui/www/lib/jquery/jquery-2.1.1.js	Thu Jun 04 14:50:33 2015 +0200
   179.3 @@ -0,0 +1,9190 @@
   179.4 +/*!
   179.5 + * jQuery JavaScript Library v2.1.1
   179.6 + * http://jquery.com/
   179.7 + *
   179.8 + * Includes Sizzle.js
   179.9 + * http://sizzlejs.com/
  179.10 + *
  179.11 + * Copyright 2005, 2014 jQuery Foundation, Inc. and other contributors
  179.12 + * Released under the MIT license
  179.13 + * http://jquery.org/license
  179.14 + *
  179.15 + * Date: 2014-05-01T17:11Z
  179.16 + */
  179.17 +
  179.18 +(function( global, factory ) {
  179.19 +
  179.20 +	if ( typeof module === "object" && typeof module.exports === "object" ) {
  179.21 +		// For CommonJS and CommonJS-like environments where a proper window is present,
  179.22 +		// execute the factory and get jQuery
  179.23 +		// For environments that do not inherently posses a window with a document
  179.24 +		// (such as Node.js), expose a jQuery-making factory as module.exports
  179.25 +		// This accentuates the need for the creation of a real window
  179.26 +		// e.g. var jQuery = require("jquery")(window);
  179.27 +		// See ticket #14549 for more info
  179.28 +		module.exports = global.document ?
  179.29 +			factory( global, true ) :
  179.30 +			function( w ) {
  179.31 +				if ( !w.document ) {
  179.32 +					throw new Error( "jQuery requires a window with a document" );
  179.33 +				}
  179.34 +				return factory( w );
  179.35 +			};
  179.36 +	} else {
  179.37 +		factory( global );
  179.38 +	}
  179.39 +
  179.40 +// Pass this if window is not defined yet
  179.41 +}(typeof window !== "undefined" ? window : this, function( window, noGlobal ) {
  179.42 +
  179.43 +// Can't do this because several apps including ASP.NET trace
  179.44 +// the stack via arguments.caller.callee and Firefox dies if
  179.45 +// you try to trace through "use strict" call chains. (#13335)
  179.46 +// Support: Firefox 18+
  179.47 +//
  179.48 +
  179.49 +var arr = [];
  179.50 +
  179.51 +var slice = arr.slice;
  179.52 +
  179.53 +var concat = arr.concat;
  179.54 +
  179.55 +var push = arr.push;
  179.56 +
  179.57 +var indexOf = arr.indexOf;
  179.58 +
  179.59 +var class2type = {};
  179.60 +
  179.61 +var toString = class2type.toString;
  179.62 +
  179.63 +var hasOwn = class2type.hasOwnProperty;
  179.64 +
  179.65 +var support = {};
  179.66 +
  179.67 +
  179.68 +
  179.69 +var
  179.70 +	// Use the correct document accordingly with window argument (sandbox)
  179.71 +	document = window.document,
  179.72 +
  179.73 +	version = "2.1.1",
  179.74 +
  179.75 +	// Define a local copy of jQuery
  179.76 +	jQuery = function( selector, context ) {
  179.77 +		// The jQuery object is actually just the init constructor 'enhanced'
  179.78 +		// Need init if jQuery is called (just allow error to be thrown if not included)
  179.79 +		return new jQuery.fn.init( selector, context );
  179.80 +	},
  179.81 +
  179.82 +	// Support: Android<4.1
  179.83 +	// Make sure we trim BOM and NBSP
  179.84 +	rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,
  179.85 +
  179.86 +	// Matches dashed string for camelizing
  179.87 +	rmsPrefix = /^-ms-/,
  179.88 +	rdashAlpha = /-([\da-z])/gi,
  179.89 +
  179.90 +	// Used by jQuery.camelCase as callback to replace()
  179.91 +	fcamelCase = function( all, letter ) {
  179.92 +		return letter.toUpperCase();
  179.93 +	};
  179.94 +
  179.95 +jQuery.fn = jQuery.prototype = {
  179.96 +	// The current version of jQuery being used
  179.97 +	jquery: version,
  179.98 +
  179.99 +	constructor: jQuery,
 179.100 +
 179.101 +	// Start with an empty selector
 179.102 +	selector: "",
 179.103 +
 179.104 +	// The default length of a jQuery object is 0
 179.105 +	length: 0,
 179.106 +
 179.107 +	toArray: function() {
 179.108 +		return slice.call( this );
 179.109 +	},
 179.110 +
 179.111 +	// Get the Nth element in the matched element set OR
 179.112 +	// Get the whole matched element set as a clean array
 179.113 +	get: function( num ) {
 179.114 +		return num != null ?
 179.115 +
 179.116 +			// Return just the one element from the set
 179.117 +			( num < 0 ? this[ num + this.length ] : this[ num ] ) :
 179.118 +
 179.119 +			// Return all the elements in a clean array
 179.120 +			slice.call( this );
 179.121 +	},
 179.122 +
 179.123 +	// Take an array of elements and push it onto the stack
 179.124 +	// (returning the new matched element set)
 179.125 +	pushStack: function( elems ) {
 179.126 +
 179.127 +		// Build a new jQuery matched element set
 179.128 +		var ret = jQuery.merge( this.constructor(), elems );
 179.129 +
 179.130 +		// Add the old object onto the stack (as a reference)
 179.131 +		ret.prevObject = this;
 179.132 +		ret.context = this.context;
 179.133 +
 179.134 +		// Return the newly-formed element set
 179.135 +		return ret;
 179.136 +	},
 179.137 +
 179.138 +	// Execute a callback for every element in the matched set.
 179.139 +	// (You can seed the arguments with an array of args, but this is
 179.140 +	// only used internally.)
 179.141 +	each: function( callback, args ) {
 179.142 +		return jQuery.each( this, callback, args );
 179.143 +	},
 179.144 +
 179.145 +	map: function( callback ) {
 179.146 +		return this.pushStack( jQuery.map(this, function( elem, i ) {
 179.147 +			return callback.call( elem, i, elem );
 179.148 +		}));
 179.149 +	},
 179.150 +
 179.151 +	slice: function() {
 179.152 +		return this.pushStack( slice.apply( this, arguments ) );
 179.153 +	},
 179.154 +
 179.155 +	first: function() {
 179.156 +		return this.eq( 0 );
 179.157 +	},
 179.158 +
 179.159 +	last: function() {
 179.160 +		return this.eq( -1 );
 179.161 +	},
 179.162 +
 179.163 +	eq: function( i ) {
 179.164 +		var len = this.length,
 179.165 +			j = +i + ( i < 0 ? len : 0 );
 179.166 +		return this.pushStack( j >= 0 && j < len ? [ this[j] ] : [] );
 179.167 +	},
 179.168 +
 179.169 +	end: function() {
 179.170 +		return this.prevObject || this.constructor(null);
 179.171 +	},
 179.172 +
 179.173 +	// For internal use only.
 179.174 +	// Behaves like an Array's method, not like a jQuery method.
 179.175 +	push: push,
 179.176 +	sort: arr.sort,
 179.177 +	splice: arr.splice
 179.178 +};
 179.179 +
 179.180 +jQuery.extend = jQuery.fn.extend = function() {
 179.181 +	var options, name, src, copy, copyIsArray, clone,
 179.182 +		target = arguments[0] || {},
 179.183 +		i = 1,
 179.184 +		length = arguments.length,
 179.185 +		deep = false;
 179.186 +
 179.187 +	// Handle a deep copy situation
 179.188 +	if ( typeof target === "boolean" ) {
 179.189 +		deep = target;
 179.190 +
 179.191 +		// skip the boolean and the target
 179.192 +		target = arguments[ i ] || {};
 179.193 +		i++;
 179.194 +	}
 179.195 +
 179.196 +	// Handle case when target is a string or something (possible in deep copy)
 179.197 +	if ( typeof target !== "object" && !jQuery.isFunction(target) ) {
 179.198 +		target = {};
 179.199 +	}
 179.200 +
 179.201 +	// extend jQuery itself if only one argument is passed
 179.202 +	if ( i === length ) {
 179.203 +		target = this;
 179.204 +		i--;
 179.205 +	}
 179.206 +
 179.207 +	for ( ; i < length; i++ ) {
 179.208 +		// Only deal with non-null/undefined values
 179.209 +		if ( (options = arguments[ i ]) != null ) {
 179.210 +			// Extend the base object
 179.211 +			for ( name in options ) {
 179.212 +				src = target[ name ];
 179.213 +				copy = options[ name ];
 179.214 +
 179.215 +				// Prevent never-ending loop
 179.216 +				if ( target === copy ) {
 179.217 +					continue;
 179.218 +				}
 179.219 +
 179.220 +				// Recurse if we're merging plain objects or arrays
 179.221 +				if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) {
 179.222 +					if ( copyIsArray ) {
 179.223 +						copyIsArray = false;
 179.224 +						clone = src && jQuery.isArray(src) ? src : [];
 179.225 +
 179.226 +					} else {
 179.227 +						clone = src && jQuery.isPlainObject(src) ? src : {};
 179.228 +					}
 179.229 +
 179.230 +					// Never move original objects, clone them
 179.231 +					target[ name ] = jQuery.extend( deep, clone, copy );
 179.232 +
 179.233 +				// Don't bring in undefined values
 179.234 +				} else if ( copy !== undefined ) {
 179.235 +					target[ name ] = copy;
 179.236 +				}
 179.237 +			}
 179.238 +		}
 179.239 +	}
 179.240 +
 179.241 +	// Return the modified object
 179.242 +	return target;
 179.243 +};
 179.244 +
 179.245 +jQuery.extend({
 179.246 +	// Unique for each copy of jQuery on the page
 179.247 +	expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ),
 179.248 +
 179.249 +	// Assume jQuery is ready without the ready module
 179.250 +	isReady: true,
 179.251 +
 179.252 +	error: function( msg ) {
 179.253 +		throw new Error( msg );
 179.254 +	},
 179.255 +
 179.256 +	noop: function() {},
 179.257 +
 179.258 +	// See test/unit/core.js for details concerning isFunction.
 179.259 +	// Since version 1.3, DOM methods and functions like alert
 179.260 +	// aren't supported. They return false on IE (#2968).
 179.261 +	isFunction: function( obj ) {
 179.262 +		return jQuery.type(obj) === "function";
 179.263 +	},
 179.264 +
 179.265 +	isArray: Array.isArray,
 179.266 +
 179.267 +	isWindow: function( obj ) {
 179.268 +		return obj != null && obj === obj.window;
 179.269 +	},
 179.270 +
 179.271 +	isNumeric: function( obj ) {
 179.272 +		// parseFloat NaNs numeric-cast false positives (null|true|false|"")
 179.273 +		// ...but misinterprets leading-number strings, particularly hex literals ("0x...")
 179.274 +		// subtraction forces infinities to NaN
 179.275 +		return !jQuery.isArray( obj ) && obj - parseFloat( obj ) >= 0;
 179.276 +	},
 179.277 +
 179.278 +	isPlainObject: function( obj ) {
 179.279 +		// Not plain objects:
 179.280 +		// - Any object or value whose internal [[Class]] property is not "[object Object]"
 179.281 +		// - DOM nodes
 179.282 +		// - window
 179.283 +		if ( jQuery.type( obj ) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) {
 179.284 +			return false;
 179.285 +		}
 179.286 +
 179.287 +		if ( obj.constructor &&
 179.288 +				!hasOwn.call( obj.constructor.prototype, "isPrototypeOf" ) ) {
 179.289 +			return false;
 179.290 +		}
 179.291 +
 179.292 +		// If the function hasn't returned already, we're confident that
 179.293 +		// |obj| is a plain object, created by {} or constructed with new Object
 179.294 +		return true;
 179.295 +	},
 179.296 +
 179.297 +	isEmptyObject: function( obj ) {
 179.298 +		var name;
 179.299 +		for ( name in obj ) {
 179.300 +			return false;
 179.301 +		}
 179.302 +		return true;
 179.303 +	},
 179.304 +
 179.305 +	type: function( obj ) {
 179.306 +		if ( obj == null ) {
 179.307 +			return obj + "";
 179.308 +		}
 179.309 +		// Support: Android < 4.0, iOS < 6 (functionish RegExp)
 179.310 +		return typeof obj === "object" || typeof obj === "function" ?
 179.311 +			class2type[ toString.call(obj) ] || "object" :
 179.312 +			typeof obj;
 179.313 +	},
 179.314 +
 179.315 +	// Evaluates a script in a global context
 179.316 +	globalEval: function( code ) {
 179.317 +		var script,
 179.318 +			indirect = eval;
 179.319 +
 179.320 +		code = jQuery.trim( code );
 179.321 +
 179.322 +		if ( code ) {
 179.323 +			// If the code includes a valid, prologue position
 179.324 +			// strict mode pragma, execute code by injecting a
 179.325 +			// script tag into the document.
 179.326 +			if ( code.indexOf("use strict") === 1 ) {
 179.327 +				script = document.createElement("script");
 179.328 +				script.text = code;
 179.329 +				document.head.appendChild( script ).parentNode.removeChild( script );
 179.330 +			} else {
 179.331 +			// Otherwise, avoid the DOM node creation, insertion
 179.332 +			// and removal by using an indirect global eval
 179.333 +				indirect( code );
 179.334 +			}
 179.335 +		}
 179.336 +	},
 179.337 +
 179.338 +	// Convert dashed to camelCase; used by the css and data modules
 179.339 +	// Microsoft forgot to hump their vendor prefix (#9572)
 179.340 +	camelCase: function( string ) {
 179.341 +		return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase );
 179.342 +	},
 179.343 +
 179.344 +	nodeName: function( elem, name ) {
 179.345 +		return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();
 179.346 +	},
 179.347 +
 179.348 +	// args is for internal usage only
 179.349 +	each: function( obj, callback, args ) {
 179.350 +		var value,
 179.351 +			i = 0,
 179.352 +			length = obj.length,
 179.353 +			isArray = isArraylike( obj );
 179.354 +
 179.355 +		if ( args ) {
 179.356 +			if ( isArray ) {
 179.357 +				for ( ; i < length; i++ ) {
 179.358 +					value = callback.apply( obj[ i ], args );
 179.359 +
 179.360 +					if ( value === false ) {
 179.361 +						break;
 179.362 +					}
 179.363 +				}
 179.364 +			} else {
 179.365 +				for ( i in obj ) {
 179.366 +					value = callback.apply( obj[ i ], args );
 179.367 +
 179.368 +					if ( value === false ) {
 179.369 +						break;
 179.370 +					}
 179.371 +				}
 179.372 +			}
 179.373 +
 179.374 +		// A special, fast, case for the most common use of each
 179.375 +		} else {
 179.376 +			if ( isArray ) {
 179.377 +				for ( ; i < length; i++ ) {
 179.378 +					value = callback.call( obj[ i ], i, obj[ i ] );
 179.379 +
 179.380 +					if ( value === false ) {
 179.381 +						break;
 179.382 +					}
 179.383 +				}
 179.384 +			} else {
 179.385 +				for ( i in obj ) {
 179.386 +					value = callback.call( obj[ i ], i, obj[ i ] );
 179.387 +
 179.388 +					if ( value === false ) {
 179.389 +						break;
 179.390 +					}
 179.391 +				}
 179.392 +			}
 179.393 +		}
 179.394 +
 179.395 +		return obj;
 179.396 +	},
 179.397 +
 179.398 +	// Support: Android<4.1
 179.399 +	trim: function( text ) {
 179.400 +		return text == null ?
 179.401 +			"" :
 179.402 +			( text + "" ).replace( rtrim, "" );
 179.403 +	},
 179.404 +
 179.405 +	// results is for internal usage only
 179.406 +	makeArray: function( arr, results ) {
 179.407 +		var ret = results || [];
 179.408 +
 179.409 +		if ( arr != null ) {
 179.410 +			if ( isArraylike( Object(arr) ) ) {
 179.411 +				jQuery.merge( ret,
 179.412 +					typeof arr === "string" ?
 179.413 +					[ arr ] : arr
 179.414 +				);
 179.415 +			} else {
 179.416 +				push.call( ret, arr );
 179.417 +			}
 179.418 +		}
 179.419 +
 179.420 +		return ret;
 179.421 +	},
 179.422 +
 179.423 +	inArray: function( elem, arr, i ) {
 179.424 +		return arr == null ? -1 : indexOf.call( arr, elem, i );
 179.425 +	},
 179.426 +
 179.427 +	merge: function( first, second ) {
 179.428 +		var len = +second.length,
 179.429 +			j = 0,
 179.430 +			i = first.length;
 179.431 +
 179.432 +		for ( ; j < len; j++ ) {
 179.433 +			first[ i++ ] = second[ j ];
 179.434 +		}
 179.435 +
 179.436 +		first.length = i;
 179.437 +
 179.438 +		return first;
 179.439 +	},
 179.440 +
 179.441 +	grep: function( elems, callback, invert ) {
 179.442 +		var callbackInverse,
 179.443 +			matches = [],
 179.444 +			i = 0,
 179.445 +			length = elems.length,
 179.446 +			callbackExpect = !invert;
 179.447 +
 179.448 +		// Go through the array, only saving the items
 179.449 +		// that pass the validator function
 179.450 +		for ( ; i < length; i++ ) {
 179.451 +			callbackInverse = !callback( elems[ i ], i );
 179.452 +			if ( callbackInverse !== callbackExpect ) {
 179.453 +				matches.push( elems[ i ] );
 179.454 +			}
 179.455 +		}
 179.456 +
 179.457 +		return matches;
 179.458 +	},
 179.459 +
 179.460 +	// arg is for internal usage only
 179.461 +	map: function( elems, callback, arg ) {
 179.462 +		var value,
 179.463 +			i = 0,
 179.464 +			length = elems.length,
 179.465 +			isArray = isArraylike( elems ),
 179.466 +			ret = [];
 179.467 +
 179.468 +		// Go through the array, translating each of the items to their new values
 179.469 +		if ( isArray ) {
 179.470 +			for ( ; i < length; i++ ) {
 179.471 +				value = callback( elems[ i ], i, arg );
 179.472 +
 179.473 +				if ( value != null ) {
 179.474 +					ret.push( value );
 179.475 +				}
 179.476 +			}
 179.477 +
 179.478 +		// Go through every key on the object,
 179.479 +		} else {
 179.480 +			for ( i in elems ) {
 179.481 +				value = callback( elems[ i ], i, arg );
 179.482 +
 179.483 +				if ( value != null ) {
 179.484 +					ret.push( value );
 179.485 +				}
 179.486 +			}
 179.487 +		}
 179.488 +
 179.489 +		// Flatten any nested arrays
 179.490 +		return concat.apply( [], ret );
 179.491 +	},
 179.492 +
 179.493 +	// A global GUID counter for objects
 179.494 +	guid: 1,
 179.495 +
 179.496 +	// Bind a function to a context, optionally partially applying any
 179.497 +	// arguments.
 179.498 +	proxy: function( fn, context ) {
 179.499 +		var tmp, args, proxy;
 179.500 +
 179.501 +		if ( typeof context === "string" ) {
 179.502 +			tmp = fn[ context ];
 179.503 +			context = fn;
 179.504 +			fn = tmp;
 179.505 +		}
 179.506 +
 179.507 +		// Quick check to determine if target is callable, in the spec
 179.508 +		// this throws a TypeError, but we will just return undefined.
 179.509 +		if ( !jQuery.isFunction( fn ) ) {
 179.510 +			return undefined;
 179.511 +		}
 179.512 +
 179.513 +		// Simulated bind
 179.514 +		args = slice.call( arguments, 2 );
 179.515 +		proxy = function() {
 179.516 +			return fn.apply( context || this, args.concat( slice.call( arguments ) ) );
 179.517 +		};
 179.518 +
 179.519 +		// Set the guid of unique handler to the same of original handler, so it can be removed
 179.520 +		proxy.guid = fn.guid = fn.guid || jQuery.guid++;
 179.521 +
 179.522 +		return proxy;
 179.523 +	},
 179.524 +
 179.525 +	now: Date.now,
 179.526 +
 179.527 +	// jQuery.support is not used in Core but other projects attach their
 179.528 +	// properties to it so it needs to exist.
 179.529 +	support: support
 179.530 +});
 179.531 +
 179.532 +// Populate the class2type map
 179.533 +jQuery.each("Boolean Number String Function Array Date RegExp Object Error".split(" "), function(i, name) {
 179.534 +	class2type[ "[object " + name + "]" ] = name.toLowerCase();
 179.535 +});
 179.536 +
 179.537 +function isArraylike( obj ) {
 179.538 +	var length = obj.length,
 179.539 +		type = jQuery.type( obj );
 179.540 +
 179.541 +	if ( type === "function" || jQuery.isWindow( obj ) ) {
 179.542 +		return false;
 179.543 +	}
 179.544 +
 179.545 +	if ( obj.nodeType === 1 && length ) {
 179.546 +		return true;
 179.547 +	}
 179.548 +
 179.549 +	return type === "array" || length === 0 ||
 179.550 +		typeof length === "number" && length > 0 && ( length - 1 ) in obj;
 179.551 +}
 179.552 +var Sizzle =
 179.553 +/*!
 179.554 + * Sizzle CSS Selector Engine v1.10.19
 179.555 + * http://sizzlejs.com/
 179.556 + *
 179.557 + * Copyright 2013 jQuery Foundation, Inc. and other contributors
 179.558 + * Released under the MIT license
 179.559 + * http://jquery.org/license
 179.560 + *
 179.561 + * Date: 2014-04-18
 179.562 + */
 179.563 +(function( window ) {
 179.564 +
 179.565 +var i,
 179.566 +	support,
 179.567 +	Expr,
 179.568 +	getText,
 179.569 +	isXML,
 179.570 +	tokenize,
 179.571 +	compile,
 179.572 +	select,
 179.573 +	outermostContext,
 179.574 +	sortInput,
 179.575 +	hasDuplicate,
 179.576 +
 179.577 +	// Local document vars
 179.578 +	setDocument,
 179.579 +	document,
 179.580 +	docElem,
 179.581 +	documentIsHTML,
 179.582 +	rbuggyQSA,
 179.583 +	rbuggyMatches,
 179.584 +	matches,
 179.585 +	contains,
 179.586 +
 179.587 +	// Instance-specific data
 179.588 +	expando = "sizzle" + -(new Date()),
 179.589 +	preferredDoc = window.document,
 179.590 +	dirruns = 0,
 179.591 +	done = 0,
 179.592 +	classCache = createCache(),
 179.593 +	tokenCache = createCache(),
 179.594 +	compilerCache = createCache(),
 179.595 +	sortOrder = function( a, b ) {
 179.596 +		if ( a === b ) {
 179.597 +			hasDuplicate = true;
 179.598 +		}
 179.599 +		return 0;
 179.600 +	},
 179.601 +
 179.602 +	// General-purpose constants
 179.603 +	strundefined = typeof undefined,
 179.604 +	MAX_NEGATIVE = 1 << 31,
 179.605 +
 179.606 +	// Instance methods
 179.607 +	hasOwn = ({}).hasOwnProperty,
 179.608 +	arr = [],
 179.609 +	pop = arr.pop,
 179.610 +	push_native = arr.push,
 179.611 +	push = arr.push,
 179.612 +	slice = arr.slice,
 179.613 +	// Use a stripped-down indexOf if we can't use a native one
 179.614 +	indexOf = arr.indexOf || function( elem ) {
 179.615 +		var i = 0,
 179.616 +			len = this.length;
 179.617 +		for ( ; i < len; i++ ) {
 179.618 +			if ( this[i] === elem ) {
 179.619 +				return i;
 179.620 +			}
 179.621 +		}
 179.622 +		return -1;
 179.623 +	},
 179.624 +
 179.625 +	booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",
 179.626 +
 179.627 +	// Regular expressions
 179.628 +
 179.629 +	// Whitespace characters http://www.w3.org/TR/css3-selectors/#whitespace
 179.630 +	whitespace = "[\\x20\\t\\r\\n\\f]",
 179.631 +	// http://www.w3.org/TR/css3-syntax/#characters
 179.632 +	characterEncoding = "(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",
 179.633 +
 179.634 +	// Loosely modeled on CSS identifier characters
 179.635 +	// An unquoted value should be a CSS identifier http://www.w3.org/TR/css3-selectors/#attribute-selectors
 179.636 +	// Proper syntax: http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier
 179.637 +	identifier = characterEncoding.replace( "w", "w#" ),
 179.638 +
 179.639 +	// Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors
 179.640 +	attributes = "\\[" + whitespace + "*(" + characterEncoding + ")(?:" + whitespace +
 179.641 +		// Operator (capture 2)
 179.642 +		"*([*^$|!~]?=)" + whitespace +
 179.643 +		// "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]"
 179.644 +		"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + whitespace +
 179.645 +		"*\\]",
 179.646 +
 179.647 +	pseudos = ":(" + characterEncoding + ")(?:\\((" +
 179.648 +		// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:
 179.649 +		// 1. quoted (capture 3; capture 4 or capture 5)
 179.650 +		"('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" +
 179.651 +		// 2. simple (capture 6)
 179.652 +		"((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" +
 179.653 +		// 3. anything else (capture 2)
 179.654 +		".*" +
 179.655 +		")\\)|)",
 179.656 +
 179.657 +	// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter
 179.658 +	rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ),
 179.659 +
 179.660 +	rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ),
 179.661 +	rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*" ),
 179.662 +
 179.663 +	rattributeQuotes = new RegExp( "=" + whitespace + "*([^\\]'\"]*?)" + whitespace + "*\\]", "g" ),
 179.664 +
 179.665 +	rpseudo = new RegExp( pseudos ),
 179.666 +	ridentifier = new RegExp( "^" + identifier + "$" ),
 179.667 +
 179.668 +	matchExpr = {
 179.669 +		"ID": new RegExp( "^#(" + characterEncoding + ")" ),
 179.670 +		"CLASS": new RegExp( "^\\.(" + characterEncoding + ")" ),
 179.671 +		"TAG": new RegExp( "^(" + characterEncoding.replace( "w", "w*" ) + ")" ),
 179.672 +		"ATTR": new RegExp( "^" + attributes ),
 179.673 +		"PSEUDO": new RegExp( "^" + pseudos ),
 179.674 +		"CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace +
 179.675 +			"*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace +
 179.676 +			"*(\\d+)|))" + whitespace + "*\\)|)", "i" ),
 179.677 +		"bool": new RegExp( "^(?:" + booleans + ")$", "i" ),
 179.678 +		// For use in libraries implementing .is()
 179.679 +		// We use this for POS matching in `select`
 179.680 +		"needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" +
 179.681 +			whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" )
 179.682 +	},
 179.683 +
 179.684 +	rinputs = /^(?:input|select|textarea|button)$/i,
 179.685 +	rheader = /^h\d$/i,
 179.686 +
 179.687 +	rnative = /^[^{]+\{\s*\[native \w/,
 179.688 +
 179.689 +	// Easily-parseable/retrievable ID or TAG or CLASS selectors
 179.690 +	rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,
 179.691 +
 179.692 +	rsibling = /[+~]/,
 179.693 +	rescape = /'|\\/g,
 179.694 +
 179.695 +	// CSS escapes http://www.w3.org/TR/CSS21/syndata.html#escaped-characters
 179.696 +	runescape = new RegExp( "\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)", "ig" ),
 179.697 +	funescape = function( _, escaped, escapedWhitespace ) {
 179.698 +		var high = "0x" + escaped - 0x10000;
 179.699 +		// NaN means non-codepoint
 179.700 +		// Support: Firefox<24
 179.701 +		// Workaround erroneous numeric interpretation of +"0x"
 179.702 +		return high !== high || escapedWhitespace ?
 179.703 +			escaped :
 179.704 +			high < 0 ?
 179.705 +				// BMP codepoint
 179.706 +				String.fromCharCode( high + 0x10000 ) :
 179.707 +				// Supplemental Plane codepoint (surrogate pair)
 179.708 +				String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );
 179.709 +	};
 179.710 +
 179.711 +// Optimize for push.apply( _, NodeList )
 179.712 +try {
 179.713 +	push.apply(
 179.714 +		(arr = slice.call( preferredDoc.childNodes )),
 179.715 +		preferredDoc.childNodes
 179.716 +	);
 179.717 +	// Support: Android<4.0
 179.718 +	// Detect silently failing push.apply
 179.719 +	arr[ preferredDoc.childNodes.length ].nodeType;
 179.720 +} catch ( e ) {
 179.721 +	push = { apply: arr.length ?
 179.722 +
 179.723 +		// Leverage slice if possible
 179.724 +		function( target, els ) {
 179.725 +			push_native.apply( target, slice.call(els) );
 179.726 +		} :
 179.727 +
 179.728 +		// Support: IE<9
 179.729 +		// Otherwise append directly
 179.730 +		function( target, els ) {
 179.731 +			var j = target.length,
 179.732 +				i = 0;
 179.733 +			// Can't trust NodeList.length
 179.734 +			while ( (target[j++] = els[i++]) ) {}
 179.735 +			target.length = j - 1;
 179.736 +		}
 179.737 +	};
 179.738 +}
 179.739 +
 179.740 +function Sizzle( selector, context, results, seed ) {
 179.741 +	var match, elem, m, nodeType,
 179.742 +		// QSA vars
 179.743 +		i, groups, old, nid, newContext, newSelector;
 179.744 +
 179.745 +	if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) {
 179.746 +		setDocument( context );
 179.747 +	}
 179.748 +
 179.749 +	context = context || document;
 179.750 +	results = results || [];
 179.751 +
 179.752 +	if ( !selector || typeof selector !== "string" ) {
 179.753 +		return results;
 179.754 +	}
 179.755 +
 179.756 +	if ( (nodeType = context.nodeType) !== 1 && nodeType !== 9 ) {
 179.757 +		return [];
 179.758 +	}
 179.759 +
 179.760 +	if ( documentIsHTML && !seed ) {
 179.761 +
 179.762 +		// Shortcuts
 179.763 +		if ( (match = rquickExpr.exec( selector )) ) {
 179.764 +			// Speed-up: Sizzle("#ID")
 179.765 +			if ( (m = match[1]) ) {
 179.766 +				if ( nodeType === 9 ) {
 179.767 +					elem = context.getElementById( m );
 179.768 +					// Check parentNode to catch when Blackberry 4.6 returns
 179.769 +					// nodes that are no longer in the document (jQuery #6963)
 179.770 +					if ( elem && elem.parentNode ) {
 179.771 +						// Handle the case where IE, Opera, and Webkit return items
 179.772 +						// by name instead of ID
 179.773 +						if ( elem.id === m ) {
 179.774 +							results.push( elem );
 179.775 +							return results;
 179.776 +						}
 179.777 +					} else {
 179.778 +						return results;
 179.779 +					}
 179.780 +				} else {
 179.781 +					// Context is not a document
 179.782 +					if ( context.ownerDocument && (elem = context.ownerDocument.getElementById( m )) &&
 179.783 +						contains( context, elem ) && elem.id === m ) {
 179.784 +						results.push( elem );
 179.785 +						return results;
 179.786 +					}
 179.787 +				}
 179.788 +
 179.789 +			// Speed-up: Sizzle("TAG")
 179.790 +			} else if ( match[2] ) {
 179.791 +				push.apply( results, context.getElementsByTagName( selector ) );
 179.792 +				return results;
 179.793 +
 179.794 +			// Speed-up: Sizzle(".CLASS")
 179.795 +			} else if ( (m = match[3]) && support.getElementsByClassName && context.getElementsByClassName ) {
 179.796 +				push.apply( results, context.getElementsByClassName( m ) );
 179.797 +				return results;
 179.798 +			}
 179.799 +		}
 179.800 +
 179.801 +		// QSA path
 179.802 +		if ( support.qsa && (!rbuggyQSA || !rbuggyQSA.test( selector )) ) {
 179.803 +			nid = old = expando;
 179.804 +			newContext = context;
 179.805 +			newSelector = nodeType === 9 && selector;
 179.806 +
 179.807 +			// qSA works strangely on Element-rooted queries
 179.808 +			// We can work around this by specifying an extra ID on the root
 179.809 +			// and working up from there (Thanks to Andrew Dupont for the technique)
 179.810 +			// IE 8 doesn't work on object elements
 179.811 +			if ( nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) {
 179.812 +				groups = tokenize( selector );
 179.813 +
 179.814 +				if ( (old = context.getAttribute("id")) ) {
 179.815 +					nid = old.replace( rescape, "\\$&" );
 179.816 +				} else {
 179.817 +					context.setAttribute( "id", nid );
 179.818 +				}
 179.819 +				nid = "[id='" + nid + "'] ";
 179.820 +
 179.821 +				i = groups.length;
 179.822 +				while ( i-- ) {
 179.823 +					groups[i] = nid + toSelector( groups[i] );
 179.824 +				}
 179.825 +				newContext = rsibling.test( selector ) && testContext( context.parentNode ) || context;
 179.826 +				newSelector = groups.join(",");
 179.827 +			}
 179.828 +
 179.829 +			if ( newSelector ) {
 179.830 +				try {
 179.831 +					push.apply( results,
 179.832 +						newContext.querySelectorAll( newSelector )
 179.833 +					);
 179.834 +					return results;
 179.835 +				} catch(qsaError) {
 179.836 +				} finally {
 179.837 +					if ( !old ) {
 179.838 +						context.removeAttribute("id");
 179.839 +					}
 179.840 +				}
 179.841 +			}
 179.842 +		}
 179.843 +	}
 179.844 +
 179.845 +	// All others
 179.846 +	return select( selector.replace( rtrim, "$1" ), context, results, seed );
 179.847 +}
 179.848 +
 179.849 +/**
 179.850 + * Create key-value caches of limited size
 179.851 + * @returns {Function(string, Object)} Returns the Object data after storing it on itself with
 179.852 + *	property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)
 179.853 + *	deleting the oldest entry
 179.854 + */
 179.855 +function createCache() {
 179.856 +	var keys = [];
 179.857 +
 179.858 +	function cache( key, value ) {
 179.859 +		// Use (key + " ") to avoid collision with native prototype properties (see Issue #157)
 179.860 +		if ( keys.push( key + " " ) > Expr.cacheLength ) {
 179.861 +			// Only keep the most recent entries
 179.862 +			delete cache[ keys.shift() ];
 179.863 +		}
 179.864 +		return (cache[ key + " " ] = value);
 179.865 +	}
 179.866 +	return cache;
 179.867 +}
 179.868 +
 179.869 +/**
 179.870 + * Mark a function for special use by Sizzle
 179.871 + * @param {Function} fn The function to mark
 179.872 + */
 179.873 +function markFunction( fn ) {
 179.874 +	fn[ expando ] = true;
 179.875 +	return fn;
 179.876 +}
 179.877 +
 179.878 +/**
 179.879 + * Support testing using an element
 179.880 + * @param {Function} fn Passed the created div and expects a boolean result
 179.881 + */
 179.882 +function assert( fn ) {
 179.883 +	var div = document.createElement("div");
 179.884 +
 179.885 +	try {
 179.886 +		return !!fn( div );
 179.887 +	} catch (e) {
 179.888 +		return false;
 179.889 +	} finally {
 179.890 +		// Remove from its parent by default
 179.891 +		if ( div.parentNode ) {
 179.892 +			div.parentNode.removeChild( div );
 179.893 +		}
 179.894 +		// release memory in IE
 179.895 +		div = null;
 179.896 +	}
 179.897 +}
 179.898 +
 179.899 +/**
 179.900 + * Adds the same handler for all of the specified attrs
 179.901 + * @param {String} attrs Pipe-separated list of attributes
 179.902 + * @param {Function} handler The method that will be applied
 179.903 + */
 179.904 +function addHandle( attrs, handler ) {
 179.905 +	var arr = attrs.split("|"),
 179.906 +		i = attrs.length;
 179.907 +
 179.908 +	while ( i-- ) {
 179.909 +		Expr.attrHandle[ arr[i] ] = handler;
 179.910 +	}
 179.911 +}
 179.912 +
 179.913 +/**
 179.914 + * Checks document order of two siblings
 179.915 + * @param {Element} a
 179.916 + * @param {Element} b
 179.917 + * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b
 179.918 + */
 179.919 +function siblingCheck( a, b ) {
 179.920 +	var cur = b && a,
 179.921 +		diff = cur && a.nodeType === 1 && b.nodeType === 1 &&
 179.922 +			( ~b.sourceIndex || MAX_NEGATIVE ) -
 179.923 +			( ~a.sourceIndex || MAX_NEGATIVE );
 179.924 +
 179.925 +	// Use IE sourceIndex if available on both nodes
 179.926 +	if ( diff ) {
 179.927 +		return diff;
 179.928 +	}
 179.929 +
 179.930 +	// Check if b follows a
 179.931 +	if ( cur ) {
 179.932 +		while ( (cur = cur.nextSibling) ) {
 179.933 +			if ( cur === b ) {
 179.934 +				return -1;
 179.935 +			}
 179.936 +		}
 179.937 +	}
 179.938 +
 179.939 +	return a ? 1 : -1;
 179.940 +}
 179.941 +
 179.942 +/**
 179.943 + * Returns a function to use in pseudos for input types
 179.944 + * @param {String} type
 179.945 + */
 179.946 +function createInputPseudo( type ) {
 179.947 +	return function( elem ) {
 179.948 +		var name = elem.nodeName.toLowerCase();
 179.949 +		return name === "input" && elem.type === type;
 179.950 +	};
 179.951 +}
 179.952 +
 179.953 +/**
 179.954 + * Returns a function to use in pseudos for buttons
 179.955 + * @param {String} type
 179.956 + */
 179.957 +function createButtonPseudo( type ) {
 179.958 +	return function( elem ) {
 179.959 +		var name = elem.nodeName.toLowerCase();
 179.960 +		return (name === "input" || name === "button") && elem.type === type;
 179.961 +	};
 179.962 +}
 179.963 +
 179.964 +/**
 179.965 + * Returns a function to use in pseudos for positionals
 179.966 + * @param {Function} fn
 179.967 + */
 179.968 +function createPositionalPseudo( fn ) {
 179.969 +	return markFunction(function( argument ) {
 179.970 +		argument = +argument;
 179.971 +		return markFunction(function( seed, matches ) {
 179.972 +			var j,
 179.973 +				matchIndexes = fn( [], seed.length, argument ),
 179.974 +				i = matchIndexes.length;
 179.975 +
 179.976 +			// Match elements found at the specified indexes
 179.977 +			while ( i-- ) {
 179.978 +				if ( seed[ (j = matchIndexes[i]) ] ) {
 179.979 +					seed[j] = !(matches[j] = seed[j]);
 179.980 +				}
 179.981 +			}
 179.982 +		});
 179.983 +	});
 179.984 +}
 179.985 +
 179.986 +/**
 179.987 + * Checks a node for validity as a Sizzle context
 179.988 + * @param {Element|Object=} context
 179.989 + * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value
 179.990 + */
 179.991 +function testContext( context ) {
 179.992 +	return context && typeof context.getElementsByTagName !== strundefined && context;
 179.993 +}
 179.994 +
 179.995 +// Expose support vars for convenience
 179.996 +support = Sizzle.support = {};
 179.997 +
 179.998 +/**
 179.999 + * Detects XML nodes
179.1000 + * @param {Element|Object} elem An element or a document
179.1001 + * @returns {Boolean} True iff elem is a non-HTML XML node
179.1002 + */
179.1003 +isXML = Sizzle.isXML = function( elem ) {
179.1004 +	// documentElement is verified for cases where it doesn't yet exist
179.1005 +	// (such as loading iframes in IE - #4833)
179.1006 +	var documentElement = elem && (elem.ownerDocument || elem).documentElement;
179.1007 +	return documentElement ? documentElement.nodeName !== "HTML" : false;
179.1008 +};
179.1009 +
179.1010 +/**
179.1011 + * Sets document-related variables once based on the current document
179.1012 + * @param {Element|Object} [doc] An element or document object to use to set the document
179.1013 + * @returns {Object} Returns the current document
179.1014 + */
179.1015 +setDocument = Sizzle.setDocument = function( node ) {
179.1016 +	var hasCompare,
179.1017 +		doc = node ? node.ownerDocument || node : preferredDoc,
179.1018 +		parent = doc.defaultView;
179.1019 +
179.1020 +	// If no document and documentElement is available, return
179.1021 +	if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) {
179.1022 +		return document;
179.1023 +	}
179.1024 +
179.1025 +	// Set our document
179.1026 +	document = doc;
179.1027 +	docElem = doc.documentElement;
179.1028 +
179.1029 +	// Support tests
179.1030 +	documentIsHTML = !isXML( doc );
179.1031 +
179.1032 +	// Support: IE>8
179.1033 +	// If iframe document is assigned to "document" variable and if iframe has been reloaded,
179.1034 +	// IE will throw "permission denied" error when accessing "document" variable, see jQuery #13936
179.1035 +	// IE6-8 do not support the defaultView property so parent will be undefined
179.1036 +	if ( parent && parent !== parent.top ) {
179.1037 +		// IE11 does not have attachEvent, so all must suffer
179.1038 +		if ( parent.addEventListener ) {
179.1039 +			parent.addEventListener( "unload", function() {
179.1040 +				setDocument();
179.1041 +			}, false );
179.1042 +		} else if ( parent.attachEvent ) {
179.1043 +			parent.attachEvent( "onunload", function() {
179.1044 +				setDocument();
179.1045 +			});
179.1046 +		}
179.1047 +	}
179.1048 +
179.1049 +	/* Attributes
179.1050 +	---------------------------------------------------------------------- */
179.1051 +
179.1052 +	// Support: IE<8
179.1053 +	// Verify that getAttribute really returns attributes and not properties (excepting IE8 booleans)
179.1054 +	support.attributes = assert(function( div ) {
179.1055 +		div.className = "i";
179.1056 +		return !div.getAttribute("className");
179.1057 +	});
179.1058 +
179.1059 +	/* getElement(s)By*
179.1060 +	---------------------------------------------------------------------- */
179.1061 +
179.1062 +	// Check if getElementsByTagName("*") returns only elements
179.1063 +	support.getElementsByTagName = assert(function( div ) {
179.1064 +		div.appendChild( doc.createComment("") );
179.1065 +		return !div.getElementsByTagName("*").length;
179.1066 +	});
179.1067 +
179.1068 +	// Check if getElementsByClassName can be trusted
179.1069 +	support.getElementsByClassName = rnative.test( doc.getElementsByClassName ) && assert(function( div ) {
179.1070 +		div.innerHTML = "<div class='a'></div><div class='a i'></div>";
179.1071 +
179.1072 +		// Support: Safari<4
179.1073 +		// Catch class over-caching
179.1074 +		div.firstChild.className = "i";
179.1075 +		// Support: Opera<10
179.1076 +		// Catch gEBCN failure to find non-leading classes
179.1077 +		return div.getElementsByClassName("i").length === 2;
179.1078 +	});
179.1079 +
179.1080 +	// Support: IE<10
179.1081 +	// Check if getElementById returns elements by name
179.1082 +	// The broken getElementById methods don't pick up programatically-set names,
179.1083 +	// so use a roundabout getElementsByName test
179.1084 +	support.getById = assert(function( div ) {
179.1085 +		docElem.appendChild( div ).id = expando;
179.1086 +		return !doc.getElementsByName || !doc.getElementsByName( expando ).length;
179.1087 +	});
179.1088 +
179.1089 +	// ID find and filter
179.1090 +	if ( support.getById ) {
179.1091 +		Expr.find["ID"] = function( id, context ) {
179.1092 +			if ( typeof context.getElementById !== strundefined && documentIsHTML ) {
179.1093 +				var m = context.getElementById( id );
179.1094 +				// Check parentNode to catch when Blackberry 4.6 returns
179.1095 +				// nodes that are no longer in the document #6963
179.1096 +				return m && m.parentNode ? [ m ] : [];
179.1097 +			}
179.1098 +		};
179.1099 +		Expr.filter["ID"] = function( id ) {
179.1100 +			var attrId = id.replace( runescape, funescape );
179.1101 +			return function( elem ) {
179.1102 +				return elem.getAttribute("id") === attrId;
179.1103 +			};
179.1104 +		};
179.1105 +	} else {
179.1106 +		// Support: IE6/7
179.1107 +		// getElementById is not reliable as a find shortcut
179.1108 +		delete Expr.find["ID"];
179.1109 +
179.1110 +		Expr.filter["ID"] =  function( id ) {
179.1111 +			var attrId = id.replace( runescape, funescape );
179.1112 +			return function( elem ) {
179.1113 +				var node = typeof elem.getAttributeNode !== strundefined && elem.getAttributeNode("id");
179.1114 +				return node && node.value === attrId;
179.1115 +			};
179.1116 +		};
179.1117 +	}
179.1118 +
179.1119 +	// Tag
179.1120 +	Expr.find["TAG"] = support.getElementsByTagName ?
179.1121 +		function( tag, context ) {
179.1122 +			if ( typeof context.getElementsByTagName !== strundefined ) {
179.1123 +				return context.getElementsByTagName( tag );
179.1124 +			}
179.1125 +		} :
179.1126 +		function( tag, context ) {
179.1127 +			var elem,
179.1128 +				tmp = [],
179.1129 +				i = 0,
179.1130 +				results = context.getElementsByTagName( tag );
179.1131 +
179.1132 +			// Filter out possible comments
179.1133 +			if ( tag === "*" ) {
179.1134 +				while ( (elem = results[i++]) ) {
179.1135 +					if ( elem.nodeType === 1 ) {
179.1136 +						tmp.push( elem );
179.1137 +					}
179.1138 +				}
179.1139 +
179.1140 +				return tmp;
179.1141 +			}
179.1142 +			return results;
179.1143 +		};
179.1144 +
179.1145 +	// Class
179.1146 +	Expr.find["CLASS"] = support.getElementsByClassName && function( className, context ) {
179.1147 +		if ( typeof context.getElementsByClassName !== strundefined && documentIsHTML ) {
179.1148 +			return context.getElementsByClassName( className );
179.1149 +		}
179.1150 +	};
179.1151 +
179.1152 +	/* QSA/matchesSelector
179.1153 +	---------------------------------------------------------------------- */
179.1154 +
179.1155 +	// QSA and matchesSelector support
179.1156 +
179.1157 +	// matchesSelector(:active) reports false when true (IE9/Opera 11.5)
179.1158 +	rbuggyMatches = [];
179.1159 +
179.1160 +	// qSa(:focus) reports false when true (Chrome 21)
179.1161 +	// We allow this because of a bug in IE8/9 that throws an error
179.1162 +	// whenever `document.activeElement` is accessed on an iframe
179.1163 +	// So, we allow :focus to pass through QSA all the time to avoid the IE error
179.1164 +	// See http://bugs.jquery.com/ticket/13378
179.1165 +	rbuggyQSA = [];
179.1166 +
179.1167 +	if ( (support.qsa = rnative.test( doc.querySelectorAll )) ) {
179.1168 +		// Build QSA regex
179.1169 +		// Regex strategy adopted from Diego Perini
179.1170 +		assert(function( div ) {
179.1171 +			// Select is set to empty string on purpose
179.1172 +			// This is to test IE's treatment of not explicitly
179.1173 +			// setting a boolean content attribute,
179.1174 +			// since its presence should be enough
179.1175 +			// http://bugs.jquery.com/ticket/12359
179.1176 +			div.innerHTML = "<select msallowclip=''><option selected=''></option></select>";
179.1177 +
179.1178 +			// Support: IE8, Opera 11-12.16
179.1179 +			// Nothing should be selected when empty strings follow ^= or $= or *=
179.1180 +			// The test attribute must be unknown in Opera but "safe" for WinRT
179.1181 +			// http://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section
179.1182 +			if ( div.querySelectorAll("[msallowclip^='']").length ) {
179.1183 +				rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" );
179.1184 +			}
179.1185 +
179.1186 +			// Support: IE8
179.1187 +			// Boolean attributes and "value" are not treated correctly
179.1188 +			if ( !div.querySelectorAll("[selected]").length ) {
179.1189 +				rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" );
179.1190 +			}
179.1191 +
179.1192 +			// Webkit/Opera - :checked should return selected option elements
179.1193 +			// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
179.1194 +			// IE8 throws error here and will not see later tests
179.1195 +			if ( !div.querySelectorAll(":checked").length ) {
179.1196 +				rbuggyQSA.push(":checked");
179.1197 +			}
179.1198 +		});
179.1199 +
179.1200 +		assert(function( div ) {
179.1201 +			// Support: Windows 8 Native Apps
179.1202 +			// The type and name attributes are restricted during .innerHTML assignment
179.1203 +			var input = doc.createElement("input");
179.1204 +			input.setAttribute( "type", "hidden" );
179.1205 +			div.appendChild( input ).setAttribute( "name", "D" );
179.1206 +
179.1207 +			// Support: IE8
179.1208 +			// Enforce case-sensitivity of name attribute
179.1209 +			if ( div.querySelectorAll("[name=d]").length ) {
179.1210 +				rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" );
179.1211 +			}
179.1212 +
179.1213 +			// FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)
179.1214 +			// IE8 throws error here and will not see later tests
179.1215 +			if ( !div.querySelectorAll(":enabled").length ) {
179.1216 +				rbuggyQSA.push( ":enabled", ":disabled" );
179.1217 +			}
179.1218 +
179.1219 +			// Opera 10-11 does not throw on post-comma invalid pseudos
179.1220 +			div.querySelectorAll("*,:x");
179.1221 +			rbuggyQSA.push(",.*:");
179.1222 +		});
179.1223 +	}
179.1224 +
179.1225 +	if ( (support.matchesSelector = rnative.test( (matches = docElem.matches ||
179.1226 +		docElem.webkitMatchesSelector ||
179.1227 +		docElem.mozMatchesSelector ||
179.1228 +		docElem.oMatchesSelector ||
179.1229 +		docElem.msMatchesSelector) )) ) {
179.1230 +
179.1231 +		assert(function( div ) {
179.1232 +			// Check to see if it's possible to do matchesSelector
179.1233 +			// on a disconnected node (IE 9)
179.1234 +			support.disconnectedMatch = matches.call( div, "div" );
179.1235 +
179.1236 +			// This should fail with an exception
179.1237 +			// Gecko does not error, returns false instead
179.1238 +			matches.call( div, "[s!='']:x" );
179.1239 +			rbuggyMatches.push( "!=", pseudos );
179.1240 +		});
179.1241 +	}
179.1242 +
179.1243 +	rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join("|") );
179.1244 +	rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join("|") );
179.1245 +
179.1246 +	/* Contains
179.1247 +	---------------------------------------------------------------------- */
179.1248 +	hasCompare = rnative.test( docElem.compareDocumentPosition );
179.1249 +
179.1250 +	// Element contains another
179.1251 +	// Purposefully does not implement inclusive descendent
179.1252 +	// As in, an element does not contain itself
179.1253 +	contains = hasCompare || rnative.test( docElem.contains ) ?
179.1254 +		function( a, b ) {
179.1255 +			var adown = a.nodeType === 9 ? a.documentElement : a,
179.1256 +				bup = b && b.parentNode;
179.1257 +			return a === bup || !!( bup && bup.nodeType === 1 && (
179.1258 +				adown.contains ?
179.1259 +					adown.contains( bup ) :
179.1260 +					a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16
179.1261 +			));
179.1262 +		} :
179.1263 +		function( a, b ) {
179.1264 +			if ( b ) {
179.1265 +				while ( (b = b.parentNode) ) {
179.1266 +					if ( b === a ) {
179.1267 +						return true;
179.1268 +					}
179.1269 +				}
179.1270 +			}
179.1271 +			return false;
179.1272 +		};
179.1273 +
179.1274 +	/* Sorting
179.1275 +	---------------------------------------------------------------------- */
179.1276 +
179.1277 +	// Document order sorting
179.1278 +	sortOrder = hasCompare ?
179.1279 +	function( a, b ) {
179.1280 +
179.1281 +		// Flag for duplicate removal
179.1282 +		if ( a === b ) {
179.1283 +			hasDuplicate = true;
179.1284 +			return 0;
179.1285 +		}
179.1286 +
179.1287 +		// Sort on method existence if only one input has compareDocumentPosition
179.1288 +		var compare = !a.compareDocumentPosition - !b.compareDocumentPosition;
179.1289 +		if ( compare ) {
179.1290 +			return compare;
179.1291 +		}
179.1292 +
179.1293 +		// Calculate position if both inputs belong to the same document
179.1294 +		compare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ?
179.1295 +			a.compareDocumentPosition( b ) :
179.1296 +
179.1297 +			// Otherwise we know they are disconnected
179.1298 +			1;
179.1299 +
179.1300 +		// Disconnected nodes
179.1301 +		if ( compare & 1 ||
179.1302 +			(!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) {
179.1303 +
179.1304 +			// Choose the first element that is related to our preferred document
179.1305 +			if ( a === doc || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) {
179.1306 +				return -1;
179.1307 +			}
179.1308 +			if ( b === doc || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) {
179.1309 +				return 1;
179.1310 +			}
179.1311 +
179.1312 +			// Maintain original order
179.1313 +			return sortInput ?
179.1314 +				( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) :
179.1315 +				0;
179.1316 +		}
179.1317 +
179.1318 +		return compare & 4 ? -1 : 1;
179.1319 +	} :
179.1320 +	function( a, b ) {
179.1321 +		// Exit early if the nodes are identical
179.1322 +		if ( a === b ) {
179.1323 +			hasDuplicate = true;
179.1324 +			return 0;
179.1325 +		}
179.1326 +
179.1327 +		var cur,
179.1328 +			i = 0,
179.1329 +			aup = a.parentNode,
179.1330 +			bup = b.parentNode,
179.1331 +			ap = [ a ],
179.1332 +			bp = [ b ];
179.1333 +
179.1334 +		// Parentless nodes are either documents or disconnected
179.1335 +		if ( !aup || !bup ) {
179.1336 +			return a === doc ? -1 :
179.1337 +				b === doc ? 1 :
179.1338 +				aup ? -1 :
179.1339 +				bup ? 1 :
179.1340 +				sortInput ?
179.1341 +				( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) :
179.1342 +				0;
179.1343 +
179.1344 +		// If the nodes are siblings, we can do a quick check
179.1345 +		} else if ( aup === bup ) {
179.1346 +			return siblingCheck( a, b );
179.1347 +		}
179.1348 +
179.1349 +		// Otherwise we need full lists of their ancestors for comparison
179.1350 +		cur = a;
179.1351 +		while ( (cur = cur.parentNode) ) {
179.1352 +			ap.unshift( cur );
179.1353 +		}
179.1354 +		cur = b;
179.1355 +		while ( (cur = cur.parentNode) ) {
179.1356 +			bp.unshift( cur );
179.1357 +		}
179.1358 +
179.1359 +		// Walk down the tree looking for a discrepancy
179.1360 +		while ( ap[i] === bp[i] ) {
179.1361 +			i++;
179.1362 +		}
179.1363 +
179.1364 +		return i ?
179.1365 +			// Do a sibling check if the nodes have a common ancestor
179.1366 +			siblingCheck( ap[i], bp[i] ) :
179.1367 +
179.1368 +			// Otherwise nodes in our document sort first
179.1369 +			ap[i] === preferredDoc ? -1 :
179.1370 +			bp[i] === preferredDoc ? 1 :
179.1371 +			0;
179.1372 +	};
179.1373 +
179.1374 +	return doc;
179.1375 +};
179.1376 +
179.1377 +Sizzle.matches = function( expr, elements ) {
179.1378 +	return Sizzle( expr, null, null, elements );
179.1379 +};
179.1380 +
179.1381 +Sizzle.matchesSelector = function( elem, expr ) {
179.1382 +	// Set document vars if needed
179.1383 +	if ( ( elem.ownerDocument || elem ) !== document ) {
179.1384 +		setDocument( elem );
179.1385 +	}
179.1386 +
179.1387 +	// Make sure that attribute selectors are quoted
179.1388 +	expr = expr.replace( rattributeQuotes, "='$1']" );
179.1389 +
179.1390 +	if ( support.matchesSelector && documentIsHTML &&
179.1391 +		( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&
179.1392 +		( !rbuggyQSA     || !rbuggyQSA.test( expr ) ) ) {
179.1393 +
179.1394 +		try {
179.1395 +			var ret = matches.call( elem, expr );
179.1396 +
179.1397 +			// IE 9's matchesSelector returns false on disconnected nodes
179.1398 +			if ( ret || support.disconnectedMatch ||
179.1399 +					// As well, disconnected nodes are said to be in a document
179.1400 +					// fragment in IE 9
179.1401 +					elem.document && elem.document.nodeType !== 11 ) {
179.1402 +				return ret;
179.1403 +			}
179.1404 +		} catch(e) {}
179.1405 +	}
179.1406 +
179.1407 +	return Sizzle( expr, document, null, [ elem ] ).length > 0;
179.1408 +};
179.1409 +
179.1410 +Sizzle.contains = function( context, elem ) {
179.1411 +	// Set document vars if needed
179.1412 +	if ( ( context.ownerDocument || context ) !== document ) {
179.1413 +		setDocument( context );
179.1414 +	}
179.1415 +	return contains( context, elem );
179.1416 +};
179.1417 +
179.1418 +Sizzle.attr = function( elem, name ) {
179.1419 +	// Set document vars if needed
179.1420 +	if ( ( elem.ownerDocument || elem ) !== document ) {
179.1421 +		setDocument( elem );
179.1422 +	}
179.1423 +
179.1424 +	var fn = Expr.attrHandle[ name.toLowerCase() ],
179.1425 +		// Don't get fooled by Object.prototype properties (jQuery #13807)
179.1426 +		val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?
179.1427 +			fn( elem, name, !documentIsHTML ) :
179.1428 +			undefined;
179.1429 +
179.1430 +	return val !== undefined ?
179.1431 +		val :
179.1432 +		support.attributes || !documentIsHTML ?
179.1433 +			elem.getAttribute( name ) :
179.1434 +			(val = elem.getAttributeNode(name)) && val.specified ?
179.1435 +				val.value :
179.1436 +				null;
179.1437 +};
179.1438 +
179.1439 +Sizzle.error = function( msg ) {
179.1440 +	throw new Error( "Syntax error, unrecognized expression: " + msg );
179.1441 +};
179.1442 +
179.1443 +/**
179.1444 + * Document sorting and removing duplicates
179.1445 + * @param {ArrayLike} results
179.1446 + */
179.1447 +Sizzle.uniqueSort = function( results ) {
179.1448 +	var elem,
179.1449 +		duplicates = [],
179.1450 +		j = 0,
179.1451 +		i = 0;
179.1452 +
179.1453 +	// Unless we *know* we can detect duplicates, assume their presence
179.1454 +	hasDuplicate = !support.detectDuplicates;
179.1455 +	sortInput = !support.sortStable && results.slice( 0 );
179.1456 +	results.sort( sortOrder );
179.1457 +
179.1458 +	if ( hasDuplicate ) {
179.1459 +		while ( (elem = results[i++]) ) {
179.1460 +			if ( elem === results[ i ] ) {
179.1461 +				j = duplicates.push( i );
179.1462 +			}
179.1463 +		}
179.1464 +		while ( j-- ) {
179.1465 +			results.splice( duplicates[ j ], 1 );
179.1466 +		}
179.1467 +	}
179.1468 +
179.1469 +	// Clear input after sorting to release objects
179.1470 +	// See https://github.com/jquery/sizzle/pull/225
179.1471 +	sortInput = null;
179.1472 +
179.1473 +	return results;
179.1474 +};
179.1475 +
179.1476 +/**
179.1477 + * Utility function for retrieving the text value of an array of DOM nodes
179.1478 + * @param {Array|Element} elem
179.1479 + */
179.1480 +getText = Sizzle.getText = function( elem ) {
179.1481 +	var node,
179.1482 +		ret = "",
179.1483 +		i = 0,
179.1484 +		nodeType = elem.nodeType;
179.1485 +
179.1486 +	if ( !nodeType ) {
179.1487 +		// If no nodeType, this is expected to be an array
179.1488 +		while ( (node = elem[i++]) ) {
179.1489 +			// Do not traverse comment nodes
179.1490 +			ret += getText( node );
179.1491 +		}
179.1492 +	} else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {
179.1493 +		// Use textContent for elements
179.1494 +		// innerText usage removed for consistency of new lines (jQuery #11153)
179.1495 +		if ( typeof elem.textContent === "string" ) {
179.1496 +			return elem.textContent;
179.1497 +		} else {
179.1498 +			// Traverse its children
179.1499 +			for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
179.1500 +				ret += getText( elem );
179.1501 +			}
179.1502 +		}
179.1503 +	} else if ( nodeType === 3 || nodeType === 4 ) {
179.1504 +		return elem.nodeValue;
179.1505 +	}
179.1506 +	// Do not include comment or processing instruction nodes
179.1507 +
179.1508 +	return ret;
179.1509 +};
179.1510 +
179.1511 +Expr = Sizzle.selectors = {
179.1512 +
179.1513 +	// Can be adjusted by the user
179.1514 +	cacheLength: 50,
179.1515 +
179.1516 +	createPseudo: markFunction,
179.1517 +
179.1518 +	match: matchExpr,
179.1519 +
179.1520 +	attrHandle: {},
179.1521 +
179.1522 +	find: {},
179.1523 +
179.1524 +	relative: {
179.1525 +		">": { dir: "parentNode", first: true },
179.1526 +		" ": { dir: "parentNode" },
179.1527 +		"+": { dir: "previousSibling", first: true },
179.1528 +		"~": { dir: "previousSibling" }
179.1529 +	},
179.1530 +
179.1531 +	preFilter: {
179.1532 +		"ATTR": function( match ) {
179.1533 +			match[1] = match[1].replace( runescape, funescape );
179.1534 +
179.1535 +			// Move the given value to match[3] whether quoted or unquoted
179.1536 +			match[3] = ( match[3] || match[4] || match[5] || "" ).replace( runescape, funescape );
179.1537 +
179.1538 +			if ( match[2] === "~=" ) {
179.1539 +				match[3] = " " + match[3] + " ";
179.1540 +			}
179.1541 +
179.1542 +			return match.slice( 0, 4 );
179.1543 +		},
179.1544 +
179.1545 +		"CHILD": function( match ) {
179.1546 +			/* matches from matchExpr["CHILD"]
179.1547 +				1 type (only|nth|...)
179.1548 +				2 what (child|of-type)
179.1549 +				3 argument (even|odd|\d*|\d*n([+-]\d+)?|...)
179.1550 +				4 xn-component of xn+y argument ([+-]?\d*n|)
179.1551 +				5 sign of xn-component
179.1552 +				6 x of xn-component
179.1553 +				7 sign of y-component
179.1554 +				8 y of y-component
179.1555 +			*/
179.1556 +			match[1] = match[1].toLowerCase();
179.1557 +
179.1558 +			if ( match[1].slice( 0, 3 ) === "nth" ) {
179.1559 +				// nth-* requires argument
179.1560 +				if ( !match[3] ) {
179.1561 +					Sizzle.error( match[0] );
179.1562 +				}
179.1563 +
179.1564 +				// numeric x and y parameters for Expr.filter.CHILD
179.1565 +				// remember that false/true cast respectively to 0/1
179.1566 +				match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) );
179.1567 +				match[5] = +( ( match[7] + match[8] ) || match[3] === "odd" );
179.1568 +
179.1569 +			// other types prohibit arguments
179.1570 +			} else if ( match[3] ) {
179.1571 +				Sizzle.error( match[0] );
179.1572 +			}
179.1573 +
179.1574 +			return match;
179.1575 +		},
179.1576 +
179.1577 +		"PSEUDO": function( match ) {
179.1578 +			var excess,
179.1579 +				unquoted = !match[6] && match[2];
179.1580 +
179.1581 +			if ( matchExpr["CHILD"].test( match[0] ) ) {
179.1582 +				return null;
179.1583 +			}
179.1584 +
179.1585 +			// Accept quoted arguments as-is
179.1586 +			if ( match[3] ) {
179.1587 +				match[2] = match[4] || match[5] || "";
179.1588 +
179.1589 +			// Strip excess characters from unquoted arguments
179.1590 +			} else if ( unquoted && rpseudo.test( unquoted ) &&
179.1591 +				// Get excess from tokenize (recursively)
179.1592 +				(excess = tokenize( unquoted, true )) &&
179.1593 +				// advance to the next closing parenthesis
179.1594 +				(excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) {
179.1595 +
179.1596 +				// excess is a negative index
179.1597 +				match[0] = match[0].slice( 0, excess );
179.1598 +				match[2] = unquoted.slice( 0, excess );
179.1599 +			}
179.1600 +
179.1601 +			// Return only captures needed by the pseudo filter method (type and argument)
179.1602 +			return match.slice( 0, 3 );
179.1603 +		}
179.1604 +	},
179.1605 +
179.1606 +	filter: {
179.1607 +
179.1608 +		"TAG": function( nodeNameSelector ) {
179.1609 +			var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();
179.1610 +			return nodeNameSelector === "*" ?
179.1611 +				function() { return true; } :
179.1612 +				function( elem ) {
179.1613 +					return elem.nodeName && elem.nodeName.toLowerCase() === nodeName;
179.1614 +				};
179.1615 +		},
179.1616 +
179.1617 +		"CLASS": function( className ) {
179.1618 +			var pattern = classCache[ className + " " ];
179.1619 +
179.1620 +			return pattern ||
179.1621 +				(pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) &&
179.1622 +				classCache( className, function( elem ) {
179.1623 +					return pattern.test( typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== strundefined && elem.getAttribute("class") || "" );
179.1624 +				});
179.1625 +		},
179.1626 +
179.1627 +		"ATTR": function( name, operator, check ) {
179.1628 +			return function( elem ) {
179.1629 +				var result = Sizzle.attr( elem, name );
179.1630 +
179.1631 +				if ( result == null ) {
179.1632 +					return operator === "!=";
179.1633 +				}
179.1634 +				if ( !operator ) {
179.1635 +					return true;
179.1636 +				}
179.1637 +
179.1638 +				result += "";
179.1639 +
179.1640 +				return operator === "=" ? result === check :
179.1641 +					operator === "!=" ? result !== check :
179.1642 +					operator === "^=" ? check && result.indexOf( check ) === 0 :
179.1643 +					operator === "*=" ? check && result.indexOf( check ) > -1 :
179.1644 +					operator === "$=" ? check && result.slice( -check.length ) === check :
179.1645 +					operator === "~=" ? ( " " + result + " " ).indexOf( check ) > -1 :
179.1646 +					operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" :
179.1647 +					false;
179.1648 +			};
179.1649 +		},
179.1650 +
179.1651 +		"CHILD": function( type, what, argument, first, last ) {
179.1652 +			var simple = type.slice( 0, 3 ) !== "nth",
179.1653 +				forward = type.slice( -4 ) !== "last",
179.1654 +				ofType = what === "of-type";
179.1655 +
179.1656 +			return first === 1 && last === 0 ?
179.1657 +
179.1658 +				// Shortcut for :nth-*(n)
179.1659 +				function( elem ) {
179.1660 +					return !!elem.parentNode;
179.1661 +				} :
179.1662 +
179.1663 +				function( elem, context, xml ) {
179.1664 +					var cache, outerCache, node, diff, nodeIndex, start,
179.1665 +						dir = simple !== forward ? "nextSibling" : "previousSibling",
179.1666 +						parent = elem.parentNode,
179.1667 +						name = ofType && elem.nodeName.toLowerCase(),
179.1668 +						useCache = !xml && !ofType;
179.1669 +
179.1670 +					if ( parent ) {
179.1671 +
179.1672 +						// :(first|last|only)-(child|of-type)
179.1673 +						if ( simple ) {
179.1674 +							while ( dir ) {
179.1675 +								node = elem;
179.1676 +								while ( (node = node[ dir ]) ) {
179.1677 +									if ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) {
179.1678 +										return false;
179.1679 +									}
179.1680 +								}
179.1681 +								// Reverse direction for :only-* (if we haven't yet done so)
179.1682 +								start = dir = type === "only" && !start && "nextSibling";
179.1683 +							}
179.1684 +							return true;
179.1685 +						}
179.1686 +
179.1687 +						start = [ forward ? parent.firstChild : parent.lastChild ];
179.1688 +
179.1689 +						// non-xml :nth-child(...) stores cache data on `parent`
179.1690 +						if ( forward && useCache ) {
179.1691 +							// Seek `elem` from a previously-cached index
179.1692 +							outerCache = parent[ expando ] || (parent[ expando ] = {});
179.1693 +							cache = outerCache[ type ] || [];
179.1694 +							nodeIndex = cache[0] === dirruns && cache[1];
179.1695 +							diff = cache[0] === dirruns && cache[2];
179.1696 +							node = nodeIndex && parent.childNodes[ nodeIndex ];
179.1697 +
179.1698 +							while ( (node = ++nodeIndex && node && node[ dir ] ||
179.1699 +
179.1700 +								// Fallback to seeking `elem` from the start
179.1701 +								(diff = nodeIndex = 0) || start.pop()) ) {
179.1702 +
179.1703 +								// When found, cache indexes on `parent` and break
179.1704 +								if ( node.nodeType === 1 && ++diff && node === elem ) {
179.1705 +									outerCache[ type ] = [ dirruns, nodeIndex, diff ];
179.1706 +									break;
179.1707 +								}
179.1708 +							}
179.1709 +
179.1710 +						// Use previously-cached element index if available
179.1711 +						} else if ( useCache && (cache = (elem[ expando ] || (elem[ expando ] = {}))[ type ]) && cache[0] === dirruns ) {
179.1712 +							diff = cache[1];
179.1713 +
179.1714 +						// xml :nth-child(...) or :nth-last-child(...) or :nth(-last)?-of-type(...)
179.1715 +						} else {
179.1716 +							// Use the same loop as above to seek `elem` from the start
179.1717 +							while ( (node = ++nodeIndex && node && node[ dir ] ||
179.1718 +								(diff = nodeIndex = 0) || start.pop()) ) {
179.1719 +
179.1720 +								if ( ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) && ++diff ) {
179.1721 +									// Cache the index of each encountered element
179.1722 +									if ( useCache ) {
179.1723 +										(node[ expando ] || (node[ expando ] = {}))[ type ] = [ dirruns, diff ];
179.1724 +									}
179.1725 +
179.1726 +									if ( node === elem ) {
179.1727 +										break;
179.1728 +									}
179.1729 +								}
179.1730 +							}
179.1731 +						}
179.1732 +
179.1733 +						// Incorporate the offset, then check against cycle size
179.1734 +						diff -= last;
179.1735 +						return diff === first || ( diff % first === 0 && diff / first >= 0 );
179.1736 +					}
179.1737 +				};
179.1738 +		},
179.1739 +
179.1740 +		"PSEUDO": function( pseudo, argument ) {
179.1741 +			// pseudo-class names are case-insensitive
179.1742 +			// http://www.w3.org/TR/selectors/#pseudo-classes
179.1743 +			// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters
179.1744 +			// Remember that setFilters inherits from pseudos
179.1745 +			var args,
179.1746 +				fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||
179.1747 +					Sizzle.error( "unsupported pseudo: " + pseudo );
179.1748 +
179.1749 +			// The user may use createPseudo to indicate that
179.1750 +			// arguments are needed to create the filter function
179.1751 +			// just as Sizzle does
179.1752 +			if ( fn[ expando ] ) {
179.1753 +				return fn( argument );
179.1754 +			}
179.1755 +
179.1756 +			// But maintain support for old signatures
179.1757 +			if ( fn.length > 1 ) {
179.1758 +				args = [ pseudo, pseudo, "", argument ];
179.1759 +				return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?
179.1760 +					markFunction(function( seed, matches ) {
179.1761 +						var idx,
179.1762 +							matched = fn( seed, argument ),
179.1763 +							i = matched.length;
179.1764 +						while ( i-- ) {
179.1765 +							idx = indexOf.call( seed, matched[i] );
179.1766 +							seed[ idx ] = !( matches[ idx ] = matched[i] );
179.1767 +						}
179.1768 +					}) :
179.1769 +					function( elem ) {
179.1770 +						return fn( elem, 0, args );
179.1771 +					};
179.1772 +			}
179.1773 +
179.1774 +			return fn;
179.1775 +		}
179.1776 +	},
179.1777 +
179.1778 +	pseudos: {
179.1779 +		// Potentially complex pseudos
179.1780 +		"not": markFunction(function( selector ) {
179.1781 +			// Trim the selector passed to compile
179.1782 +			// to avoid treating leading and trailing
179.1783 +			// spaces as combinators
179.1784 +			var input = [],
179.1785 +				results = [],
179.1786 +				matcher = compile( selector.replace( rtrim, "$1" ) );
179.1787 +
179.1788 +			return matcher[ expando ] ?
179.1789 +				markFunction(function( seed, matches, context, xml ) {
179.1790 +					var elem,
179.1791 +						unmatched = matcher( seed, null, xml, [] ),
179.1792 +						i = seed.length;
179.1793 +
179.1794 +					// Match elements unmatched by `matcher`
179.1795 +					while ( i-- ) {
179.1796 +						if ( (elem = unmatched[i]) ) {
179.1797 +							seed[i] = !(matches[i] = elem);
179.1798 +						}
179.1799 +					}
179.1800 +				}) :
179.1801 +				function( elem, context, xml ) {
179.1802 +					input[0] = elem;
179.1803 +					matcher( input, null, xml, results );
179.1804 +					return !results.pop();
179.1805 +				};
179.1806 +		}),
179.1807 +
179.1808 +		"has": markFunction(function( selector ) {
179.1809 +			return function( elem ) {
179.1810 +				return Sizzle( selector, elem ).length > 0;
179.1811 +			};
179.1812 +		}),
179.1813 +
179.1814 +		"contains": markFunction(function( text ) {
179.1815 +			return function( elem ) {
179.1816 +				return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1;
179.1817 +			};
179.1818 +		}),
179.1819 +
179.1820 +		// "Whether an element is represented by a :lang() selector
179.1821 +		// is based solely on the element's language value
179.1822 +		// being equal to the identifier C,
179.1823 +		// or beginning with the identifier C immediately followed by "-".
179.1824 +		// The matching of C against the element's language value is performed case-insensitively.
179.1825 +		// The identifier C does not have to be a valid language name."
179.1826 +		// http://www.w3.org/TR/selectors/#lang-pseudo
179.1827 +		"lang": markFunction( function( lang ) {
179.1828 +			// lang value must be a valid identifier
179.1829 +			if ( !ridentifier.test(lang || "") ) {
179.1830 +				Sizzle.error( "unsupported lang: " + lang );
179.1831 +			}
179.1832 +			lang = lang.replace( runescape, funescape ).toLowerCase();
179.1833 +			return function( elem ) {
179.1834 +				var elemLang;
179.1835 +				do {
179.1836 +					if ( (elemLang = documentIsHTML ?
179.1837 +						elem.lang :
179.1838 +						elem.getAttribute("xml:lang") || elem.getAttribute("lang")) ) {
179.1839 +
179.1840 +						elemLang = elemLang.toLowerCase();
179.1841 +						return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0;
179.1842 +					}
179.1843 +				} while ( (elem = elem.parentNode) && elem.nodeType === 1 );
179.1844 +				return false;
179.1845 +			};
179.1846 +		}),
179.1847 +
179.1848 +		// Miscellaneous
179.1849 +		"target": function( elem ) {
179.1850 +			var hash = window.location && window.location.hash;
179.1851 +			return hash && hash.slice( 1 ) === elem.id;
179.1852 +		},
179.1853 +
179.1854 +		"root": function( elem ) {
179.1855 +			return elem === docElem;
179.1856 +		},
179.1857 +
179.1858 +		"focus": function( elem ) {
179.1859 +			return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);
179.1860 +		},
179.1861 +
179.1862 +		// Boolean properties
179.1863 +		"enabled": function( elem ) {
179.1864 +			return elem.disabled === false;
179.1865 +		},
179.1866 +
179.1867 +		"disabled": function( elem ) {
179.1868 +			return elem.disabled === true;
179.1869 +		},
179.1870 +
179.1871 +		"checked": function( elem ) {
179.1872 +			// In CSS3, :checked should return both checked and selected elements
179.1873 +			// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
179.1874 +			var nodeName = elem.nodeName.toLowerCase();
179.1875 +			return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected);
179.1876 +		},
179.1877 +
179.1878 +		"selected": function( elem ) {
179.1879 +			// Accessing this property makes selected-by-default
179.1880 +			// options in Safari work properly
179.1881 +			if ( elem.parentNode ) {
179.1882 +				elem.parentNode.selectedIndex;
179.1883 +			}
179.1884 +
179.1885 +			return elem.selected === true;
179.1886 +		},
179.1887 +
179.1888 +		// Contents
179.1889 +		"empty": function( elem ) {
179.1890 +			// http://www.w3.org/TR/selectors/#empty-pseudo
179.1891 +			// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),
179.1892 +			//   but not by others (comment: 8; processing instruction: 7; etc.)
179.1893 +			// nodeType < 6 works because attributes (2) do not appear as children
179.1894 +			for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
179.1895 +				if ( elem.nodeType < 6 ) {
179.1896 +					return false;
179.1897 +				}
179.1898 +			}
179.1899 +			return true;
179.1900 +		},
179.1901 +
179.1902 +		"parent": function( elem ) {
179.1903 +			return !Expr.pseudos["empty"]( elem );
179.1904 +		},
179.1905 +
179.1906 +		// Element/input types
179.1907 +		"header": function( elem ) {
179.1908 +			return rheader.test( elem.nodeName );
179.1909 +		},
179.1910 +
179.1911 +		"input": function( elem ) {
179.1912 +			return rinputs.test( elem.nodeName );
179.1913 +		},
179.1914 +
179.1915 +		"button": function( elem ) {
179.1916 +			var name = elem.nodeName.toLowerCase();
179.1917 +			return name === "input" && elem.type === "button" || name === "button";
179.1918 +		},
179.1919 +
179.1920 +		"text": function( elem ) {
179.1921 +			var attr;
179.1922 +			return elem.nodeName.toLowerCase() === "input" &&
179.1923 +				elem.type === "text" &&
179.1924 +
179.1925 +				// Support: IE<8
179.1926 +				// New HTML5 attribute values (e.g., "search") appear with elem.type === "text"
179.1927 +				( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === "text" );
179.1928 +		},
179.1929 +
179.1930 +		// Position-in-collection
179.1931 +		"first": createPositionalPseudo(function() {
179.1932 +			return [ 0 ];
179.1933 +		}),
179.1934 +
179.1935 +		"last": createPositionalPseudo(function( matchIndexes, length ) {
179.1936 +			return [ length - 1 ];
179.1937 +		}),
179.1938 +
179.1939 +		"eq": createPositionalPseudo(function( matchIndexes, length, argument ) {
179.1940 +			return [ argument < 0 ? argument + length : argument ];
179.1941 +		}),
179.1942 +
179.1943 +		"even": createPositionalPseudo(function( matchIndexes, length ) {
179.1944 +			var i = 0;
179.1945 +			for ( ; i < length; i += 2 ) {
179.1946 +				matchIndexes.push( i );
179.1947 +			}
179.1948 +			return matchIndexes;
179.1949 +		}),
179.1950 +
179.1951 +		"odd": createPositionalPseudo(function( matchIndexes, length ) {
179.1952 +			var i = 1;
179.1953 +			for ( ; i < length; i += 2 ) {
179.1954 +				matchIndexes.push( i );
179.1955 +			}
179.1956 +			return matchIndexes;
179.1957 +		}),
179.1958 +
179.1959 +		"lt": createPositionalPseudo(function( matchIndexes, length, argument ) {
179.1960 +			var i = argument < 0 ? argument + length : argument;
179.1961 +			for ( ; --i >= 0; ) {
179.1962 +				matchIndexes.push( i );
179.1963 +			}
179.1964 +			return matchIndexes;
179.1965 +		}),
179.1966 +
179.1967 +		"gt": createPositionalPseudo(function( matchIndexes, length, argument ) {
179.1968 +			var i = argument < 0 ? argument + length : argument;
179.1969 +			for ( ; ++i < length; ) {
179.1970 +				matchIndexes.push( i );
179.1971 +			}
179.1972 +			return matchIndexes;
179.1973 +		})
179.1974 +	}
179.1975 +};
179.1976 +
179.1977 +Expr.pseudos["nth"] = Expr.pseudos["eq"];
179.1978 +
179.1979 +// Add button/input type pseudos
179.1980 +for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {
179.1981 +	Expr.pseudos[ i ] = createInputPseudo( i );
179.1982 +}
179.1983 +for ( i in { submit: true, reset: true } ) {
179.1984 +	Expr.pseudos[ i ] = createButtonPseudo( i );
179.1985 +}
179.1986 +
179.1987 +// Easy API for creating new setFilters
179.1988 +function setFilters() {}
179.1989 +setFilters.prototype = Expr.filters = Expr.pseudos;
179.1990 +Expr.setFilters = new setFilters();
179.1991 +
179.1992 +tokenize = Sizzle.tokenize = function( selector, parseOnly ) {
179.1993 +	var matched, match, tokens, type,
179.1994 +		soFar, groups, preFilters,
179.1995 +		cached = tokenCache[ selector + " " ];
179.1996 +
179.1997 +	if ( cached ) {
179.1998 +		return parseOnly ? 0 : cached.slice( 0 );
179.1999 +	}
179.2000 +
179.2001 +	soFar = selector;
179.2002 +	groups = [];
179.2003 +	preFilters = Expr.preFilter;
179.2004 +
179.2005 +	while ( soFar ) {
179.2006 +
179.2007 +		// Comma and first run
179.2008 +		if ( !matched || (match = rcomma.exec( soFar )) ) {
179.2009 +			if ( match ) {
179.2010 +				// Don't consume trailing commas as valid
179.2011 +				soFar = soFar.slice( match[0].length ) || soFar;
179.2012 +			}
179.2013 +			groups.push( (tokens = []) );
179.2014 +		}
179.2015 +
179.2016 +		matched = false;
179.2017 +
179.2018 +		// Combinators
179.2019 +		if ( (match = rcombinators.exec( soFar )) ) {
179.2020 +			matched = match.shift();
179.2021 +			tokens.push({
179.2022 +				value: matched,
179.2023 +				// Cast descendant combinators to space
179.2024 +				type: match[0].replace( rtrim, " " )
179.2025 +			});
179.2026 +			soFar = soFar.slice( matched.length );
179.2027 +		}
179.2028 +
179.2029 +		// Filters
179.2030 +		for ( type in Expr.filter ) {
179.2031 +			if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] ||
179.2032 +				(match = preFilters[ type ]( match ))) ) {
179.2033 +				matched = match.shift();
179.2034 +				tokens.push({
179.2035 +					value: matched,
179.2036 +					type: type,
179.2037 +					matches: match
179.2038 +				});
179.2039 +				soFar = soFar.slice( matched.length );
179.2040 +			}
179.2041 +		}
179.2042 +
179.2043 +		if ( !matched ) {
179.2044 +			break;
179.2045 +		}
179.2046 +	}
179.2047 +
179.2048 +	// Return the length of the invalid excess
179.2049 +	// if we're just parsing
179.2050 +	// Otherwise, throw an error or return tokens
179.2051 +	return parseOnly ?
179.2052 +		soFar.length :
179.2053 +		soFar ?
179.2054 +			Sizzle.error( selector ) :
179.2055 +			// Cache the tokens
179.2056 +			tokenCache( selector, groups ).slice( 0 );
179.2057 +};
179.2058 +
179.2059 +function toSelector( tokens ) {
179.2060 +	var i = 0,
179.2061 +		len = tokens.length,
179.2062 +		selector = "";
179.2063 +	for ( ; i < len; i++ ) {
179.2064 +		selector += tokens[i].value;
179.2065 +	}
179.2066 +	return selector;
179.2067 +}
179.2068 +
179.2069 +function addCombinator( matcher, combinator, base ) {
179.2070 +	var dir = combinator.dir,
179.2071 +		checkNonElements = base && dir === "parentNode",
179.2072 +		doneName = done++;
179.2073 +
179.2074 +	return combinator.first ?
179.2075 +		// Check against closest ancestor/preceding element
179.2076 +		function( elem, context, xml ) {
179.2077 +			while ( (elem = elem[ dir ]) ) {
179.2078 +				if ( elem.nodeType === 1 || checkNonElements ) {
179.2079 +					return matcher( elem, context, xml );
179.2080 +				}
179.2081 +			}
179.2082 +		} :
179.2083 +
179.2084 +		// Check against all ancestor/preceding elements
179.2085 +		function( elem, context, xml ) {
179.2086 +			var oldCache, outerCache,
179.2087 +				newCache = [ dirruns, doneName ];
179.2088 +
179.2089 +			// We can't set arbitrary data on XML nodes, so they don't benefit from dir caching
179.2090 +			if ( xml ) {
179.2091 +				while ( (elem = elem[ dir ]) ) {
179.2092 +					if ( elem.nodeType === 1 || checkNonElements ) {
179.2093 +						if ( matcher( elem, context, xml ) ) {
179.2094 +							return true;
179.2095 +						}
179.2096 +					}
179.2097 +				}
179.2098 +			} else {
179.2099 +				while ( (elem = elem[ dir ]) ) {
179.2100 +					if ( elem.nodeType === 1 || checkNonElements ) {
179.2101 +						outerCache = elem[ expando ] || (elem[ expando ] = {});
179.2102 +						if ( (oldCache = outerCache[ dir ]) &&
179.2103 +							oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {
179.2104 +
179.2105 +							// Assign to newCache so results back-propagate to previous elements
179.2106 +							return (newCache[ 2 ] = oldCache[ 2 ]);
179.2107 +						} else {
179.2108 +							// Reuse newcache so results back-propagate to previous elements
179.2109 +							outerCache[ dir ] = newCache;
179.2110 +
179.2111 +							// A match means we're done; a fail means we have to keep checking
179.2112 +							if ( (newCache[ 2 ] = matcher( elem, context, xml )) ) {
179.2113 +								return true;
179.2114 +							}
179.2115 +						}
179.2116 +					}
179.2117 +				}
179.2118 +			}
179.2119 +		};
179.2120 +}
179.2121 +
179.2122 +function elementMatcher( matchers ) {
179.2123 +	return matchers.length > 1 ?
179.2124 +		function( elem, context, xml ) {
179.2125 +			var i = matchers.length;
179.2126 +			while ( i-- ) {
179.2127 +				if ( !matchers[i]( elem, context, xml ) ) {
179.2128 +					return false;
179.2129 +				}
179.2130 +			}
179.2131 +			return true;
179.2132 +		} :
179.2133 +		matchers[0];
179.2134 +}
179.2135 +
179.2136 +function multipleContexts( selector, contexts, results ) {
179.2137 +	var i = 0,
179.2138 +		len = contexts.length;
179.2139 +	for ( ; i < len; i++ ) {
179.2140 +		Sizzle( selector, contexts[i], results );
179.2141 +	}
179.2142 +	return results;
179.2143 +}
179.2144 +
179.2145 +function condense( unmatched, map, filter, context, xml ) {
179.2146 +	var elem,
179.2147 +		newUnmatched = [],
179.2148 +		i = 0,
179.2149 +		len = unmatched.length,
179.2150 +		mapped = map != null;
179.2151 +
179.2152 +	for ( ; i < len; i++ ) {
179.2153 +		if ( (elem = unmatched[i]) ) {
179.2154 +			if ( !filter || filter( elem, context, xml ) ) {
179.2155 +				newUnmatched.push( elem );
179.2156 +				if ( mapped ) {
179.2157 +					map.push( i );
179.2158 +				}
179.2159 +			}
179.2160 +		}
179.2161 +	}
179.2162 +
179.2163 +	return newUnmatched;
179.2164 +}
179.2165 +
179.2166 +function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {
179.2167 +	if ( postFilter && !postFilter[ expando ] ) {
179.2168 +		postFilter = setMatcher( postFilter );
179.2169 +	}
179.2170 +	if ( postFinder && !postFinder[ expando ] ) {
179.2171 +		postFinder = setMatcher( postFinder, postSelector );
179.2172 +	}
179.2173 +	return markFunction(function( seed, results, context, xml ) {
179.2174 +		var temp, i, elem,
179.2175 +			preMap = [],
179.2176 +			postMap = [],
179.2177 +			preexisting = results.length,
179.2178 +
179.2179 +			// Get initial elements from seed or context
179.2180 +			elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ),
179.2181 +
179.2182 +			// Prefilter to get matcher input, preserving a map for seed-results synchronization
179.2183 +			matcherIn = preFilter && ( seed || !selector ) ?
179.2184 +				condense( elems, preMap, preFilter, context, xml ) :
179.2185 +				elems,
179.2186 +
179.2187 +			matcherOut = matcher ?
179.2188 +				// If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,
179.2189 +				postFinder || ( seed ? preFilter : preexisting || postFilter ) ?
179.2190 +
179.2191 +					// ...intermediate processing is necessary
179.2192 +					[] :
179.2193 +
179.2194 +					// ...otherwise use results directly
179.2195 +					results :
179.2196 +				matcherIn;
179.2197 +
179.2198 +		// Find primary matches
179.2199 +		if ( matcher ) {
179.2200 +			matcher( matcherIn, matcherOut, context, xml );
179.2201 +		}
179.2202 +
179.2203 +		// Apply postFilter
179.2204 +		if ( postFilter ) {
179.2205 +			temp = condense( matcherOut, postMap );
179.2206 +			postFilter( temp, [], context, xml );
179.2207 +
179.2208 +			// Un-match failing elements by moving them back to matcherIn
179.2209 +			i = temp.length;
179.2210 +			while ( i-- ) {
179.2211 +				if ( (elem = temp[i]) ) {
179.2212 +					matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem);
179.2213 +				}
179.2214 +			}
179.2215 +		}
179.2216 +
179.2217 +		if ( seed ) {
179.2218 +			if ( postFinder || preFilter ) {
179.2219 +				if ( postFinder ) {
179.2220 +					// Get the final matcherOut by condensing this intermediate into postFinder contexts
179.2221 +					temp = [];
179.2222 +					i = matcherOut.length;
179.2223 +					while ( i-- ) {
179.2224 +						if ( (elem = matcherOut[i]) ) {
179.2225 +							// Restore matcherIn since elem is not yet a final match
179.2226 +							temp.push( (matcherIn[i] = elem) );
179.2227 +						}
179.2228 +					}
179.2229 +					postFinder( null, (matcherOut = []), temp, xml );
179.2230 +				}
179.2231 +
179.2232 +				// Move matched elements from seed to results to keep them synchronized
179.2233 +				i = matcherOut.length;
179.2234 +				while ( i-- ) {
179.2235 +					if ( (elem = matcherOut[i]) &&
179.2236 +						(temp = postFinder ? indexOf.call( seed, elem ) : preMap[i]) > -1 ) {
179.2237 +
179.2238 +						seed[temp] = !(results[temp] = elem);
179.2239 +					}
179.2240 +				}
179.2241 +			}
179.2242 +
179.2243 +		// Add elements to results, through postFinder if defined
179.2244 +		} else {
179.2245 +			matcherOut = condense(
179.2246 +				matcherOut === results ?
179.2247 +					matcherOut.splice( preexisting, matcherOut.length ) :
179.2248 +					matcherOut
179.2249 +			);
179.2250 +			if ( postFinder ) {
179.2251 +				postFinder( null, results, matcherOut, xml );
179.2252 +			} else {
179.2253 +				push.apply( results, matcherOut );
179.2254 +			}
179.2255 +		}
179.2256 +	});
179.2257 +}
179.2258 +
179.2259 +function matcherFromTokens( tokens ) {
179.2260 +	var checkContext, matcher, j,
179.2261 +		len = tokens.length,
179.2262 +		leadingRelative = Expr.relative[ tokens[0].type ],
179.2263 +		implicitRelative = leadingRelative || Expr.relative[" "],
179.2264 +		i = leadingRelative ? 1 : 0,
179.2265 +
179.2266 +		// The foundational matcher ensures that elements are reachable from top-level context(s)
179.2267 +		matchContext = addCombinator( function( elem ) {
179.2268 +			return elem === checkContext;
179.2269 +		}, implicitRelative, true ),
179.2270 +		matchAnyContext = addCombinator( function( elem ) {
179.2271 +			return indexOf.call( checkContext, elem ) > -1;
179.2272 +		}, implicitRelative, true ),
179.2273 +		matchers = [ function( elem, context, xml ) {
179.2274 +			return ( !leadingRelative && ( xml || context !== outermostContext ) ) || (
179.2275 +				(checkContext = context).nodeType ?
179.2276 +					matchContext( elem, context, xml ) :
179.2277 +					matchAnyContext( elem, context, xml ) );
179.2278 +		} ];
179.2279 +
179.2280 +	for ( ; i < len; i++ ) {
179.2281 +		if ( (matcher = Expr.relative[ tokens[i].type ]) ) {
179.2282 +			matchers = [ addCombinator(elementMatcher( matchers ), matcher) ];
179.2283 +		} else {
179.2284 +			matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches );
179.2285 +
179.2286 +			// Return special upon seeing a positional matcher
179.2287 +			if ( matcher[ expando ] ) {
179.2288 +				// Find the next relative operator (if any) for proper handling
179.2289 +				j = ++i;
179.2290 +				for ( ; j < len; j++ ) {
179.2291 +					if ( Expr.relative[ tokens[j].type ] ) {
179.2292 +						break;
179.2293 +					}
179.2294 +				}
179.2295 +				return setMatcher(
179.2296 +					i > 1 && elementMatcher( matchers ),
179.2297 +					i > 1 && toSelector(
179.2298 +						// If the preceding token was a descendant combinator, insert an implicit any-element `*`
179.2299 +						tokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === " " ? "*" : "" })
179.2300 +					).replace( rtrim, "$1" ),
179.2301 +					matcher,
179.2302 +					i < j && matcherFromTokens( tokens.slice( i, j ) ),
179.2303 +					j < len && matcherFromTokens( (tokens = tokens.slice( j )) ),
179.2304 +					j < len && toSelector( tokens )
179.2305 +				);
179.2306 +			}
179.2307 +			matchers.push( matcher );
179.2308 +		}
179.2309 +	}
179.2310 +
179.2311 +	return elementMatcher( matchers );
179.2312 +}
179.2313 +
179.2314 +function matcherFromGroupMatchers( elementMatchers, setMatchers ) {
179.2315 +	var bySet = setMatchers.length > 0,
179.2316 +		byElement = elementMatchers.length > 0,
179.2317 +		superMatcher = function( seed, context, xml, results, outermost ) {
179.2318 +			var elem, j, matcher,
179.2319 +				matchedCount = 0,
179.2320 +				i = "0",
179.2321 +				unmatched = seed && [],
179.2322 +				setMatched = [],
179.2323 +				contextBackup = outermostContext,
179.2324 +				// We must always have either seed elements or outermost context
179.2325 +				elems = seed || byElement && Expr.find["TAG"]( "*", outermost ),
179.2326 +				// Use integer dirruns iff this is the outermost matcher
179.2327 +				dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1),
179.2328 +				len = elems.length;
179.2329 +
179.2330 +			if ( outermost ) {
179.2331 +				outermostContext = context !== document && context;
179.2332 +			}
179.2333 +
179.2334 +			// Add elements passing elementMatchers directly to results
179.2335 +			// Keep `i` a string if there are no elements so `matchedCount` will be "00" below
179.2336 +			// Support: IE<9, Safari
179.2337 +			// Tolerate NodeList properties (IE: "length"; Safari: <number>) matching elements by id
179.2338 +			for ( ; i !== len && (elem = elems[i]) != null; i++ ) {
179.2339 +				if ( byElement && elem ) {
179.2340 +					j = 0;
179.2341 +					while ( (matcher = elementMatchers[j++]) ) {
179.2342 +						if ( matcher( elem, context, xml ) ) {
179.2343 +							results.push( elem );
179.2344 +							break;
179.2345 +						}
179.2346 +					}
179.2347 +					if ( outermost ) {
179.2348 +						dirruns = dirrunsUnique;
179.2349 +					}
179.2350 +				}
179.2351 +
179.2352 +				// Track unmatched elements for set filters
179.2353 +				if ( bySet ) {
179.2354 +					// They will have gone through all possible matchers
179.2355 +					if ( (elem = !matcher && elem) ) {
179.2356 +						matchedCount--;
179.2357 +					}
179.2358 +
179.2359 +					// Lengthen the array for every element, matched or not
179.2360 +					if ( seed ) {
179.2361 +						unmatched.push( elem );
179.2362 +					}
179.2363 +				}
179.2364 +			}
179.2365 +
179.2366 +			// Apply set filters to unmatched elements
179.2367 +			matchedCount += i;
179.2368 +			if ( bySet && i !== matchedCount ) {
179.2369 +				j = 0;
179.2370 +				while ( (matcher = setMatchers[j++]) ) {
179.2371 +					matcher( unmatched, setMatched, context, xml );
179.2372 +				}
179.2373 +
179.2374 +				if ( seed ) {
179.2375 +					// Reintegrate element matches to eliminate the need for sorting
179.2376 +					if ( matchedCount > 0 ) {
179.2377 +						while ( i-- ) {
179.2378 +							if ( !(unmatched[i] || setMatched[i]) ) {
179.2379 +								setMatched[i] = pop.call( results );
179.2380 +							}
179.2381 +						}
179.2382 +					}
179.2383 +
179.2384 +					// Discard index placeholder values to get only actual matches
179.2385 +					setMatched = condense( setMatched );
179.2386 +				}
179.2387 +
179.2388 +				// Add matches to results
179.2389 +				push.apply( results, setMatched );
179.2390 +
179.2391 +				// Seedless set matches succeeding multiple successful matchers stipulate sorting
179.2392 +				if ( outermost && !seed && setMatched.length > 0 &&
179.2393 +					( matchedCount + setMatchers.length ) > 1 ) {
179.2394 +
179.2395 +					Sizzle.uniqueSort( results );
179.2396 +				}
179.2397 +			}
179.2398 +
179.2399 +			// Override manipulation of globals by nested matchers
179.2400 +			if ( outermost ) {
179.2401 +				dirruns = dirrunsUnique;
179.2402 +				outermostContext = contextBackup;
179.2403 +			}
179.2404 +
179.2405 +			return unmatched;
179.2406 +		};
179.2407 +
179.2408 +	return bySet ?
179.2409 +		markFunction( superMatcher ) :
179.2410 +		superMatcher;
179.2411 +}
179.2412 +
179.2413 +compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) {
179.2414 +	var i,
179.2415 +		setMatchers = [],
179.2416 +		elementMatchers = [],
179.2417 +		cached = compilerCache[ selector + " " ];
179.2418 +
179.2419 +	if ( !cached ) {
179.2420 +		// Generate a function of recursive functions that can be used to check each element
179.2421 +		if ( !match ) {
179.2422 +			match = tokenize( selector );
179.2423 +		}
179.2424 +		i = match.length;
179.2425 +		while ( i-- ) {
179.2426 +			cached = matcherFromTokens( match[i] );
179.2427 +			if ( cached[ expando ] ) {
179.2428 +				setMatchers.push( cached );
179.2429 +			} else {
179.2430 +				elementMatchers.push( cached );
179.2431 +			}
179.2432 +		}
179.2433 +
179.2434 +		// Cache the compiled function
179.2435 +		cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) );
179.2436 +
179.2437 +		// Save selector and tokenization
179.2438 +		cached.selector = selector;
179.2439 +	}
179.2440 +	return cached;
179.2441 +};
179.2442 +
179.2443 +/**
179.2444 + * A low-level selection function that works with Sizzle's compiled
179.2445 + *  selector functions
179.2446 + * @param {String|Function} selector A selector or a pre-compiled
179.2447 + *  selector function built with Sizzle.compile
179.2448 + * @param {Element} context
179.2449 + * @param {Array} [results]
179.2450 + * @param {Array} [seed] A set of elements to match against
179.2451 + */
179.2452 +select = Sizzle.select = function( selector, context, results, seed ) {
179.2453 +	var i, tokens, token, type, find,
179.2454 +		compiled = typeof selector === "function" && selector,
179.2455 +		match = !seed && tokenize( (selector = compiled.selector || selector) );
179.2456 +
179.2457 +	results = results || [];
179.2458 +
179.2459 +	// Try to minimize operations if there is no seed and only one group
179.2460 +	if ( match.length === 1 ) {
179.2461 +
179.2462 +		// Take a shortcut and set the context if the root selector is an ID
179.2463 +		tokens = match[0] = match[0].slice( 0 );
179.2464 +		if ( tokens.length > 2 && (token = tokens[0]).type === "ID" &&
179.2465 +				support.getById && context.nodeType === 9 && documentIsHTML &&
179.2466 +				Expr.relative[ tokens[1].type ] ) {
179.2467 +
179.2468 +			context = ( Expr.find["ID"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0];
179.2469 +			if ( !context ) {
179.2470 +				return results;
179.2471 +
179.2472 +			// Precompiled matchers will still verify ancestry, so step up a level
179.2473 +			} else if ( compiled ) {
179.2474 +				context = context.parentNode;
179.2475 +			}
179.2476 +
179.2477 +			selector = selector.slice( tokens.shift().value.length );
179.2478 +		}
179.2479 +
179.2480 +		// Fetch a seed set for right-to-left matching
179.2481 +		i = matchExpr["needsContext"].test( selector ) ? 0 : tokens.length;
179.2482 +		while ( i-- ) {
179.2483 +			token = tokens[i];
179.2484 +
179.2485 +			// Abort if we hit a combinator
179.2486 +			if ( Expr.relative[ (type = token.type) ] ) {
179.2487 +				break;
179.2488 +			}
179.2489 +			if ( (find = Expr.find[ type ]) ) {
179.2490 +				// Search, expanding context for leading sibling combinators
179.2491 +				if ( (seed = find(
179.2492 +					token.matches[0].replace( runescape, funescape ),
179.2493 +					rsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context
179.2494 +				)) ) {
179.2495 +
179.2496 +					// If seed is empty or no tokens remain, we can return early
179.2497 +					tokens.splice( i, 1 );
179.2498 +					selector = seed.length && toSelector( tokens );
179.2499 +					if ( !selector ) {
179.2500 +						push.apply( results, seed );
179.2501 +						return results;
179.2502 +					}
179.2503 +
179.2504 +					break;
179.2505 +				}
179.2506 +			}
179.2507 +		}
179.2508 +	}
179.2509 +
179.2510 +	// Compile and execute a filtering function if one is not provided
179.2511 +	// Provide `match` to avoid retokenization if we modified the selector above
179.2512 +	( compiled || compile( selector, match ) )(
179.2513 +		seed,
179.2514 +		context,
179.2515 +		!documentIsHTML,
179.2516 +		results,
179.2517 +		rsibling.test( selector ) && testContext( context.parentNode ) || context
179.2518 +	);
179.2519 +	return results;
179.2520 +};
179.2521 +
179.2522 +// One-time assignments
179.2523 +
179.2524 +// Sort stability
179.2525 +support.sortStable = expando.split("").sort( sortOrder ).join("") === expando;
179.2526 +
179.2527 +// Support: Chrome<14
179.2528 +// Always assume duplicates if they aren't passed to the comparison function
179.2529 +support.detectDuplicates = !!hasDuplicate;
179.2530 +
179.2531 +// Initialize against the default document
179.2532 +setDocument();
179.2533 +
179.2534 +// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)
179.2535 +// Detached nodes confoundingly follow *each other*
179.2536 +support.sortDetached = assert(function( div1 ) {
179.2537 +	// Should return 1, but returns 4 (following)
179.2538 +	return div1.compareDocumentPosition( document.createElement("div") ) & 1;
179.2539 +});
179.2540 +
179.2541 +// Support: IE<8
179.2542 +// Prevent attribute/property "interpolation"
179.2543 +// http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx
179.2544 +if ( !assert(function( div ) {
179.2545 +	div.innerHTML = "<a href='#'></a>";
179.2546 +	return div.firstChild.getAttribute("href") === "#" ;
179.2547 +}) ) {
179.2548 +	addHandle( "type|href|height|width", function( elem, name, isXML ) {
179.2549 +		if ( !isXML ) {
179.2550 +			return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 );
179.2551 +		}
179.2552 +	});
179.2553 +}
179.2554 +
179.2555 +// Support: IE<9
179.2556 +// Use defaultValue in place of getAttribute("value")
179.2557 +if ( !support.attributes || !assert(function( div ) {
179.2558 +	div.innerHTML = "<input/>";
179.2559 +	div.firstChild.setAttribute( "value", "" );
179.2560 +	return div.firstChild.getAttribute( "value" ) === "";
179.2561 +}) ) {
179.2562 +	addHandle( "value", function( elem, name, isXML ) {
179.2563 +		if ( !isXML && elem.nodeName.toLowerCase() === "input" ) {
179.2564 +			return elem.defaultValue;
179.2565 +		}
179.2566 +	});
179.2567 +}
179.2568 +
179.2569 +// Support: IE<9
179.2570 +// Use getAttributeNode to fetch booleans when getAttribute lies
179.2571 +if ( !assert(function( div ) {
179.2572 +	return div.getAttribute("disabled") == null;
179.2573 +}) ) {
179.2574 +	addHandle( booleans, function( elem, name, isXML ) {
179.2575 +		var val;
179.2576 +		if ( !isXML ) {
179.2577 +			return elem[ name ] === true ? name.toLowerCase() :
179.2578 +					(val = elem.getAttributeNode( name )) && val.specified ?
179.2579 +					val.value :
179.2580 +				null;
179.2581 +		}
179.2582 +	});
179.2583 +}
179.2584 +
179.2585 +return Sizzle;
179.2586 +
179.2587 +})( window );
179.2588 +
179.2589 +
179.2590 +
179.2591 +jQuery.find = Sizzle;
179.2592 +jQuery.expr = Sizzle.selectors;
179.2593 +jQuery.expr[":"] = jQuery.expr.pseudos;
179.2594 +jQuery.unique = Sizzle.uniqueSort;
179.2595 +jQuery.text = Sizzle.getText;
179.2596 +jQuery.isXMLDoc = Sizzle.isXML;
179.2597 +jQuery.contains = Sizzle.contains;
179.2598 +
179.2599 +
179.2600 +
179.2601 +var rneedsContext = jQuery.expr.match.needsContext;
179.2602 +
179.2603 +var rsingleTag = (/^<(\w+)\s*\/?>(?:<\/\1>|)$/);
179.2604 +
179.2605 +
179.2606 +
179.2607 +var risSimple = /^.[^:#\[\.,]*$/;
179.2608 +
179.2609 +// Implement the identical functionality for filter and not
179.2610 +function winnow( elements, qualifier, not ) {
179.2611 +	if ( jQuery.isFunction( qualifier ) ) {
179.2612 +		return jQuery.grep( elements, function( elem, i ) {
179.2613 +			/* jshint -W018 */
179.2614 +			return !!qualifier.call( elem, i, elem ) !== not;
179.2615 +		});
179.2616 +
179.2617 +	}
179.2618 +
179.2619 +	if ( qualifier.nodeType ) {
179.2620 +		return jQuery.grep( elements, function( elem ) {
179.2621 +			return ( elem === qualifier ) !== not;
179.2622 +		});
179.2623 +
179.2624 +	}
179.2625 +
179.2626 +	if ( typeof qualifier === "string" ) {
179.2627 +		if ( risSimple.test( qualifier ) ) {
179.2628 +			return jQuery.filter( qualifier, elements, not );
179.2629 +		}
179.2630 +
179.2631 +		qualifier = jQuery.filter( qualifier, elements );
179.2632 +	}
179.2633 +
179.2634 +	return jQuery.grep( elements, function( elem ) {
179.2635 +		return ( indexOf.call( qualifier, elem ) >= 0 ) !== not;
179.2636 +	});
179.2637 +}
179.2638 +
179.2639 +jQuery.filter = function( expr, elems, not ) {
179.2640 +	var elem = elems[ 0 ];
179.2641 +
179.2642 +	if ( not ) {
179.2643 +		expr = ":not(" + expr + ")";
179.2644 +	}
179.2645 +
179.2646 +	return elems.length === 1 && elem.nodeType === 1 ?
179.2647 +		jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [] :
179.2648 +		jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {
179.2649 +			return elem.nodeType === 1;
179.2650 +		}));
179.2651 +};
179.2652 +
179.2653 +jQuery.fn.extend({
179.2654 +	find: function( selector ) {
179.2655 +		var i,
179.2656 +			len = this.length,
179.2657 +			ret = [],
179.2658 +			self = this;
179.2659 +
179.2660 +		if ( typeof selector !== "string" ) {
179.2661 +			return this.pushStack( jQuery( selector ).filter(function() {
179.2662 +				for ( i = 0; i < len; i++ ) {
179.2663 +					if ( jQuery.contains( self[ i ], this ) ) {
179.2664 +						return true;
179.2665 +					}
179.2666 +				}
179.2667 +			}) );
179.2668 +		}
179.2669 +
179.2670 +		for ( i = 0; i < len; i++ ) {
179.2671 +			jQuery.find( selector, self[ i ], ret );
179.2672 +		}
179.2673 +
179.2674 +		// Needed because $( selector, context ) becomes $( context ).find( selector )
179.2675 +		ret = this.pushStack( len > 1 ? jQuery.unique( ret ) : ret );
179.2676 +		ret.selector = this.selector ? this.selector + " " + selector : selector;
179.2677 +		return ret;
179.2678 +	},
179.2679 +	filter: function( selector ) {
179.2680 +		return this.pushStack( winnow(this, selector || [], false) );
179.2681 +	},
179.2682 +	not: function( selector ) {
179.2683 +		return this.pushStack( winnow(this, selector || [], true) );
179.2684 +	},
179.2685 +	is: function( selector ) {
179.2686 +		return !!winnow(
179.2687 +			this,
179.2688 +
179.2689 +			// If this is a positional/relative selector, check membership in the returned set
179.2690 +			// so $("p:first").is("p:last") won't return true for a doc with two "p".
179.2691 +			typeof selector === "string" && rneedsContext.test( selector ) ?
179.2692 +				jQuery( selector ) :
179.2693 +				selector || [],
179.2694 +			false
179.2695 +		).length;
179.2696 +	}
179.2697 +});
179.2698 +
179.2699 +
179.2700 +// Initialize a jQuery object
179.2701 +
179.2702 +
179.2703 +// A central reference to the root jQuery(document)
179.2704 +var rootjQuery,
179.2705 +
179.2706 +	// A simple way to check for HTML strings
179.2707 +	// Prioritize #id over <tag> to avoid XSS via location.hash (#9521)
179.2708 +	// Strict HTML recognition (#11290: must start with <)
179.2709 +	rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,
179.2710 +
179.2711 +	init = jQuery.fn.init = function( selector, context ) {
179.2712 +		var match, elem;
179.2713 +
179.2714 +		// HANDLE: $(""), $(null), $(undefined), $(false)
179.2715 +		if ( !selector ) {
179.2716 +			return this;
179.2717 +		}
179.2718 +
179.2719 +		// Handle HTML strings
179.2720 +		if ( typeof selector === "string" ) {
179.2721 +			if ( selector[0] === "<" && selector[ selector.length - 1 ] === ">" && selector.length >= 3 ) {
179.2722 +				// Assume that strings that start and end with <> are HTML and skip the regex check
179.2723 +				match = [ null, selector, null ];
179.2724 +
179.2725 +			} else {
179.2726 +				match = rquickExpr.exec( selector );
179.2727 +			}
179.2728 +
179.2729 +			// Match html or make sure no context is specified for #id
179.2730 +			if ( match && (match[1] || !context) ) {
179.2731 +
179.2732 +				// HANDLE: $(html) -> $(array)
179.2733 +				if ( match[1] ) {
179.2734 +					context = context instanceof jQuery ? context[0] : context;
179.2735 +
179.2736 +					// scripts is true for back-compat
179.2737 +					// Intentionally let the error be thrown if parseHTML is not present
179.2738 +					jQuery.merge( this, jQuery.parseHTML(
179.2739 +						match[1],
179.2740 +						context && context.nodeType ? context.ownerDocument || context : document,
179.2741 +						true
179.2742 +					) );
179.2743 +
179.2744 +					// HANDLE: $(html, props)
179.2745 +					if ( rsingleTag.test( match[1] ) && jQuery.isPlainObject( context ) ) {
179.2746 +						for ( match in context ) {
179.2747 +							// Properties of context are called as methods if possible
179.2748 +							if ( jQuery.isFunction( this[ match ] ) ) {
179.2749 +								this[ match ]( context[ match ] );
179.2750 +
179.2751 +							// ...and otherwise set as attributes
179.2752 +							} else {
179.2753 +								this.attr( match, context[ match ] );
179.2754 +							}
179.2755 +						}
179.2756 +					}
179.2757 +
179.2758 +					return this;
179.2759 +
179.2760 +				// HANDLE: $(#id)
179.2761 +				} else {
179.2762 +					elem = document.getElementById( match[2] );
179.2763 +
179.2764 +					// Check parentNode to catch when Blackberry 4.6 returns
179.2765 +					// nodes that are no longer in the document #6963
179.2766 +					if ( elem && elem.parentNode ) {
179.2767 +						// Inject the element directly into the jQuery object
179.2768 +						this.length = 1;
179.2769 +						this[0] = elem;
179.2770 +					}
179.2771 +
179.2772 +					this.context = document;
179.2773 +					this.selector = selector;
179.2774 +					return this;
179.2775 +				}
179.2776 +
179.2777 +			// HANDLE: $(expr, $(...))
179.2778 +			} else if ( !context || context.jquery ) {
179.2779 +				return ( context || rootjQuery ).find( selector );
179.2780 +
179.2781 +			// HANDLE: $(expr, context)
179.2782 +			// (which is just equivalent to: $(context).find(expr)
179.2783 +			} else {
179.2784 +				return this.constructor( context ).find( selector );
179.2785 +			}
179.2786 +
179.2787 +		// HANDLE: $(DOMElement)
179.2788 +		} else if ( selector.nodeType ) {
179.2789 +			this.context = this[0] = selector;
179.2790 +			this.length = 1;
179.2791 +			return this;
179.2792 +
179.2793 +		// HANDLE: $(function)
179.2794 +		// Shortcut for document ready
179.2795 +		} else if ( jQuery.isFunction( selector ) ) {
179.2796 +			return typeof rootjQuery.ready !== "undefined" ?
179.2797 +				rootjQuery.ready( selector ) :
179.2798 +				// Execute immediately if ready is not present
179.2799 +				selector( jQuery );
179.2800 +		}
179.2801 +
179.2802 +		if ( selector.selector !== undefined ) {
179.2803 +			this.selector = selector.selector;
179.2804 +			this.context = selector.context;
179.2805 +		}
179.2806 +
179.2807 +		return jQuery.makeArray( selector, this );
179.2808 +	};
179.2809 +
179.2810 +// Give the init function the jQuery prototype for later instantiation
179.2811 +init.prototype = jQuery.fn;
179.2812 +
179.2813 +// Initialize central reference
179.2814 +rootjQuery = jQuery( document );
179.2815 +
179.2816 +
179.2817 +var rparentsprev = /^(?:parents|prev(?:Until|All))/,
179.2818 +	// methods guaranteed to produce a unique set when starting from a unique set
179.2819 +	guaranteedUnique = {
179.2820 +		children: true,
179.2821 +		contents: true,
179.2822 +		next: true,
179.2823 +		prev: true
179.2824 +	};
179.2825 +
179.2826 +jQuery.extend({
179.2827 +	dir: function( elem, dir, until ) {
179.2828 +		var matched = [],
179.2829 +			truncate = until !== undefined;
179.2830 +
179.2831 +		while ( (elem = elem[ dir ]) && elem.nodeType !== 9 ) {
179.2832 +			if ( elem.nodeType === 1 ) {
179.2833 +				if ( truncate && jQuery( elem ).is( until ) ) {
179.2834 +					break;
179.2835 +				}
179.2836 +				matched.push( elem );
179.2837 +			}
179.2838 +		}
179.2839 +		return matched;
179.2840 +	},
179.2841 +
179.2842 +	sibling: function( n, elem ) {
179.2843 +		var matched = [];
179.2844 +
179.2845 +		for ( ; n; n = n.nextSibling ) {
179.2846 +			if ( n.nodeType === 1 && n !== elem ) {
179.2847 +				matched.push( n );
179.2848 +			}
179.2849 +		}
179.2850 +
179.2851 +		return matched;
179.2852 +	}
179.2853 +});
179.2854 +
179.2855 +jQuery.fn.extend({
179.2856 +	has: function( target ) {
179.2857 +		var targets = jQuery( target, this ),
179.2858 +			l = targets.length;
179.2859 +
179.2860 +		return this.filter(function() {
179.2861 +			var i = 0;
179.2862 +			for ( ; i < l; i++ ) {
179.2863 +				if ( jQuery.contains( this, targets[i] ) ) {
179.2864 +					return true;
179.2865 +				}
179.2866 +			}
179.2867 +		});
179.2868 +	},
179.2869 +
179.2870 +	closest: function( selectors, context ) {
179.2871 +		var cur,
179.2872 +			i = 0,
179.2873 +			l = this.length,
179.2874 +			matched = [],
179.2875 +			pos = rneedsContext.test( selectors ) || typeof selectors !== "string" ?
179.2876 +				jQuery( selectors, context || this.context ) :
179.2877 +				0;
179.2878 +
179.2879 +		for ( ; i < l; i++ ) {
179.2880 +			for ( cur = this[i]; cur && cur !== context; cur = cur.parentNode ) {
179.2881 +				// Always skip document fragments
179.2882 +				if ( cur.nodeType < 11 && (pos ?
179.2883 +					pos.index(cur) > -1 :
179.2884 +
179.2885 +					// Don't pass non-elements to Sizzle
179.2886 +					cur.nodeType === 1 &&
179.2887 +						jQuery.find.matchesSelector(cur, selectors)) ) {
179.2888 +
179.2889 +					matched.push( cur );
179.2890 +					break;
179.2891 +				}
179.2892 +			}
179.2893 +		}
179.2894 +
179.2895 +		return this.pushStack( matched.length > 1 ? jQuery.unique( matched ) : matched );
179.2896 +	},
179.2897 +
179.2898 +	// Determine the position of an element within
179.2899 +	// the matched set of elements
179.2900 +	index: function( elem ) {
179.2901 +
179.2902 +		// No argument, return index in parent
179.2903 +		if ( !elem ) {
179.2904 +			return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;
179.2905 +		}
179.2906 +
179.2907 +		// index in selector
179.2908 +		if ( typeof elem === "string" ) {
179.2909 +			return indexOf.call( jQuery( elem ), this[ 0 ] );
179.2910 +		}
179.2911 +
179.2912 +		// Locate the position of the desired element
179.2913 +		return indexOf.call( this,
179.2914 +
179.2915 +			// If it receives a jQuery object, the first element is used
179.2916 +			elem.jquery ? elem[ 0 ] : elem
179.2917 +		);
179.2918 +	},
179.2919 +
179.2920 +	add: function( selector, context ) {
179.2921 +		return this.pushStack(
179.2922 +			jQuery.unique(
179.2923 +				jQuery.merge( this.get(), jQuery( selector, context ) )
179.2924 +			)
179.2925 +		);
179.2926 +	},
179.2927 +
179.2928 +	addBack: function( selector ) {
179.2929 +		return this.add( selector == null ?
179.2930 +			this.prevObject : this.prevObject.filter(selector)
179.2931 +		);
179.2932 +	}
179.2933 +});
179.2934 +
179.2935 +function sibling( cur, dir ) {
179.2936 +	while ( (cur = cur[dir]) && cur.nodeType !== 1 ) {}
179.2937 +	return cur;
179.2938 +}
179.2939 +
179.2940 +jQuery.each({
179.2941 +	parent: function( elem ) {
179.2942 +		var parent = elem.parentNode;
179.2943 +		return parent && parent.nodeType !== 11 ? parent : null;
179.2944 +	},
179.2945 +	parents: function( elem ) {
179.2946 +		return jQuery.dir( elem, "parentNode" );
179.2947 +	},
179.2948 +	parentsUntil: function( elem, i, until ) {
179.2949 +		return jQuery.dir( elem, "parentNode", until );
179.2950 +	},
179.2951 +	next: function( elem ) {
179.2952 +		return sibling( elem, "nextSibling" );
179.2953 +	},
179.2954 +	prev: function( elem ) {
179.2955 +		return sibling( elem, "previousSibling" );
179.2956 +	},
179.2957 +	nextAll: function( elem ) {
179.2958 +		return jQuery.dir( elem, "nextSibling" );
179.2959 +	},
179.2960 +	prevAll: function( elem ) {
179.2961 +		return jQuery.dir( elem, "previousSibling" );
179.2962 +	},
179.2963 +	nextUntil: function( elem, i, until ) {
179.2964 +		return jQuery.dir( elem, "nextSibling", until );
179.2965 +	},
179.2966 +	prevUntil: function( elem, i, until ) {
179.2967 +		return jQuery.dir( elem, "previousSibling", until );
179.2968 +	},
179.2969 +	siblings: function( elem ) {
179.2970 +		return jQuery.sibling( ( elem.parentNode || {} ).firstChild, elem );
179.2971 +	},
179.2972 +	children: function( elem ) {
179.2973 +		return jQuery.sibling( elem.firstChild );
179.2974 +	},
179.2975 +	contents: function( elem ) {
179.2976 +		return elem.contentDocument || jQuery.merge( [], elem.childNodes );
179.2977 +	}
179.2978 +}, function( name, fn ) {
179.2979 +	jQuery.fn[ name ] = function( until, selector ) {
179.2980 +		var matched = jQuery.map( this, fn, until );
179.2981 +
179.2982 +		if ( name.slice( -5 ) !== "Until" ) {
179.2983 +			selector = until;
179.2984 +		}
179.2985 +
179.2986 +		if ( selector && typeof selector === "string" ) {
179.2987 +			matched = jQuery.filter( selector, matched );
179.2988 +		}
179.2989 +
179.2990 +		if ( this.length > 1 ) {
179.2991 +			// Remove duplicates
179.2992 +			if ( !guaranteedUnique[ name ] ) {
179.2993 +				jQuery.unique( matched );
179.2994 +			}
179.2995 +
179.2996 +			// Reverse order for parents* and prev-derivatives
179.2997 +			if ( rparentsprev.test( name ) ) {
179.2998 +				matched.reverse();
179.2999 +			}
179.3000 +		}
179.3001 +
179.3002 +		return this.pushStack( matched );
179.3003 +	};
179.3004 +});
179.3005 +var rnotwhite = (/\S+/g);
179.3006 +
179.3007 +
179.3008 +
179.3009 +// String to Object options format cache
179.3010 +var optionsCache = {};
179.3011 +
179.3012 +// Convert String-formatted options into Object-formatted ones and store in cache
179.3013 +function createOptions( options ) {
179.3014 +	var object = optionsCache[ options ] = {};
179.3015 +	jQuery.each( options.match( rnotwhite ) || [], function( _, flag ) {
179.3016 +		object[ flag ] = true;
179.3017 +	});
179.3018 +	return object;
179.3019 +}
179.3020 +
179.3021 +/*
179.3022 + * Create a callback list using the following parameters:
179.3023 + *
179.3024 + *	options: an optional list of space-separated options that will change how
179.3025 + *			the callback list behaves or a more traditional option object
179.3026 + *
179.3027 + * By default a callback list will act like an event callback list and can be
179.3028 + * "fired" multiple times.
179.3029 + *
179.3030 + * Possible options:
179.3031 + *
179.3032 + *	once:			will ensure the callback list can only be fired once (like a Deferred)
179.3033 + *
179.3034 + *	memory:			will keep track of previous values and will call any callback added
179.3035 + *					after the list has been fired right away with the latest "memorized"
179.3036 + *					values (like a Deferred)
179.3037 + *
179.3038 + *	unique:			will ensure a callback can only be added once (no duplicate in the list)
179.3039 + *
179.3040 + *	stopOnFalse:	interrupt callings when a callback returns false
179.3041 + *
179.3042 + */
179.3043 +jQuery.Callbacks = function( options ) {
179.3044 +
179.3045 +	// Convert options from String-formatted to Object-formatted if needed
179.3046 +	// (we check in cache first)
179.3047 +	options = typeof options === "string" ?
179.3048 +		( optionsCache[ options ] || createOptions( options ) ) :
179.3049 +		jQuery.extend( {}, options );
179.3050 +
179.3051 +	var // Last fire value (for non-forgettable lists)
179.3052 +		memory,
179.3053 +		// Flag to know if list was already fired
179.3054 +		fired,
179.3055 +		// Flag to know if list is currently firing
179.3056 +		firing,
179.3057 +		// First callback to fire (used internally by add and fireWith)
179.3058 +		firingStart,
179.3059 +		// End of the loop when firing
179.3060 +		firingLength,
179.3061 +		// Index of currently firing callback (modified by remove if needed)
179.3062 +		firingIndex,
179.3063 +		// Actual callback list
179.3064 +		list = [],
179.3065 +		// Stack of fire calls for repeatable lists
179.3066 +		stack = !options.once && [],
179.3067 +		// Fire callbacks
179.3068 +		fire = function( data ) {
179.3069 +			memory = options.memory && data;
179.3070 +			fired = true;
179.3071 +			firingIndex = firingStart || 0;
179.3072 +			firingStart = 0;
179.3073 +			firingLength = list.length;
179.3074 +			firing = true;
179.3075 +			for ( ; list && firingIndex < firingLength; firingIndex++ ) {
179.3076 +				if ( list[ firingIndex ].apply( data[ 0 ], data[ 1 ] ) === false && options.stopOnFalse ) {
179.3077 +					memory = false; // To prevent further calls using add
179.3078 +					break;
179.3079 +				}
179.3080 +			}
179.3081 +			firing = false;
179.3082 +			if ( list ) {
179.3083 +				if ( stack ) {
179.3084 +					if ( stack.length ) {
179.3085 +						fire( stack.shift() );
179.3086 +					}
179.3087 +				} else if ( memory ) {
179.3088 +					list = [];
179.3089 +				} else {
179.3090 +					self.disable();
179.3091 +				}
179.3092 +			}
179.3093 +		},
179.3094 +		// Actual Callbacks object
179.3095 +		self = {
179.3096 +			// Add a callback or a collection of callbacks to the list
179.3097 +			add: function() {
179.3098 +				if ( list ) {
179.3099 +					// First, we save the current length
179.3100 +					var start = list.length;
179.3101 +					(function add( args ) {
179.3102 +						jQuery.each( args, function( _, arg ) {
179.3103 +							var type = jQuery.type( arg );
179.3104 +							if ( type === "function" ) {
179.3105 +								if ( !options.unique || !self.has( arg ) ) {
179.3106 +									list.push( arg );
179.3107 +								}
179.3108 +							} else if ( arg && arg.length && type !== "string" ) {
179.3109 +								// Inspect recursively
179.3110 +								add( arg );
179.3111 +							}
179.3112 +						});
179.3113 +					})( arguments );
179.3114 +					// Do we need to add the callbacks to the
179.3115 +					// current firing batch?
179.3116 +					if ( firing ) {
179.3117 +						firingLength = list.length;
179.3118 +					// With memory, if we're not firing then
179.3119 +					// we should call right away
179.3120 +					} else if ( memory ) {
179.3121 +						firingStart = start;
179.3122 +						fire( memory );
179.3123 +					}
179.3124 +				}
179.3125 +				return this;
179.3126 +			},
179.3127 +			// Remove a callback from the list
179.3128 +			remove: function() {
179.3129 +				if ( list ) {
179.3130 +					jQuery.each( arguments, function( _, arg ) {
179.3131 +						var index;
179.3132 +						while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {
179.3133 +							list.splice( index, 1 );
179.3134 +							// Handle firing indexes
179.3135 +							if ( firing ) {
179.3136 +								if ( index <= firingLength ) {
179.3137 +									firingLength--;
179.3138 +								}
179.3139 +								if ( index <= firingIndex ) {
179.3140 +									firingIndex--;
179.3141 +								}
179.3142 +							}
179.3143 +						}
179.3144 +					});
179.3145 +				}
179.3146 +				return this;
179.3147 +			},
179.3148 +			// Check if a given callback is in the list.
179.3149 +			// If no argument is given, return whether or not list has callbacks attached.
179.3150 +			has: function( fn ) {
179.3151 +				return fn ? jQuery.inArray( fn, list ) > -1 : !!( list && list.length );
179.3152 +			},
179.3153 +			// Remove all callbacks from the list
179.3154 +			empty: function() {
179.3155 +				list = [];
179.3156 +				firingLength = 0;
179.3157 +				return this;
179.3158 +			},
179.3159 +			// Have the list do nothing anymore
179.3160 +			disable: function() {
179.3161 +				list = stack = memory = undefined;
179.3162 +				return this;
179.3163 +			},
179.3164 +			// Is it disabled?
179.3165 +			disabled: function() {
179.3166 +				return !list;
179.3167 +			},
179.3168 +			// Lock the list in its current state
179.3169 +			lock: function() {
179.3170 +				stack = undefined;
179.3171 +				if ( !memory ) {
179.3172 +					self.disable();
179.3173 +				}
179.3174 +				return this;
179.3175 +			},
179.3176 +			// Is it locked?
179.3177 +			locked: function() {
179.3178 +				return !stack;
179.3179 +			},
179.3180 +			// Call all callbacks with the given context and arguments
179.3181 +			fireWith: function( context, args ) {
179.3182 +				if ( list && ( !fired || stack ) ) {
179.3183 +					args = args || [];
179.3184 +					args = [ context, args.slice ? args.slice() : args ];
179.3185 +					if ( firing ) {
179.3186 +						stack.push( args );
179.3187 +					} else {
179.3188 +						fire( args );
179.3189 +					}
179.3190 +				}
179.3191 +				return this;
179.3192 +			},
179.3193 +			// Call all the callbacks with the given arguments
179.3194 +			fire: function() {
179.3195 +				self.fireWith( this, arguments );
179.3196 +				return this;
179.3197 +			},
179.3198 +			// To know if the callbacks have already been called at least once
179.3199 +			fired: function() {
179.3200 +				return !!fired;
179.3201 +			}
179.3202 +		};
179.3203 +
179.3204 +	return self;
179.3205 +};
179.3206 +
179.3207 +
179.3208 +jQuery.extend({
179.3209 +
179.3210 +	Deferred: function( func ) {
179.3211 +		var tuples = [
179.3212 +				// action, add listener, listener list, final state
179.3213 +				[ "resolve", "done", jQuery.Callbacks("once memory"), "resolved" ],
179.3214 +				[ "reject", "fail", jQuery.Callbacks("once memory"), "rejected" ],
179.3215 +				[ "notify", "progress", jQuery.Callbacks("memory") ]
179.3216 +			],
179.3217 +			state = "pending",
179.3218 +			promise = {
179.3219 +				state: function() {
179.3220 +					return state;
179.3221 +				},
179.3222 +				always: function() {
179.3223 +					deferred.done( arguments ).fail( arguments );
179.3224 +					return this;
179.3225 +				},
179.3226 +				then: function( /* fnDone, fnFail, fnProgress */ ) {
179.3227 +					var fns = arguments;
179.3228 +					return jQuery.Deferred(function( newDefer ) {
179.3229 +						jQuery.each( tuples, function( i, tuple ) {
179.3230 +							var fn = jQuery.isFunction( fns[ i ] ) && fns[ i ];
179.3231 +							// deferred[ done | fail | progress ] for forwarding actions to newDefer
179.3232 +							deferred[ tuple[1] ](function() {
179.3233 +								var returned = fn && fn.apply( this, arguments );
179.3234 +								if ( returned && jQuery.isFunction( returned.promise ) ) {
179.3235 +									returned.promise()
179.3236 +										.done( newDefer.resolve )
179.3237 +										.fail( newDefer.reject )
179.3238 +										.progress( newDefer.notify );
179.3239 +								} else {
179.3240 +									newDefer[ tuple[ 0 ] + "With" ]( this === promise ? newDefer.promise() : this, fn ? [ returned ] : arguments );
179.3241 +								}
179.3242 +							});
179.3243 +						});
179.3244 +						fns = null;
179.3245 +					}).promise();
179.3246 +				},
179.3247 +				// Get a promise for this deferred
179.3248 +				// If obj is provided, the promise aspect is added to the object
179.3249 +				promise: function( obj ) {
179.3250 +					return obj != null ? jQuery.extend( obj, promise ) : promise;
179.3251 +				}
179.3252 +			},
179.3253 +			deferred = {};
179.3254 +
179.3255 +		// Keep pipe for back-compat
179.3256 +		promise.pipe = promise.then;
179.3257 +
179.3258 +		// Add list-specific methods
179.3259 +		jQuery.each( tuples, function( i, tuple ) {
179.3260 +			var list = tuple[ 2 ],
179.3261 +				stateString = tuple[ 3 ];
179.3262 +
179.3263 +			// promise[ done | fail | progress ] = list.add
179.3264 +			promise[ tuple[1] ] = list.add;
179.3265 +
179.3266 +			// Handle state
179.3267 +			if ( stateString ) {
179.3268 +				list.add(function() {
179.3269 +					// state = [ resolved | rejected ]
179.3270 +					state = stateString;
179.3271 +
179.3272 +				// [ reject_list | resolve_list ].disable; progress_list.lock
179.3273 +				}, tuples[ i ^ 1 ][ 2 ].disable, tuples[ 2 ][ 2 ].lock );
179.3274 +			}
179.3275 +
179.3276 +			// deferred[ resolve | reject | notify ]
179.3277 +			deferred[ tuple[0] ] = function() {
179.3278 +				deferred[ tuple[0] + "With" ]( this === deferred ? promise : this, arguments );
179.3279 +				return this;
179.3280 +			};
179.3281 +			deferred[ tuple[0] + "With" ] = list.fireWith;
179.3282 +		});
179.3283 +
179.3284 +		// Make the deferred a promise
179.3285 +		promise.promise( deferred );
179.3286 +
179.3287 +		// Call given func if any
179.3288 +		if ( func ) {
179.3289 +			func.call( deferred, deferred );
179.3290 +		}
179.3291 +
179.3292 +		// All done!
179.3293 +		return deferred;
179.3294 +	},
179.3295 +
179.3296 +	// Deferred helper
179.3297 +	when: function( subordinate /* , ..., subordinateN */ ) {
179.3298 +		var i = 0,
179.3299 +			resolveValues = slice.call( arguments ),
179.3300 +			length = resolveValues.length,
179.3301 +
179.3302 +			// the count of uncompleted subordinates
179.3303 +			remaining = length !== 1 || ( subordinate && jQuery.isFunction( subordinate.promise ) ) ? length : 0,
179.3304 +
179.3305 +			// the master Deferred. If resolveValues consist of only a single Deferred, just use that.
179.3306 +			deferred = remaining === 1 ? subordinate : jQuery.Deferred(),
179.3307 +
179.3308 +			// Update function for both resolve and progress values
179.3309 +			updateFunc = function( i, contexts, values ) {
179.3310 +				return function( value ) {
179.3311 +					contexts[ i ] = this;
179.3312 +					values[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;
179.3313 +					if ( values === progressValues ) {
179.3314 +						deferred.notifyWith( contexts, values );
179.3315 +					} else if ( !( --remaining ) ) {
179.3316 +						deferred.resolveWith( contexts, values );
179.3317 +					}
179.3318 +				};
179.3319 +			},
179.3320 +
179.3321 +			progressValues, progressContexts, resolveContexts;
179.3322 +
179.3323 +		// add listeners to Deferred subordinates; treat others as resolved
179.3324 +		if ( length > 1 ) {
179.3325 +			progressValues = new Array( length );
179.3326 +			progressContexts = new Array( length );
179.3327 +			resolveContexts = new Array( length );
179.3328 +			for ( ; i < length; i++ ) {
179.3329 +				if ( resolveValues[ i ] && jQuery.isFunction( resolveValues[ i ].promise ) ) {
179.3330 +					resolveValues[ i ].promise()
179.3331 +						.done( updateFunc( i, resolveContexts, resolveValues ) )
179.3332 +						.fail( deferred.reject )
179.3333 +						.progress( updateFunc( i, progressContexts, progressValues ) );
179.3334 +				} else {
179.3335 +					--remaining;
179.3336 +				}
179.3337 +			}
179.3338 +		}
179.3339 +
179.3340 +		// if we're not waiting on anything, resolve the master
179.3341 +		if ( !remaining ) {
179.3342 +			deferred.resolveWith( resolveContexts, resolveValues );
179.3343 +		}
179.3344 +
179.3345 +		return deferred.promise();
179.3346 +	}
179.3347 +});
179.3348 +
179.3349 +
179.3350 +// The deferred used on DOM ready
179.3351 +var readyList;
179.3352 +
179.3353 +jQuery.fn.ready = function( fn ) {
179.3354 +	// Add the callback
179.3355 +	jQuery.ready.promise().done( fn );
179.3356 +
179.3357 +	return this;
179.3358 +};
179.3359 +
179.3360 +jQuery.extend({
179.3361 +	// Is the DOM ready to be used? Set to true once it occurs.
179.3362 +	isReady: false,
179.3363 +
179.3364 +	// A counter to track how many items to wait for before
179.3365 +	// the ready event fires. See #6781
179.3366 +	readyWait: 1,
179.3367 +
179.3368 +	// Hold (or release) the ready event
179.3369 +	holdReady: function( hold ) {
179.3370 +		if ( hold ) {
179.3371 +			jQuery.readyWait++;
179.3372 +		} else {
179.3373 +			jQuery.ready( true );
179.3374 +		}
179.3375 +	},
179.3376 +
179.3377 +	// Handle when the DOM is ready
179.3378 +	ready: function( wait ) {
179.3379 +
179.3380 +		// Abort if there are pending holds or we're already ready
179.3381 +		if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {
179.3382 +			return;
179.3383 +		}
179.3384 +
179.3385 +		// Remember that the DOM is ready
179.3386 +		jQuery.isReady = true;
179.3387 +
179.3388 +		// If a normal DOM Ready event fired, decrement, and wait if need be
179.3389 +		if ( wait !== true && --jQuery.readyWait > 0 ) {
179.3390 +			return;
179.3391 +		}
179.3392 +
179.3393 +		// If there are functions bound, to execute
179.3394 +		readyList.resolveWith( document, [ jQuery ] );
179.3395 +
179.3396 +		// Trigger any bound ready events
179.3397 +		if ( jQuery.fn.triggerHandler ) {
179.3398 +			jQuery( document ).triggerHandler( "ready" );
179.3399 +			jQuery( document ).off( "ready" );
179.3400 +		}
179.3401 +	}
179.3402 +});
179.3403 +
179.3404 +/**
179.3405 + * The ready event handler and self cleanup method
179.3406 + */
179.3407 +function completed() {
179.3408 +	document.removeEventListener( "DOMContentLoaded", completed, false );
179.3409 +	window.removeEventListener( "load", completed, false );
179.3410 +	jQuery.ready();
179.3411 +}
179.3412 +
179.3413 +jQuery.ready.promise = function( obj ) {
179.3414 +	if ( !readyList ) {
179.3415 +
179.3416 +		readyList = jQuery.Deferred();
179.3417 +
179.3418 +		// Catch cases where $(document).ready() is called after the browser event has already occurred.
179.3419 +		// we once tried to use readyState "interactive" here, but it caused issues like the one
179.3420 +		// discovered by ChrisS here: http://bugs.jquery.com/ticket/12282#comment:15
179.3421 +		if ( document.readyState === "complete" ) {
179.3422 +			// Handle it asynchronously to allow scripts the opportunity to delay ready
179.3423 +			setTimeout( jQuery.ready );
179.3424 +
179.3425 +		} else {
179.3426 +
179.3427 +			// Use the handy event callback
179.3428 +			document.addEventListener( "DOMContentLoaded", completed, false );
179.3429 +
179.3430 +			// A fallback to window.onload, that will always work
179.3431 +			window.addEventListener( "load", completed, false );
179.3432 +		}
179.3433 +	}
179.3434 +	return readyList.promise( obj );
179.3435 +};
179.3436 +
179.3437 +// Kick off the DOM ready check even if the user does not
179.3438 +jQuery.ready.promise();
179.3439 +
179.3440 +
179.3441 +
179.3442 +
179.3443 +// Multifunctional method to get and set values of a collection
179.3444 +// The value/s can optionally be executed if it's a function
179.3445 +var access = jQuery.access = function( elems, fn, key, value, chainable, emptyGet, raw ) {
179.3446 +	var i = 0,
179.3447 +		len = elems.length,
179.3448 +		bulk = key == null;
179.3449 +
179.3450 +	// Sets many values
179.3451 +	if ( jQuery.type( key ) === "object" ) {
179.3452 +		chainable = true;
179.3453 +		for ( i in key ) {
179.3454 +			jQuery.access( elems, fn, i, key[i], true, emptyGet, raw );
179.3455 +		}
179.3456 +
179.3457 +	// Sets one value
179.3458 +	} else if ( value !== undefined ) {
179.3459 +		chainable = true;
179.3460 +
179.3461 +		if ( !jQuery.isFunction( value ) ) {
179.3462 +			raw = true;
179.3463 +		}
179.3464 +
179.3465 +		if ( bulk ) {
179.3466 +			// Bulk operations run against the entire set
179.3467 +			if ( raw ) {
179.3468 +				fn.call( elems, value );
179.3469 +				fn = null;
179.3470 +
179.3471 +			// ...except when executing function values
179.3472 +			} else {
179.3473 +				bulk = fn;
179.3474 +				fn = function( elem, key, value ) {
179.3475 +					return bulk.call( jQuery( elem ), value );
179.3476 +				};
179.3477 +			}
179.3478 +		}
179.3479 +
179.3480 +		if ( fn ) {
179.3481 +			for ( ; i < len; i++ ) {
179.3482 +				fn( elems[i], key, raw ? value : value.call( elems[i], i, fn( elems[i], key ) ) );
179.3483 +			}
179.3484 +		}
179.3485 +	}
179.3486 +
179.3487 +	return chainable ?
179.3488 +		elems :
179.3489 +
179.3490 +		// Gets
179.3491 +		bulk ?
179.3492 +			fn.call( elems ) :
179.3493 +			len ? fn( elems[0], key ) : emptyGet;
179.3494 +};
179.3495 +
179.3496 +
179.3497 +/**
179.3498 + * Determines whether an object can have data
179.3499 + */
179.3500 +jQuery.acceptData = function( owner ) {
179.3501 +	// Accepts only:
179.3502 +	//  - Node
179.3503 +	//    - Node.ELEMENT_NODE
179.3504 +	//    - Node.DOCUMENT_NODE
179.3505 +	//  - Object
179.3506 +	//    - Any
179.3507 +	/* jshint -W018 */
179.3508 +	return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );
179.3509 +};
179.3510 +
179.3511 +
179.3512 +function Data() {
179.3513 +	// Support: Android < 4,
179.3514 +	// Old WebKit does not have Object.preventExtensions/freeze method,
179.3515 +	// return new empty object instead with no [[set]] accessor
179.3516 +	Object.defineProperty( this.cache = {}, 0, {
179.3517 +		get: function() {
179.3518 +			return {};
179.3519 +		}
179.3520 +	});
179.3521 +
179.3522 +	this.expando = jQuery.expando + Math.random();
179.3523 +}
179.3524 +
179.3525 +Data.uid = 1;
179.3526 +Data.accepts = jQuery.acceptData;
179.3527 +
179.3528 +Data.prototype = {
179.3529 +	key: function( owner ) {
179.3530 +		// We can accept data for non-element nodes in modern browsers,
179.3531 +		// but we should not, see #8335.
179.3532 +		// Always return the key for a frozen object.
179.3533 +		if ( !Data.accepts( owner ) ) {
179.3534 +			return 0;
179.3535 +		}
179.3536 +
179.3537 +		var descriptor = {},
179.3538 +			// Check if the owner object already has a cache key
179.3539 +			unlock = owner[ this.expando ];
179.3540 +
179.3541 +		// If not, create one
179.3542 +		if ( !unlock ) {
179.3543 +			unlock = Data.uid++;
179.3544 +
179.3545 +			// Secure it in a non-enumerable, non-writable property
179.3546 +			try {
179.3547 +				descriptor[ this.expando ] = { value: unlock };
179.3548 +				Object.defineProperties( owner, descriptor );
179.3549 +
179.3550 +			// Support: Android < 4
179.3551 +			// Fallback to a less secure definition
179.3552 +			} catch ( e ) {
179.3553 +				descriptor[ this.expando ] = unlock;
179.3554 +				jQuery.extend( owner, descriptor );
179.3555 +			}
179.3556 +		}
179.3557 +
179.3558 +		// Ensure the cache object
179.3559 +		if ( !this.cache[ unlock ] ) {
179.3560 +			this.cache[ unlock ] = {};
179.3561 +		}
179.3562 +
179.3563 +		return unlock;
179.3564 +	},
179.3565 +	set: function( owner, data, value ) {
179.3566 +		var prop,
179.3567 +			// There may be an unlock assigned to this node,
179.3568 +			// if there is no entry for this "owner", create one inline
179.3569 +			// and set the unlock as though an owner entry had always existed
179.3570 +			unlock = this.key( owner ),
179.3571 +			cache = this.cache[ unlock ];
179.3572 +
179.3573 +		// Handle: [ owner, key, value ] args
179.3574 +		if ( typeof data === "string" ) {
179.3575 +			cache[ data ] = value;
179.3576 +
179.3577 +		// Handle: [ owner, { properties } ] args
179.3578 +		} else {
179.3579 +			// Fresh assignments by object are shallow copied
179.3580 +			if ( jQuery.isEmptyObject( cache ) ) {
179.3581 +				jQuery.extend( this.cache[ unlock ], data );
179.3582 +			// Otherwise, copy the properties one-by-one to the cache object
179.3583 +			} else {
179.3584 +				for ( prop in data ) {
179.3585 +					cache[ prop ] = data[ prop ];
179.3586 +				}
179.3587 +			}
179.3588 +		}
179.3589 +		return cache;
179.3590 +	},
179.3591 +	get: function( owner, key ) {
179.3592 +		// Either a valid cache is found, or will be created.
179.3593 +		// New caches will be created and the unlock returned,
179.3594 +		// allowing direct access to the newly created
179.3595 +		// empty data object. A valid owner object must be provided.
179.3596 +		var cache = this.cache[ this.key( owner ) ];
179.3597 +
179.3598 +		return key === undefined ?
179.3599 +			cache : cache[ key ];
179.3600 +	},
179.3601 +	access: function( owner, key, value ) {
179.3602 +		var stored;
179.3603 +		// In cases where either:
179.3604 +		//
179.3605 +		//   1. No key was specified
179.3606 +		//   2. A string key was specified, but no value provided
179.3607 +		//
179.3608 +		// Take the "read" path and allow the get method to determine
179.3609 +		// which value to return, respectively either:
179.3610 +		//
179.3611 +		//   1. The entire cache object
179.3612 +		//   2. The data stored at the key
179.3613 +		//
179.3614 +		if ( key === undefined ||
179.3615 +				((key && typeof key === "string") && value === undefined) ) {
179.3616 +
179.3617 +			stored = this.get( owner, key );
179.3618 +
179.3619 +			return stored !== undefined ?
179.3620 +				stored : this.get( owner, jQuery.camelCase(key) );
179.3621 +		}
179.3622 +
179.3623 +		// [*]When the key is not a string, or both a key and value
179.3624 +		// are specified, set or extend (existing objects) with either:
179.3625 +		//
179.3626 +		//   1. An object of properties
179.3627 +		//   2. A key and value
179.3628 +		//
179.3629 +		this.set( owner, key, value );
179.3630 +
179.3631 +		// Since the "set" path can have two possible entry points
179.3632 +		// return the expected data based on which path was taken[*]
179.3633 +		return value !== undefined ? value : key;
179.3634 +	},
179.3635 +	remove: function( owner, key ) {
179.3636 +		var i, name, camel,
179.3637 +			unlock = this.key( owner ),
179.3638 +			cache = this.cache[ unlock ];
179.3639 +
179.3640 +		if ( key === undefined ) {
179.3641 +			this.cache[ unlock ] = {};
179.3642 +
179.3643 +		} else {
179.3644 +			// Support array or space separated string of keys
179.3645 +			if ( jQuery.isArray( key ) ) {
179.3646 +				// If "name" is an array of keys...
179.3647 +				// When data is initially created, via ("key", "val") signature,
179.3648 +				// keys will be converted to camelCase.
179.3649 +				// Since there is no way to tell _how_ a key was added, remove
179.3650 +				// both plain key and camelCase key. #12786
179.3651 +				// This will only penalize the array argument path.
179.3652 +				name = key.concat( key.map( jQuery.camelCase ) );
179.3653 +			} else {
179.3654 +				camel = jQuery.camelCase( key );
179.3655 +				// Try the string as a key before any manipulation
179.3656 +				if ( key in cache ) {
179.3657 +					name = [ key, camel ];
179.3658 +				} else {
179.3659 +					// If a key with the spaces exists, use it.
179.3660 +					// Otherwise, create an array by matching non-whitespace
179.3661 +					name = camel;
179.3662 +					name = name in cache ?
179.3663 +						[ name ] : ( name.match( rnotwhite ) || [] );
179.3664 +				}
179.3665 +			}
179.3666 +
179.3667 +			i = name.length;
179.3668 +			while ( i-- ) {
179.3669 +				delete cache[ name[ i ] ];
179.3670 +			}
179.3671 +		}
179.3672 +	},
179.3673 +	hasData: function( owner ) {
179.3674 +		return !jQuery.isEmptyObject(
179.3675 +			this.cache[ owner[ this.expando ] ] || {}
179.3676 +		);
179.3677 +	},
179.3678 +	discard: function( owner ) {
179.3679 +		if ( owner[ this.expando ] ) {
179.3680 +			delete this.cache[ owner[ this.expando ] ];
179.3681 +		}
179.3682 +	}
179.3683 +};
179.3684 +var data_priv = new Data();
179.3685 +
179.3686 +var data_user = new Data();
179.3687 +
179.3688 +
179.3689 +
179.3690 +/*
179.3691 +	Implementation Summary
179.3692 +
179.3693 +	1. Enforce API surface and semantic compatibility with 1.9.x branch
179.3694 +	2. Improve the module's maintainability by reducing the storage
179.3695 +		paths to a single mechanism.
179.3696 +	3. Use the same single mechanism to support "private" and "user" data.
179.3697 +	4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData)
179.3698 +	5. Avoid exposing implementation details on user objects (eg. expando properties)
179.3699 +	6. Provide a clear path for implementation upgrade to WeakMap in 2014
179.3700 +*/
179.3701 +var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,
179.3702 +	rmultiDash = /([A-Z])/g;
179.3703 +
179.3704 +function dataAttr( elem, key, data ) {
179.3705 +	var name;
179.3706 +
179.3707 +	// If nothing was found internally, try to fetch any
179.3708 +	// data from the HTML5 data-* attribute
179.3709 +	if ( data === undefined && elem.nodeType === 1 ) {
179.3710 +		name = "data-" + key.replace( rmultiDash, "-$1" ).toLowerCase();
179.3711 +		data = elem.getAttribute( name );
179.3712 +
179.3713 +		if ( typeof data === "string" ) {
179.3714 +			try {
179.3715 +				data = data === "true" ? true :
179.3716 +					data === "false" ? false :
179.3717 +					data === "null" ? null :
179.3718 +					// Only convert to a number if it doesn't change the string
179.3719 +					+data + "" === data ? +data :
179.3720 +					rbrace.test( data ) ? jQuery.parseJSON( data ) :
179.3721 +					data;
179.3722 +			} catch( e ) {}
179.3723 +
179.3724 +			// Make sure we set the data so it isn't changed later
179.3725 +			data_user.set( elem, key, data );
179.3726 +		} else {
179.3727 +			data = undefined;
179.3728 +		}
179.3729 +	}
179.3730 +	return data;
179.3731 +}
179.3732 +
179.3733 +jQuery.extend({
179.3734 +	hasData: function( elem ) {
179.3735 +		return data_user.hasData( elem ) || data_priv.hasData( elem );
179.3736 +	},
179.3737 +
179.3738 +	data: function( elem, name, data ) {
179.3739 +		return data_user.access( elem, name, data );
179.3740 +	},
179.3741 +
179.3742 +	removeData: function( elem, name ) {
179.3743 +		data_user.remove( elem, name );
179.3744 +	},
179.3745 +
179.3746 +	// TODO: Now that all calls to _data and _removeData have been replaced
179.3747 +	// with direct calls to data_priv methods, these can be deprecated.
179.3748 +	_data: function( elem, name, data ) {
179.3749 +		return data_priv.access( elem, name, data );
179.3750 +	},
179.3751 +
179.3752 +	_removeData: function( elem, name ) {
179.3753 +		data_priv.remove( elem, name );
179.3754 +	}
179.3755 +});
179.3756 +
179.3757 +jQuery.fn.extend({
179.3758 +	data: function( key, value ) {
179.3759 +		var i, name, data,
179.3760 +			elem = this[ 0 ],
179.3761 +			attrs = elem && elem.attributes;
179.3762 +
179.3763 +		// Gets all values
179.3764 +		if ( key === undefined ) {
179.3765 +			if ( this.length ) {
179.3766 +				data = data_user.get( elem );
179.3767 +
179.3768 +				if ( elem.nodeType === 1 && !data_priv.get( elem, "hasDataAttrs" ) ) {
179.3769 +					i = attrs.length;
179.3770 +					while ( i-- ) {
179.3771 +
179.3772 +						// Support: IE11+
179.3773 +						// The attrs elements can be null (#14894)
179.3774 +						if ( attrs[ i ] ) {
179.3775 +							name = attrs[ i ].name;
179.3776 +							if ( name.indexOf( "data-" ) === 0 ) {
179.3777 +								name = jQuery.camelCase( name.slice(5) );
179.3778 +								dataAttr( elem, name, data[ name ] );
179.3779 +							}
179.3780 +						}
179.3781 +					}
179.3782 +					data_priv.set( elem, "hasDataAttrs", true );
179.3783 +				}
179.3784 +			}
179.3785 +
179.3786 +			return data;
179.3787 +		}
179.3788 +
179.3789 +		// Sets multiple values
179.3790 +		if ( typeof key === "object" ) {
179.3791 +			return this.each(function() {
179.3792 +				data_user.set( this, key );
179.3793 +			});
179.3794 +		}
179.3795 +
179.3796 +		return access( this, function( value ) {
179.3797 +			var data,
179.3798 +				camelKey = jQuery.camelCase( key );
179.3799 +
179.3800 +			// The calling jQuery object (element matches) is not empty
179.3801 +			// (and therefore has an element appears at this[ 0 ]) and the
179.3802 +			// `value` parameter was not undefined. An empty jQuery object
179.3803 +			// will result in `undefined` for elem = this[ 0 ] which will
179.3804 +			// throw an exception if an attempt to read a data cache is made.
179.3805 +			if ( elem && value === undefined ) {
179.3806 +				// Attempt to get data from the cache
179.3807 +				// with the key as-is
179.3808 +				data = data_user.get( elem, key );
179.3809 +				if ( data !== undefined ) {
179.3810 +					return data;
179.3811 +				}
179.3812 +
179.3813 +				// Attempt to get data from the cache
179.3814 +				// with the key camelized
179.3815 +				data = data_user.get( elem, camelKey );
179.3816 +				if ( data !== undefined ) {
179.3817 +					return data;
179.3818 +				}
179.3819 +
179.3820 +				// Attempt to "discover" the data in
179.3821 +				// HTML5 custom data-* attrs
179.3822 +				data = dataAttr( elem, camelKey, undefined );
179.3823 +				if ( data !== undefined ) {
179.3824 +					return data;
179.3825 +				}
179.3826 +
179.3827 +				// We tried really hard, but the data doesn't exist.
179.3828 +				return;
179.3829 +			}
179.3830 +
179.3831 +			// Set the data...
179.3832 +			this.each(function() {
179.3833 +				// First, attempt to store a copy or reference of any
179.3834 +				// data that might've been store with a camelCased key.
179.3835 +				var data = data_user.get( this, camelKey );
179.3836 +
179.3837 +				// For HTML5 data-* attribute interop, we have to
179.3838 +				// store property names with dashes in a camelCase form.
179.3839 +				// This might not apply to all properties...*
179.3840 +				data_user.set( this, camelKey, value );
179.3841 +
179.3842 +				// *... In the case of properties that might _actually_
179.3843 +				// have dashes, we need to also store a copy of that
179.3844 +				// unchanged property.
179.3845 +				if ( key.indexOf("-") !== -1 && data !== undefined ) {
179.3846 +					data_user.set( this, key, value );
179.3847 +				}
179.3848 +			});
179.3849 +		}, null, value, arguments.length > 1, null, true );
179.3850 +	},
179.3851 +
179.3852 +	removeData: function( key ) {
179.3853 +		return this.each(function() {
179.3854 +			data_user.remove( this, key );
179.3855 +		});
179.3856 +	}
179.3857 +});
179.3858 +
179.3859 +
179.3860 +jQuery.extend({
179.3861 +	queue: function( elem, type, data ) {
179.3862 +		var queue;
179.3863 +
179.3864 +		if ( elem ) {
179.3865 +			type = ( type || "fx" ) + "queue";
179.3866 +			queue = data_priv.get( elem, type );
179.3867 +
179.3868 +			// Speed up dequeue by getting out quickly if this is just a lookup
179.3869 +			if ( data ) {
179.3870 +				if ( !queue || jQuery.isArray( data ) ) {
179.3871 +					queue = data_priv.access( elem, type, jQuery.makeArray(data) );
179.3872 +				} else {
179.3873 +					queue.push( data );
179.3874 +				}
179.3875 +			}
179.3876 +			return queue || [];
179.3877 +		}
179.3878 +	},
179.3879 +
179.3880 +	dequeue: function( elem, type ) {
179.3881 +		type = type || "fx";
179.3882 +
179.3883 +		var queue = jQuery.queue( elem, type ),
179.3884 +			startLength = queue.length,
179.3885 +			fn = queue.shift(),
179.3886 +			hooks = jQuery._queueHooks( elem, type ),
179.3887 +			next = function() {
179.3888 +				jQuery.dequeue( elem, type );
179.3889 +			};
179.3890 +
179.3891 +		// If the fx queue is dequeued, always remove the progress sentinel
179.3892 +		if ( fn === "inprogress" ) {
179.3893 +			fn = queue.shift();
179.3894 +			startLength--;
179.3895 +		}
179.3896 +
179.3897 +		if ( fn ) {
179.3898 +
179.3899 +			// Add a progress sentinel to prevent the fx queue from being
179.3900 +			// automatically dequeued
179.3901 +			if ( type === "fx" ) {
179.3902 +				queue.unshift( "inprogress" );
179.3903 +			}
179.3904 +
179.3905 +			// clear up the last queue stop function
179.3906 +			delete hooks.stop;
179.3907 +			fn.call( elem, next, hooks );
179.3908 +		}
179.3909 +
179.3910 +		if ( !startLength && hooks ) {
179.3911 +			hooks.empty.fire();
179.3912 +		}
179.3913 +	},
179.3914 +
179.3915 +	// not intended for public consumption - generates a queueHooks object, or returns the current one
179.3916 +	_queueHooks: function( elem, type ) {
179.3917 +		var key = type + "queueHooks";
179.3918 +		return data_priv.get( elem, key ) || data_priv.access( elem, key, {
179.3919 +			empty: jQuery.Callbacks("once memory").add(function() {
179.3920 +				data_priv.remove( elem, [ type + "queue", key ] );
179.3921 +			})
179.3922 +		});
179.3923 +	}
179.3924 +});
179.3925 +
179.3926 +jQuery.fn.extend({
179.3927 +	queue: function( type, data ) {
179.3928 +		var setter = 2;
179.3929 +
179.3930 +		if ( typeof type !== "string" ) {
179.3931 +			data = type;
179.3932 +			type = "fx";
179.3933 +			setter--;
179.3934 +		}
179.3935 +
179.3936 +		if ( arguments.length < setter ) {
179.3937 +			return jQuery.queue( this[0], type );
179.3938 +		}
179.3939 +
179.3940 +		return data === undefined ?
179.3941 +			this :
179.3942 +			this.each(function() {
179.3943 +				var queue = jQuery.queue( this, type, data );
179.3944 +
179.3945 +				// ensure a hooks for this queue
179.3946 +				jQuery._queueHooks( this, type );
179.3947 +
179.3948 +				if ( type === "fx" && queue[0] !== "inprogress" ) {
179.3949 +					jQuery.dequeue( this, type );
179.3950 +				}
179.3951 +			});
179.3952 +	},
179.3953 +	dequeue: function( type ) {
179.3954 +		return this.each(function() {
179.3955 +			jQuery.dequeue( this, type );
179.3956 +		});
179.3957 +	},
179.3958 +	clearQueue: function( type ) {
179.3959 +		return this.queue( type || "fx", [] );
179.3960 +	},
179.3961 +	// Get a promise resolved when queues of a certain type
179.3962 +	// are emptied (fx is the type by default)
179.3963 +	promise: function( type, obj ) {
179.3964 +		var tmp,
179.3965 +			count = 1,
179.3966 +			defer = jQuery.Deferred(),
179.3967 +			elements = this,
179.3968 +			i = this.length,
179.3969 +			resolve = function() {
179.3970 +				if ( !( --count ) ) {
179.3971 +					defer.resolveWith( elements, [ elements ] );
179.3972 +				}
179.3973 +			};
179.3974 +
179.3975 +		if ( typeof type !== "string" ) {
179.3976 +			obj = type;
179.3977 +			type = undefined;
179.3978 +		}
179.3979 +		type = type || "fx";
179.3980 +
179.3981 +		while ( i-- ) {
179.3982 +			tmp = data_priv.get( elements[ i ], type + "queueHooks" );
179.3983 +			if ( tmp && tmp.empty ) {
179.3984 +				count++;
179.3985 +				tmp.empty.add( resolve );
179.3986 +			}
179.3987 +		}
179.3988 +		resolve();
179.3989 +		return defer.promise( obj );
179.3990 +	}
179.3991 +});
179.3992 +var pnum = (/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/).source;
179.3993 +
179.3994 +var cssExpand = [ "Top", "Right", "Bottom", "Left" ];
179.3995 +
179.3996 +var isHidden = function( elem, el ) {
179.3997 +		// isHidden might be called from jQuery#filter function;
179.3998 +		// in that case, element will be second argument
179.3999 +		elem = el || elem;
179.4000 +		return jQuery.css( elem, "display" ) === "none" || !jQuery.contains( elem.ownerDocument, elem );
179.4001 +	};
179.4002 +
179.4003 +var rcheckableType = (/^(?:checkbox|radio)$/i);
179.4004 +
179.4005 +
179.4006 +
179.4007 +(function() {
179.4008 +	var fragment = document.createDocumentFragment(),
179.4009 +		div = fragment.appendChild( document.createElement( "div" ) ),
179.4010 +		input = document.createElement( "input" );
179.4011 +
179.4012 +	// #11217 - WebKit loses check when the name is after the checked attribute
179.4013 +	// Support: Windows Web Apps (WWA)
179.4014 +	// `name` and `type` need .setAttribute for WWA
179.4015 +	input.setAttribute( "type", "radio" );
179.4016 +	input.setAttribute( "checked", "checked" );
179.4017 +	input.setAttribute( "name", "t" );
179.4018 +
179.4019 +	div.appendChild( input );
179.4020 +
179.4021 +	// Support: Safari 5.1, iOS 5.1, Android 4.x, Android 2.3
179.4022 +	// old WebKit doesn't clone checked state correctly in fragments
179.4023 +	support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;
179.4024 +
179.4025 +	// Make sure textarea (and checkbox) defaultValue is properly cloned
179.4026 +	// Support: IE9-IE11+
179.4027 +	div.innerHTML = "<textarea>x</textarea>";
179.4028 +	support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;
179.4029 +})();
179.4030 +var strundefined = typeof undefined;
179.4031 +
179.4032 +
179.4033 +
179.4034 +support.focusinBubbles = "onfocusin" in window;
179.4035 +
179.4036 +
179.4037 +var
179.4038 +	rkeyEvent = /^key/,
179.4039 +	rmouseEvent = /^(?:mouse|pointer|contextmenu)|click/,
179.4040 +	rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,
179.4041 +	rtypenamespace = /^([^.]*)(?:\.(.+)|)$/;
179.4042 +
179.4043 +function returnTrue() {
179.4044 +	return true;
179.4045 +}
179.4046 +
179.4047 +function returnFalse() {
179.4048 +	return false;
179.4049 +}
179.4050 +
179.4051 +function safeActiveElement() {
179.4052 +	try {
179.4053 +		return document.activeElement;
179.4054 +	} catch ( err ) { }
179.4055 +}
179.4056 +
179.4057 +/*
179.4058 + * Helper functions for managing events -- not part of the public interface.
179.4059 + * Props to Dean Edwards' addEvent library for many of the ideas.
179.4060 + */
179.4061 +jQuery.event = {
179.4062 +
179.4063 +	global: {},
179.4064 +
179.4065 +	add: function( elem, types, handler, data, selector ) {
179.4066 +
179.4067 +		var handleObjIn, eventHandle, tmp,
179.4068 +			events, t, handleObj,
179.4069 +			special, handlers, type, namespaces, origType,
179.4070 +			elemData = data_priv.get( elem );
179.4071 +
179.4072 +		// Don't attach events to noData or text/comment nodes (but allow plain objects)
179.4073 +		if ( !elemData ) {
179.4074 +			return;
179.4075 +		}
179.4076 +
179.4077 +		// Caller can pass in an object of custom data in lieu of the handler
179.4078 +		if ( handler.handler ) {
179.4079 +			handleObjIn = handler;
179.4080 +			handler = handleObjIn.handler;
179.4081 +			selector = handleObjIn.selector;
179.4082 +		}
179.4083 +
179.4084 +		// Make sure that the handler has a unique ID, used to find/remove it later
179.4085 +		if ( !handler.guid ) {
179.4086 +			handler.guid = jQuery.guid++;
179.4087 +		}
179.4088 +
179.4089 +		// Init the element's event structure and main handler, if this is the first
179.4090 +		if ( !(events = elemData.events) ) {
179.4091 +			events = elemData.events = {};
179.4092 +		}
179.4093 +		if ( !(eventHandle = elemData.handle) ) {
179.4094 +			eventHandle = elemData.handle = function( e ) {
179.4095 +				// Discard the second event of a jQuery.event.trigger() and
179.4096 +				// when an event is called after a page has unloaded
179.4097 +				return typeof jQuery !== strundefined && jQuery.event.triggered !== e.type ?
179.4098 +					jQuery.event.dispatch.apply( elem, arguments ) : undefined;
179.4099 +			};
179.4100 +		}
179.4101 +
179.4102 +		// Handle multiple events separated by a space
179.4103 +		types = ( types || "" ).match( rnotwhite ) || [ "" ];
179.4104 +		t = types.length;
179.4105 +		while ( t-- ) {
179.4106 +			tmp = rtypenamespace.exec( types[t] ) || [];
179.4107 +			type = origType = tmp[1];
179.4108 +			namespaces = ( tmp[2] || "" ).split( "." ).sort();
179.4109 +
179.4110 +			// There *must* be a type, no attaching namespace-only handlers
179.4111 +			if ( !type ) {
179.4112 +				continue;
179.4113 +			}
179.4114 +
179.4115 +			// If event changes its type, use the special event handlers for the changed type
179.4116 +			special = jQuery.event.special[ type ] || {};
179.4117 +
179.4118 +			// If selector defined, determine special event api type, otherwise given type
179.4119 +			type = ( selector ? special.delegateType : special.bindType ) || type;
179.4120 +
179.4121 +			// Update special based on newly reset type
179.4122 +			special = jQuery.event.special[ type ] || {};
179.4123 +
179.4124 +			// handleObj is passed to all event handlers
179.4125 +			handleObj = jQuery.extend({
179.4126 +				type: type,
179.4127 +				origType: origType,
179.4128 +				data: data,
179.4129 +				handler: handler,
179.4130 +				guid: handler.guid,
179.4131 +				selector: selector,
179.4132 +				needsContext: selector && jQuery.expr.match.needsContext.test( selector ),
179.4133 +				namespace: namespaces.join(".")
179.4134 +			}, handleObjIn );
179.4135 +
179.4136 +			// Init the event handler queue if we're the first
179.4137 +			if ( !(handlers = events[ type ]) ) {
179.4138 +				handlers = events[ type ] = [];
179.4139 +				handlers.delegateCount = 0;
179.4140 +
179.4141 +				// Only use addEventListener if the special events handler returns false
179.4142 +				if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) {
179.4143 +					if ( elem.addEventListener ) {
179.4144 +						elem.addEventListener( type, eventHandle, false );
179.4145 +					}
179.4146 +				}
179.4147 +			}
179.4148 +
179.4149 +			if ( special.add ) {
179.4150 +				special.add.call( elem, handleObj );
179.4151 +
179.4152 +				if ( !handleObj.handler.guid ) {
179.4153 +					handleObj.handler.guid = handler.guid;
179.4154 +				}
179.4155 +			}
179.4156 +
179.4157 +			// Add to the element's handler list, delegates in front
179.4158 +			if ( selector ) {
179.4159 +				handlers.splice( handlers.delegateCount++, 0, handleObj );
179.4160 +			} else {
179.4161 +				handlers.push( handleObj );
179.4162 +			}
179.4163 +
179.4164 +			// Keep track of which events have ever been used, for event optimization
179.4165 +			jQuery.event.global[ type ] = true;
179.4166 +		}
179.4167 +
179.4168 +	},
179.4169 +
179.4170 +	// Detach an event or set of events from an element
179.4171 +	remove: function( elem, types, handler, selector, mappedTypes ) {
179.4172 +
179.4173 +		var j, origCount, tmp,
179.4174 +			events, t, handleObj,
179.4175 +			special, handlers, type, namespaces, origType,
179.4176 +			elemData = data_priv.hasData( elem ) && data_priv.get( elem );
179.4177 +
179.4178 +		if ( !elemData || !(events = elemData.events) ) {
179.4179 +			return;
179.4180 +		}
179.4181 +
179.4182 +		// Once for each type.namespace in types; type may be omitted
179.4183 +		types = ( types || "" ).match( rnotwhite ) || [ "" ];
179.4184 +		t = types.length;
179.4185 +		while ( t-- ) {
179.4186 +			tmp = rtypenamespace.exec( types[t] ) || [];
179.4187 +			type = origType = tmp[1];
179.4188 +			namespaces = ( tmp[2] || "" ).split( "." ).sort();
179.4189 +
179.4190 +			// Unbind all events (on this namespace, if provided) for the element
179.4191 +			if ( !type ) {
179.4192 +				for ( type in events ) {
179.4193 +					jQuery.event.remove( elem, type + types[ t ], handler, selector, true );
179.4194 +				}
179.4195 +				continue;
179.4196 +			}
179.4197 +
179.4198 +			special = jQuery.event.special[ type ] || {};
179.4199 +			type = ( selector ? special.delegateType : special.bindType ) || type;
179.4200 +			handlers = events[ type ] || [];
179.4201 +			tmp = tmp[2] && new RegExp( "(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)" );
179.4202 +
179.4203 +			// Remove matching events
179.4204 +			origCount = j = handlers.length;
179.4205 +			while ( j-- ) {
179.4206 +				handleObj = handlers[ j ];
179.4207 +
179.4208 +				if ( ( mappedTypes || origType === handleObj.origType ) &&
179.4209 +					( !handler || handler.guid === handleObj.guid ) &&
179.4210 +					( !tmp || tmp.test( handleObj.namespace ) ) &&
179.4211 +					( !selector || selector === handleObj.selector || selector === "**" && handleObj.selector ) ) {
179.4212 +					handlers.splice( j, 1 );
179.4213 +
179.4214 +					if ( handleObj.selector ) {
179.4215 +						handlers.delegateCount--;
179.4216 +					}
179.4217 +					if ( special.remove ) {
179.4218 +						special.remove.call( elem, handleObj );
179.4219 +					}
179.4220 +				}
179.4221 +			}
179.4222 +
179.4223 +			// Remove generic event handler if we removed something and no more handlers exist
179.4224 +			// (avoids potential for endless recursion during removal of special event handlers)
179.4225 +			if ( origCount && !handlers.length ) {
179.4226 +				if ( !special.teardown || special.teardown.call( elem, namespaces, elemData.handle ) === false ) {
179.4227 +					jQuery.removeEvent( elem, type, elemData.handle );
179.4228 +				}
179.4229 +
179.4230 +				delete events[ type ];
179.4231 +			}
179.4232 +		}
179.4233 +
179.4234 +		// Remove the expando if it's no longer used
179.4235 +		if ( jQuery.isEmptyObject( events ) ) {
179.4236 +			delete elemData.handle;
179.4237 +			data_priv.remove( elem, "events" );
179.4238 +		}
179.4239 +	},
179.4240 +
179.4241 +	trigger: function( event, data, elem, onlyHandlers ) {
179.4242 +
179.4243 +		var i, cur, tmp, bubbleType, ontype, handle, special,
179.4244 +			eventPath = [ elem || document ],
179.4245 +			type = hasOwn.call( event, "type" ) ? event.type : event,
179.4246 +			namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split(".") : [];
179.4247 +
179.4248 +		cur = tmp = elem = elem || document;
179.4249 +
179.4250 +		// Don't do events on text and comment nodes
179.4251 +		if ( elem.nodeType === 3 || elem.nodeType === 8 ) {
179.4252 +			return;
179.4253 +		}
179.4254 +
179.4255 +		// focus/blur morphs to focusin/out; ensure we're not firing them right now
179.4256 +		if ( rfocusMorph.test( type + jQuery.event.triggered ) ) {
179.4257 +			return;
179.4258 +		}
179.4259 +
179.4260 +		if ( type.indexOf(".") >= 0 ) {
179.4261 +			// Namespaced trigger; create a regexp to match event type in handle()
179.4262 +			namespaces = type.split(".");
179.4263 +			type = namespaces.shift();
179.4264 +			namespaces.sort();
179.4265 +		}
179.4266 +		ontype = type.indexOf(":") < 0 && "on" + type;
179.4267 +
179.4268 +		// Caller can pass in a jQuery.Event object, Object, or just an event type string
179.4269 +		event = event[ jQuery.expando ] ?
179.4270 +			event :
179.4271 +			new jQuery.Event( type, typeof event === "object" && event );
179.4272 +
179.4273 +		// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)
179.4274 +		event.isTrigger = onlyHandlers ? 2 : 3;
179.4275 +		event.namespace = namespaces.join(".");
179.4276 +		event.namespace_re = event.namespace ?
179.4277 +			new RegExp( "(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)" ) :
179.4278 +			null;
179.4279 +
179.4280 +		// Clean up the event in case it is being reused
179.4281 +		event.result = undefined;
179.4282 +		if ( !event.target ) {
179.4283 +			event.target = elem;
179.4284 +		}
179.4285 +
179.4286 +		// Clone any incoming data and prepend the event, creating the handler arg list
179.4287 +		data = data == null ?
179.4288 +			[ event ] :
179.4289 +			jQuery.makeArray( data, [ event ] );
179.4290 +
179.4291 +		// Allow special events to draw outside the lines
179.4292 +		special = jQuery.event.special[ type ] || {};
179.4293 +		if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {
179.4294 +			return;
179.4295 +		}
179.4296 +
179.4297 +		// Determine event propagation path in advance, per W3C events spec (#9951)
179.4298 +		// Bubble up to document, then to window; watch for a global ownerDocument var (#9724)
179.4299 +		if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) {
179.4300 +
179.4301 +			bubbleType = special.delegateType || type;
179.4302 +			if ( !rfocusMorph.test( bubbleType + type ) ) {
179.4303 +				cur = cur.parentNode;
179.4304 +			}
179.4305 +			for ( ; cur; cur = cur.parentNode ) {
179.4306 +				eventPath.push( cur );
179.4307 +				tmp = cur;
179.4308 +			}
179.4309 +
179.4310 +			// Only add window if we got to document (e.g., not plain obj or detached DOM)
179.4311 +			if ( tmp === (elem.ownerDocument || document) ) {
179.4312 +				eventPath.push( tmp.defaultView || tmp.parentWindow || window );
179.4313 +			}
179.4314 +		}
179.4315 +
179.4316 +		// Fire handlers on the event path
179.4317 +		i = 0;
179.4318 +		while ( (cur = eventPath[i++]) && !event.isPropagationStopped() ) {
179.4319 +
179.4320 +			event.type = i > 1 ?
179.4321 +				bubbleType :
179.4322 +				special.bindType || type;
179.4323 +
179.4324 +			// jQuery handler
179.4325 +			handle = ( data_priv.get( cur, "events" ) || {} )[ event.type ] && data_priv.get( cur, "handle" );
179.4326 +			if ( handle ) {
179.4327 +				handle.apply( cur, data );
179.4328 +			}
179.4329 +
179.4330 +			// Native handler
179.4331 +			handle = ontype && cur[ ontype ];
179.4332 +			if ( handle && handle.apply && jQuery.acceptData( cur ) ) {
179.4333 +				event.result = handle.apply( cur, data );
179.4334 +				if ( event.result === false ) {
179.4335 +					event.preventDefault();
179.4336 +				}
179.4337 +			}
179.4338 +		}
179.4339 +		event.type = type;
179.4340 +
179.4341 +		// If nobody prevented the default action, do it now
179.4342 +		if ( !onlyHandlers && !event.isDefaultPrevented() ) {
179.4343 +
179.4344 +			if ( (!special._default || special._default.apply( eventPath.pop(), data ) === false) &&
179.4345 +				jQuery.acceptData( elem ) ) {
179.4346 +
179.4347 +				// Call a native DOM method on the target with the same name name as the event.
179.4348 +				// Don't do default actions on window, that's where global variables be (#6170)
179.4349 +				if ( ontype && jQuery.isFunction( elem[ type ] ) && !jQuery.isWindow( elem ) ) {
179.4350 +
179.4351 +					// Don't re-trigger an onFOO event when we call its FOO() method
179.4352 +					tmp = elem[ ontype ];
179.4353 +
179.4354 +					if ( tmp ) {
179.4355 +						elem[ ontype ] = null;
179.4356 +					}
179.4357 +
179.4358 +					// Prevent re-triggering of the same event, since we already bubbled it above
179.4359 +					jQuery.event.triggered = type;
179.4360 +					elem[ type ]();
179.4361 +					jQuery.event.triggered = undefined;
179.4362 +
179.4363 +					if ( tmp ) {
179.4364 +						elem[ ontype ] = tmp;
179.4365 +					}
179.4366 +				}
179.4367 +			}
179.4368 +		}
179.4369 +
179.4370 +		return event.result;
179.4371 +	},
179.4372 +
179.4373 +	dispatch: function( event ) {
179.4374 +
179.4375 +		// Make a writable jQuery.Event from the native event object
179.4376 +		event = jQuery.event.fix( event );
179.4377 +
179.4378 +		var i, j, ret, matched, handleObj,
179.4379 +			handlerQueue = [],
179.4380 +			args = slice.call( arguments ),
179.4381 +			handlers = ( data_priv.get( this, "events" ) || {} )[ event.type ] || [],
179.4382 +			special = jQuery.event.special[ event.type ] || {};
179.4383 +
179.4384 +		// Use the fix-ed jQuery.Event rather than the (read-only) native event
179.4385 +		args[0] = event;
179.4386 +		event.delegateTarget = this;
179.4387 +
179.4388 +		// Call the preDispatch hook for the mapped type, and let it bail if desired
179.4389 +		if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {
179.4390 +			return;
179.4391 +		}
179.4392 +
179.4393 +		// Determine handlers
179.4394 +		handlerQueue = jQuery.event.handlers.call( this, event, handlers );
179.4395 +
179.4396 +		// Run delegates first; they may want to stop propagation beneath us
179.4397 +		i = 0;
179.4398 +		while ( (matched = handlerQueue[ i++ ]) && !event.isPropagationStopped() ) {
179.4399 +			event.currentTarget = matched.elem;
179.4400 +
179.4401 +			j = 0;
179.4402 +			while ( (handleObj = matched.handlers[ j++ ]) && !event.isImmediatePropagationStopped() ) {
179.4403 +
179.4404 +				// Triggered event must either 1) have no namespace, or
179.4405 +				// 2) have namespace(s) a subset or equal to those in the bound event (both can have no namespace).
179.4406 +				if ( !event.namespace_re || event.namespace_re.test( handleObj.namespace ) ) {
179.4407 +
179.4408 +					event.handleObj = handleObj;
179.4409 +					event.data = handleObj.data;
179.4410 +
179.4411 +					ret = ( (jQuery.event.special[ handleObj.origType ] || {}).handle || handleObj.handler )
179.4412 +							.apply( matched.elem, args );
179.4413 +
179.4414 +					if ( ret !== undefined ) {
179.4415 +						if ( (event.result = ret) === false ) {
179.4416 +							event.preventDefault();
179.4417 +							event.stopPropagation();
179.4418 +						}
179.4419 +					}
179.4420 +				}
179.4421 +			}
179.4422 +		}
179.4423 +
179.4424 +		// Call the postDispatch hook for the mapped type
179.4425 +		if ( special.postDispatch ) {
179.4426 +			special.postDispatch.call( this, event );
179.4427 +		}
179.4428 +
179.4429 +		return event.result;
179.4430 +	},
179.4431 +
179.4432 +	handlers: function( event, handlers ) {
179.4433 +		var i, matches, sel, handleObj,
179.4434 +			handlerQueue = [],
179.4435 +			delegateCount = handlers.delegateCount,
179.4436 +			cur = event.target;
179.4437 +
179.4438 +		// Find delegate handlers
179.4439 +		// Black-hole SVG <use> instance trees (#13180)
179.4440 +		// Avoid non-left-click bubbling in Firefox (#3861)
179.4441 +		if ( delegateCount && cur.nodeType && (!event.button || event.type !== "click") ) {
179.4442 +
179.4443 +			for ( ; cur !== this; cur = cur.parentNode || this ) {
179.4444 +
179.4445 +				// Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)
179.4446 +				if ( cur.disabled !== true || event.type !== "click" ) {
179.4447 +					matches = [];
179.4448 +					for ( i = 0; i < delegateCount; i++ ) {
179.4449 +						handleObj = handlers[ i ];
179.4450 +
179.4451 +						// Don't conflict with Object.prototype properties (#13203)
179.4452 +						sel = handleObj.selector + " ";
179.4453 +
179.4454 +						if ( matches[ sel ] === undefined ) {
179.4455 +							matches[ sel ] = handleObj.needsContext ?
179.4456 +								jQuery( sel, this ).index( cur ) >= 0 :
179.4457 +								jQuery.find( sel, this, null, [ cur ] ).length;
179.4458 +						}
179.4459 +						if ( matches[ sel ] ) {
179.4460 +							matches.push( handleObj );
179.4461 +						}
179.4462 +					}
179.4463 +					if ( matches.length ) {
179.4464 +						handlerQueue.push({ elem: cur, handlers: matches });
179.4465 +					}
179.4466 +				}
179.4467 +			}
179.4468 +		}
179.4469 +
179.4470 +		// Add the remaining (directly-bound) handlers
179.4471 +		if ( delegateCount < handlers.length ) {
179.4472 +			handlerQueue.push({ elem: this, handlers: handlers.slice( delegateCount ) });
179.4473 +		}
179.4474 +
179.4475 +		return handlerQueue;
179.4476 +	},
179.4477 +
179.4478 +	// Includes some event props shared by KeyEvent and MouseEvent
179.4479 +	props: "altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),
179.4480 +
179.4481 +	fixHooks: {},
179.4482 +
179.4483 +	keyHooks: {
179.4484 +		props: "char charCode key keyCode".split(" "),
179.4485 +		filter: function( event, original ) {
179.4486 +
179.4487 +			// Add which for key events
179.4488 +			if ( event.which == null ) {
179.4489 +				event.which = original.charCode != null ? original.charCode : original.keyCode;
179.4490 +			}
179.4491 +
179.4492 +			return event;
179.4493 +		}
179.4494 +	},
179.4495 +
179.4496 +	mouseHooks: {
179.4497 +		props: "button buttons clientX clientY offsetX offsetY pageX pageY screenX screenY toElement".split(" "),
179.4498 +		filter: function( event, original ) {
179.4499 +			var eventDoc, doc, body,
179.4500 +				button = original.button;
179.4501 +
179.4502 +			// Calculate pageX/Y if missing and clientX/Y available
179.4503 +			if ( event.pageX == null && original.clientX != null ) {
179.4504 +				eventDoc = event.target.ownerDocument || document;
179.4505 +				doc = eventDoc.documentElement;
179.4506 +				body = eventDoc.body;
179.4507 +
179.4508 +				event.pageX = original.clientX + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - ( doc && doc.clientLeft || body && body.clientLeft || 0 );
179.4509 +				event.pageY = original.clientY + ( doc && doc.scrollTop  || body && body.scrollTop  || 0 ) - ( doc && doc.clientTop  || body && body.clientTop  || 0 );
179.4510 +			}
179.4511 +
179.4512 +			// Add which for click: 1 === left; 2 === middle; 3 === right
179.4513 +			// Note: button is not normalized, so don't use it
179.4514 +			if ( !event.which && button !== undefined ) {
179.4515 +				event.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) );
179.4516 +			}
179.4517 +
179.4518 +			return event;
179.4519 +		}
179.4520 +	},
179.4521 +
179.4522 +	fix: function( event ) {
179.4523 +		if ( event[ jQuery.expando ] ) {
179.4524 +			return event;
179.4525 +		}
179.4526 +
179.4527 +		// Create a writable copy of the event object and normalize some properties
179.4528 +		var i, prop, copy,
179.4529 +			type = event.type,
179.4530 +			originalEvent = event,
179.4531 +			fixHook = this.fixHooks[ type ];
179.4532 +
179.4533 +		if ( !fixHook ) {
179.4534 +			this.fixHooks[ type ] = fixHook =
179.4535 +				rmouseEvent.test( type ) ? this.mouseHooks :
179.4536 +				rkeyEvent.test( type ) ? this.keyHooks :
179.4537 +				{};
179.4538 +		}
179.4539 +		copy = fixHook.props ? this.props.concat( fixHook.props ) : this.props;
179.4540 +
179.4541 +		event = new jQuery.Event( originalEvent );
179.4542 +
179.4543 +		i = copy.length;
179.4544 +		while ( i-- ) {
179.4545 +			prop = copy[ i ];
179.4546 +			event[ prop ] = originalEvent[ prop ];
179.4547 +		}
179.4548 +
179.4549 +		// Support: Cordova 2.5 (WebKit) (#13255)
179.4550 +		// All events should have a target; Cordova deviceready doesn't
179.4551 +		if ( !event.target ) {
179.4552 +			event.target = document;
179.4553 +		}
179.4554 +
179.4555 +		// Support: Safari 6.0+, Chrome < 28
179.4556 +		// Target should not be a text node (#504, #13143)
179.4557 +		if ( event.target.nodeType === 3 ) {
179.4558 +			event.target = event.target.parentNode;
179.4559 +		}
179.4560 +
179.4561 +		return fixHook.filter ? fixHook.filter( event, originalEvent ) : event;
179.4562 +	},
179.4563 +
179.4564 +	special: {
179.4565 +		load: {
179.4566 +			// Prevent triggered image.load events from bubbling to window.load
179.4567 +			noBubble: true
179.4568 +		},
179.4569 +		focus: {
179.4570 +			// Fire native event if possible so blur/focus sequence is correct
179.4571 +			trigger: function() {
179.4572 +				if ( this !== safeActiveElement() && this.focus ) {
179.4573 +					this.focus();
179.4574 +					return false;
179.4575 +				}
179.4576 +			},
179.4577 +			delegateType: "focusin"
179.4578 +		},
179.4579 +		blur: {
179.4580 +			trigger: function() {
179.4581 +				if ( this === safeActiveElement() && this.blur ) {
179.4582 +					this.blur();
179.4583 +					return false;
179.4584 +				}
179.4585 +			},
179.4586 +			delegateType: "focusout"
179.4587 +		},
179.4588 +		click: {
179.4589 +			// For checkbox, fire native event so checked state will be right
179.4590 +			trigger: function() {
179.4591 +				if ( this.type === "checkbox" && this.click && jQuery.nodeName( this, "input" ) ) {
179.4592 +					this.click();
179.4593 +					return false;
179.4594 +				}
179.4595 +			},
179.4596 +
179.4597 +			// For cross-browser consistency, don't fire native .click() on links
179.4598 +			_default: function( event ) {
179.4599 +				return jQuery.nodeName( event.target, "a" );
179.4600 +			}
179.4601 +		},
179.4602 +
179.4603 +		beforeunload: {
179.4604 +			postDispatch: function( event ) {
179.4605 +
179.4606 +				// Support: Firefox 20+
179.4607 +				// Firefox doesn't alert if the returnValue field is not set.
179.4608 +				if ( event.result !== undefined && event.originalEvent ) {
179.4609 +					event.originalEvent.returnValue = event.result;
179.4610 +				}
179.4611 +			}
179.4612 +		}
179.4613 +	},
179.4614 +
179.4615 +	simulate: function( type, elem, event, bubble ) {
179.4616 +		// Piggyback on a donor event to simulate a different one.
179.4617 +		// Fake originalEvent to avoid donor's stopPropagation, but if the
179.4618 +		// simulated event prevents default then we do the same on the donor.
179.4619 +		var e = jQuery.extend(
179.4620 +			new jQuery.Event(),
179.4621 +			event,
179.4622 +			{
179.4623 +				type: type,
179.4624 +				isSimulated: true,
179.4625 +				originalEvent: {}
179.4626 +			}
179.4627 +		);
179.4628 +		if ( bubble ) {
179.4629 +			jQuery.event.trigger( e, null, elem );
179.4630 +		} else {
179.4631 +			jQuery.event.dispatch.call( elem, e );
179.4632 +		}
179.4633 +		if ( e.isDefaultPrevented() ) {
179.4634 +			event.preventDefault();
179.4635 +		}
179.4636 +	}
179.4637 +};
179.4638 +
179.4639 +jQuery.removeEvent = function( elem, type, handle ) {
179.4640 +	if ( elem.removeEventListener ) {
179.4641 +		elem.removeEventListener( type, handle, false );
179.4642 +	}
179.4643 +};
179.4644 +
179.4645 +jQuery.Event = function( src, props ) {
179.4646 +	// Allow instantiation without the 'new' keyword
179.4647 +	if ( !(this instanceof jQuery.Event) ) {
179.4648 +		return new jQuery.Event( src, props );
179.4649 +	}
179.4650 +
179.4651 +	// Event object
179.4652 +	if ( src && src.type ) {
179.4653 +		this.originalEvent = src;
179.4654 +		this.type = src.type;
179.4655 +
179.4656 +		// Events bubbling up the document may have been marked as prevented
179.4657 +		// by a handler lower down the tree; reflect the correct value.
179.4658 +		this.isDefaultPrevented = src.defaultPrevented ||
179.4659 +				src.defaultPrevented === undefined &&
179.4660 +				// Support: Android < 4.0
179.4661 +				src.returnValue === false ?
179.4662 +			returnTrue :
179.4663 +			returnFalse;
179.4664 +
179.4665 +	// Event type
179.4666 +	} else {
179.4667 +		this.type = src;
179.4668 +	}
179.4669 +
179.4670 +	// Put explicitly provided properties onto the event object
179.4671 +	if ( props ) {
179.4672 +		jQuery.extend( this, props );
179.4673 +	}
179.4674 +
179.4675 +	// Create a timestamp if incoming event doesn't have one
179.4676 +	this.timeStamp = src && src.timeStamp || jQuery.now();
179.4677 +
179.4678 +	// Mark it as fixed
179.4679 +	this[ jQuery.expando ] = true;
179.4680 +};
179.4681 +
179.4682 +// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding
179.4683 +// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html
179.4684 +jQuery.Event.prototype = {
179.4685 +	isDefaultPrevented: returnFalse,
179.4686 +	isPropagationStopped: returnFalse,
179.4687 +	isImmediatePropagationStopped: returnFalse,
179.4688 +
179.4689 +	preventDefault: function() {
179.4690 +		var e = this.originalEvent;
179.4691 +
179.4692 +		this.isDefaultPrevented = returnTrue;
179.4693 +
179.4694 +		if ( e && e.preventDefault ) {
179.4695 +			e.preventDefault();
179.4696 +		}
179.4697 +	},
179.4698 +	stopPropagation: function() {
179.4699 +		var e = this.originalEvent;
179.4700 +
179.4701 +		this.isPropagationStopped = returnTrue;
179.4702 +
179.4703 +		if ( e && e.stopPropagation ) {
179.4704 +			e.stopPropagation();
179.4705 +		}
179.4706 +	},
179.4707 +	stopImmediatePropagation: function() {
179.4708 +		var e = this.originalEvent;
179.4709 +
179.4710 +		this.isImmediatePropagationStopped = returnTrue;
179.4711 +
179.4712 +		if ( e && e.stopImmediatePropagation ) {
179.4713 +			e.stopImmediatePropagation();
179.4714 +		}
179.4715 +
179.4716 +		this.stopPropagation();
179.4717 +	}
179.4718 +};
179.4719 +
179.4720 +// Create mouseenter/leave events using mouseover/out and event-time checks
179.4721 +// Support: Chrome 15+
179.4722 +jQuery.each({
179.4723 +	mouseenter: "mouseover",
179.4724 +	mouseleave: "mouseout",
179.4725 +	pointerenter: "pointerover",
179.4726 +	pointerleave: "pointerout"
179.4727 +}, function( orig, fix ) {
179.4728 +	jQuery.event.special[ orig ] = {
179.4729 +		delegateType: fix,
179.4730 +		bindType: fix,
179.4731 +
179.4732 +		handle: function( event ) {
179.4733 +			var ret,
179.4734 +				target = this,
179.4735 +				related = event.relatedTarget,
179.4736 +				handleObj = event.handleObj;
179.4737 +
179.4738 +			// For mousenter/leave call the handler if related is outside the target.
179.4739 +			// NB: No relatedTarget if the mouse left/entered the browser window
179.4740 +			if ( !related || (related !== target && !jQuery.contains( target, related )) ) {
179.4741 +				event.type = handleObj.origType;
179.4742 +				ret = handleObj.handler.apply( this, arguments );
179.4743 +				event.type = fix;
179.4744 +			}
179.4745 +			return ret;
179.4746 +		}
179.4747 +	};
179.4748 +});
179.4749 +
179.4750 +// Create "bubbling" focus and blur events
179.4751 +// Support: Firefox, Chrome, Safari
179.4752 +if ( !support.focusinBubbles ) {
179.4753 +	jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) {
179.4754 +
179.4755 +		// Attach a single capturing handler on the document while someone wants focusin/focusout
179.4756 +		var handler = function( event ) {
179.4757 +				jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ), true );
179.4758 +			};
179.4759 +
179.4760 +		jQuery.event.special[ fix ] = {
179.4761 +			setup: function() {
179.4762 +				var doc = this.ownerDocument || this,
179.4763 +					attaches = data_priv.access( doc, fix );
179.4764 +
179.4765 +				if ( !attaches ) {
179.4766 +					doc.addEventListener( orig, handler, true );
179.4767 +				}
179.4768 +				data_priv.access( doc, fix, ( attaches || 0 ) + 1 );
179.4769 +			},
179.4770 +			teardown: function() {
179.4771 +				var doc = this.ownerDocument || this,
179.4772 +					attaches = data_priv.access( doc, fix ) - 1;
179.4773 +
179.4774 +				if ( !attaches ) {
179.4775 +					doc.removeEventListener( orig, handler, true );
179.4776 +					data_priv.remove( doc, fix );
179.4777 +
179.4778 +				} else {
179.4779 +					data_priv.access( doc, fix, attaches );
179.4780 +				}
179.4781 +			}
179.4782 +		};
179.4783 +	});
179.4784 +}
179.4785 +
179.4786 +jQuery.fn.extend({
179.4787 +
179.4788 +	on: function( types, selector, data, fn, /*INTERNAL*/ one ) {
179.4789 +		var origFn, type;
179.4790 +
179.4791 +		// Types can be a map of types/handlers
179.4792 +		if ( typeof types === "object" ) {
179.4793 +			// ( types-Object, selector, data )
179.4794 +			if ( typeof selector !== "string" ) {
179.4795 +				// ( types-Object, data )
179.4796 +				data = data || selector;
179.4797 +				selector = undefined;
179.4798 +			}
179.4799 +			for ( type in types ) {
179.4800 +				this.on( type, selector, data, types[ type ], one );
179.4801 +			}
179.4802 +			return this;
179.4803 +		}
179.4804 +
179.4805 +		if ( data == null && fn == null ) {
179.4806 +			// ( types, fn )
179.4807 +			fn = selector;
179.4808 +			data = selector = undefined;
179.4809 +		} else if ( fn == null ) {
179.4810 +			if ( typeof selector === "string" ) {
179.4811 +				// ( types, selector, fn )
179.4812 +				fn = data;
179.4813 +				data = undefined;
179.4814 +			} else {
179.4815 +				// ( types, data, fn )
179.4816 +				fn = data;
179.4817 +				data = selector;
179.4818 +				selector = undefined;
179.4819 +			}
179.4820 +		}
179.4821 +		if ( fn === false ) {
179.4822 +			fn = returnFalse;
179.4823 +		} else if ( !fn ) {
179.4824 +			return this;
179.4825 +		}
179.4826 +
179.4827 +		if ( one === 1 ) {
179.4828 +			origFn = fn;
179.4829 +			fn = function( event ) {
179.4830 +				// Can use an empty set, since event contains the info
179.4831 +				jQuery().off( event );
179.4832 +				return origFn.apply( this, arguments );
179.4833 +			};
179.4834 +			// Use same guid so caller can remove using origFn
179.4835 +			fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );
179.4836 +		}
179.4837 +		return this.each( function() {
179.4838 +			jQuery.event.add( this, types, fn, data, selector );
179.4839 +		});
179.4840 +	},
179.4841 +	one: function( types, selector, data, fn ) {
179.4842 +		return this.on( types, selector, data, fn, 1 );
179.4843 +	},
179.4844 +	off: function( types, selector, fn ) {
179.4845 +		var handleObj, type;
179.4846 +		if ( types && types.preventDefault && types.handleObj ) {
179.4847 +			// ( event )  dispatched jQuery.Event
179.4848 +			handleObj = types.handleObj;
179.4849 +			jQuery( types.delegateTarget ).off(
179.4850 +				handleObj.namespace ? handleObj.origType + "." + handleObj.namespace : handleObj.origType,
179.4851 +				handleObj.selector,
179.4852 +				handleObj.handler
179.4853 +			);
179.4854 +			return this;
179.4855 +		}
179.4856 +		if ( typeof types === "object" ) {
179.4857 +			// ( types-object [, selector] )
179.4858 +			for ( type in types ) {
179.4859 +				this.off( type, selector, types[ type ] );
179.4860 +			}
179.4861 +			return this;
179.4862 +		}
179.4863 +		if ( selector === false || typeof selector === "function" ) {
179.4864 +			// ( types [, fn] )
179.4865 +			fn = selector;
179.4866 +			selector = undefined;
179.4867 +		}
179.4868 +		if ( fn === false ) {
179.4869 +			fn = returnFalse;
179.4870 +		}
179.4871 +		return this.each(function() {
179.4872 +			jQuery.event.remove( this, types, fn, selector );
179.4873 +		});
179.4874 +	},
179.4875 +
179.4876 +	trigger: function( type, data ) {
179.4877 +		return this.each(function() {
179.4878 +			jQuery.event.trigger( type, data, this );
179.4879 +		});
179.4880 +	},
179.4881 +	triggerHandler: function( type, data ) {
179.4882 +		var elem = this[0];
179.4883 +		if ( elem ) {
179.4884 +			return jQuery.event.trigger( type, data, elem, true );
179.4885 +		}
179.4886 +	}
179.4887 +});
179.4888 +
179.4889 +
179.4890 +var
179.4891 +	rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,
179.4892 +	rtagName = /<([\w:]+)/,
179.4893 +	rhtml = /<|&#?\w+;/,
179.4894 +	rnoInnerhtml = /<(?:script|style|link)/i,
179.4895 +	// checked="checked" or checked
179.4896 +	rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i,
179.4897 +	rscriptType = /^$|\/(?:java|ecma)script/i,
179.4898 +	rscriptTypeMasked = /^true\/(.*)/,
179.4899 +	rcleanScript = /^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,
179.4900 +
179.4901 +	// We have to close these tags to support XHTML (#13200)
179.4902 +	wrapMap = {
179.4903 +
179.4904 +		// Support: IE 9
179.4905 +		option: [ 1, "<select multiple='multiple'>", "</select>" ],
179.4906 +
179.4907 +		thead: [ 1, "<table>", "</table>" ],
179.4908 +		col: [ 2, "<table><colgroup>", "</colgroup></table>" ],
179.4909 +		tr: [ 2, "<table><tbody>", "</tbody></table>" ],
179.4910 +		td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ],
179.4911 +
179.4912 +		_default: [ 0, "", "" ]
179.4913 +	};
179.4914 +
179.4915 +// Support: IE 9
179.4916 +wrapMap.optgroup = wrapMap.option;
179.4917 +
179.4918 +wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;
179.4919 +wrapMap.th = wrapMap.td;
179.4920 +
179.4921 +// Support: 1.x compatibility
179.4922 +// Manipulating tables requires a tbody
179.4923 +function manipulationTarget( elem, content ) {
179.4924 +	return jQuery.nodeName( elem, "table" ) &&
179.4925 +		jQuery.nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ?
179.4926 +
179.4927 +		elem.getElementsByTagName("tbody")[0] ||
179.4928 +			elem.appendChild( elem.ownerDocument.createElement("tbody") ) :
179.4929 +		elem;
179.4930 +}
179.4931 +
179.4932 +// Replace/restore the type attribute of script elements for safe DOM manipulation
179.4933 +function disableScript( elem ) {
179.4934 +	elem.type = (elem.getAttribute("type") !== null) + "/" + elem.type;
179.4935 +	return elem;
179.4936 +}
179.4937 +function restoreScript( elem ) {
179.4938 +	var match = rscriptTypeMasked.exec( elem.type );
179.4939 +
179.4940 +	if ( match ) {
179.4941 +		elem.type = match[ 1 ];
179.4942 +	} else {
179.4943 +		elem.removeAttribute("type");
179.4944 +	}
179.4945 +
179.4946 +	return elem;
179.4947 +}
179.4948 +
179.4949 +// Mark scripts as having already been evaluated
179.4950 +function setGlobalEval( elems, refElements ) {
179.4951 +	var i = 0,
179.4952 +		l = elems.length;
179.4953 +
179.4954 +	for ( ; i < l; i++ ) {
179.4955 +		data_priv.set(
179.4956 +			elems[ i ], "globalEval", !refElements || data_priv.get( refElements[ i ], "globalEval" )
179.4957 +		);
179.4958 +	}
179.4959 +}
179.4960 +
179.4961 +function cloneCopyEvent( src, dest ) {
179.4962 +	var i, l, type, pdataOld, pdataCur, udataOld, udataCur, events;
179.4963 +
179.4964 +	if ( dest.nodeType !== 1 ) {
179.4965 +		return;
179.4966 +	}
179.4967 +
179.4968 +	// 1. Copy private data: events, handlers, etc.
179.4969 +	if ( data_priv.hasData( src ) ) {
179.4970 +		pdataOld = data_priv.access( src );
179.4971 +		pdataCur = data_priv.set( dest, pdataOld );
179.4972 +		events = pdataOld.events;
179.4973 +
179.4974 +		if ( events ) {
179.4975 +			delete pdataCur.handle;
179.4976 +			pdataCur.events = {};
179.4977 +
179.4978 +			for ( type in events ) {
179.4979 +				for ( i = 0, l = events[ type ].length; i < l; i++ ) {
179.4980 +					jQuery.event.add( dest, type, events[ type ][ i ] );
179.4981 +				}
179.4982 +			}
179.4983 +		}
179.4984 +	}
179.4985 +
179.4986 +	// 2. Copy user data
179.4987 +	if ( data_user.hasData( src ) ) {
179.4988 +		udataOld = data_user.access( src );
179.4989 +		udataCur = jQuery.extend( {}, udataOld );
179.4990 +
179.4991 +		data_user.set( dest, udataCur );
179.4992 +	}
179.4993 +}
179.4994 +
179.4995 +function getAll( context, tag ) {
179.4996 +	var ret = context.getElementsByTagName ? context.getElementsByTagName( tag || "*" ) :
179.4997 +			context.querySelectorAll ? context.querySelectorAll( tag || "*" ) :
179.4998 +			[];
179.4999 +
179.5000 +	return tag === undefined || tag && jQuery.nodeName( context, tag ) ?
179.5001 +		jQuery.merge( [ context ], ret ) :
179.5002 +		ret;
179.5003 +}
179.5004 +
179.5005 +// Support: IE >= 9
179.5006 +function fixInput( src, dest ) {
179.5007 +	var nodeName = dest.nodeName.toLowerCase();
179.5008 +
179.5009 +	// Fails to persist the checked state of a cloned checkbox or radio button.
179.5010 +	if ( nodeName === "input" && rcheckableType.test( src.type ) ) {
179.5011 +		dest.checked = src.checked;
179.5012 +
179.5013 +	// Fails to return the selected option to the default selected state when cloning options
179.5014 +	} else if ( nodeName === "input" || nodeName === "textarea" ) {
179.5015 +		dest.defaultValue = src.defaultValue;
179.5016 +	}
179.5017 +}
179.5018 +
179.5019 +jQuery.extend({
179.5020 +	clone: function( elem, dataAndEvents, deepDataAndEvents ) {
179.5021 +		var i, l, srcElements, destElements,
179.5022 +			clone = elem.cloneNode( true ),
179.5023 +			inPage = jQuery.contains( elem.ownerDocument, elem );
179.5024 +
179.5025 +		// Support: IE >= 9
179.5026 +		// Fix Cloning issues
179.5027 +		if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) &&
179.5028 +				!jQuery.isXMLDoc( elem ) ) {
179.5029 +
179.5030 +			// We eschew Sizzle here for performance reasons: http://jsperf.com/getall-vs-sizzle/2
179.5031 +			destElements = getAll( clone );
179.5032 +			srcElements = getAll( elem );
179.5033 +
179.5034 +			for ( i = 0, l = srcElements.length; i < l; i++ ) {
179.5035 +				fixInput( srcElements[ i ], destElements[ i ] );
179.5036 +			}
179.5037 +		}
179.5038 +
179.5039 +		// Copy the events from the original to the clone
179.5040 +		if ( dataAndEvents ) {
179.5041 +			if ( deepDataAndEvents ) {
179.5042 +				srcElements = srcElements || getAll( elem );
179.5043 +				destElements = destElements || getAll( clone );
179.5044 +
179.5045 +				for ( i = 0, l = srcElements.length; i < l; i++ ) {
179.5046 +					cloneCopyEvent( srcElements[ i ], destElements[ i ] );
179.5047 +				}
179.5048 +			} else {
179.5049 +				cloneCopyEvent( elem, clone );
179.5050 +			}
179.5051 +		}
179.5052 +
179.5053 +		// Preserve script evaluation history
179.5054 +		destElements = getAll( clone, "script" );
179.5055 +		if ( destElements.length > 0 ) {
179.5056 +			setGlobalEval( destElements, !inPage && getAll( elem, "script" ) );
179.5057 +		}
179.5058 +
179.5059 +		// Return the cloned set
179.5060 +		return clone;
179.5061 +	},
179.5062 +
179.5063 +	buildFragment: function( elems, context, scripts, selection ) {
179.5064 +		var elem, tmp, tag, wrap, contains, j,
179.5065 +			fragment = context.createDocumentFragment(),
179.5066 +			nodes = [],
179.5067 +			i = 0,
179.5068 +			l = elems.length;
179.5069 +
179.5070 +		for ( ; i < l; i++ ) {
179.5071 +			elem = elems[ i ];
179.5072 +
179.5073 +			if ( elem || elem === 0 ) {
179.5074 +
179.5075 +				// Add nodes directly
179.5076 +				if ( jQuery.type( elem ) === "object" ) {
179.5077 +					// Support: QtWebKit
179.5078 +					// jQuery.merge because push.apply(_, arraylike) throws
179.5079 +					jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );
179.5080 +
179.5081 +				// Convert non-html into a text node
179.5082 +				} else if ( !rhtml.test( elem ) ) {
179.5083 +					nodes.push( context.createTextNode( elem ) );
179.5084 +
179.5085 +				// Convert html into DOM nodes
179.5086 +				} else {
179.5087 +					tmp = tmp || fragment.appendChild( context.createElement("div") );
179.5088 +
179.5089 +					// Deserialize a standard representation
179.5090 +					tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase();
179.5091 +					wrap = wrapMap[ tag ] || wrapMap._default;
179.5092 +					tmp.innerHTML = wrap[ 1 ] + elem.replace( rxhtmlTag, "<$1></$2>" ) + wrap[ 2 ];
179.5093 +
179.5094 +					// Descend through wrappers to the right content
179.5095 +					j = wrap[ 0 ];
179.5096 +					while ( j-- ) {
179.5097 +						tmp = tmp.lastChild;
179.5098 +					}
179.5099 +
179.5100 +					// Support: QtWebKit
179.5101 +					// jQuery.merge because push.apply(_, arraylike) throws
179.5102 +					jQuery.merge( nodes, tmp.childNodes );
179.5103 +
179.5104 +					// Remember the top-level container
179.5105 +					tmp = fragment.firstChild;
179.5106 +
179.5107 +					// Fixes #12346
179.5108 +					// Support: Webkit, IE
179.5109 +					tmp.textContent = "";
179.5110 +				}
179.5111 +			}
179.5112 +		}
179.5113 +
179.5114 +		// Remove wrapper from fragment
179.5115 +		fragment.textContent = "";
179.5116 +
179.5117 +		i = 0;
179.5118 +		while ( (elem = nodes[ i++ ]) ) {
179.5119 +
179.5120 +			// #4087 - If origin and destination elements are the same, and this is
179.5121 +			// that element, do not do anything
179.5122 +			if ( selection && jQuery.inArray( elem, selection ) !== -1 ) {
179.5123 +				continue;
179.5124 +			}
179.5125 +
179.5126 +			contains = jQuery.contains( elem.ownerDocument, elem );
179.5127 +
179.5128 +			// Append to fragment
179.5129 +			tmp = getAll( fragment.appendChild( elem ), "script" );
179.5130 +
179.5131 +			// Preserve script evaluation history
179.5132 +			if ( contains ) {
179.5133 +				setGlobalEval( tmp );
179.5134 +			}
179.5135 +
179.5136 +			// Capture executables
179.5137 +			if ( scripts ) {
179.5138 +				j = 0;
179.5139 +				while ( (elem = tmp[ j++ ]) ) {
179.5140 +					if ( rscriptType.test( elem.type || "" ) ) {
179.5141 +						scripts.push( elem );
179.5142 +					}
179.5143 +				}
179.5144 +			}
179.5145 +		}
179.5146 +
179.5147 +		return fragment;
179.5148 +	},
179.5149 +
179.5150 +	cleanData: function( elems ) {
179.5151 +		var data, elem, type, key,
179.5152 +			special = jQuery.event.special,
179.5153 +			i = 0;
179.5154 +
179.5155 +		for ( ; (elem = elems[ i ]) !== undefined; i++ ) {
179.5156 +			if ( jQuery.acceptData( elem ) ) {
179.5157 +				key = elem[ data_priv.expando ];
179.5158 +
179.5159 +				if ( key && (data = data_priv.cache[ key ]) ) {
179.5160 +					if ( data.events ) {
179.5161 +						for ( type in data.events ) {
179.5162 +							if ( special[ type ] ) {
179.5163 +								jQuery.event.remove( elem, type );
179.5164 +
179.5165 +							// This is a shortcut to avoid jQuery.event.remove's overhead
179.5166 +							} else {
179.5167 +								jQuery.removeEvent( elem, type, data.handle );
179.5168 +							}
179.5169 +						}
179.5170 +					}
179.5171 +					if ( data_priv.cache[ key ] ) {
179.5172 +						// Discard any remaining `private` data
179.5173 +						delete data_priv.cache[ key ];
179.5174 +					}
179.5175 +				}
179.5176 +			}
179.5177 +			// Discard any remaining `user` data
179.5178 +			delete data_user.cache[ elem[ data_user.expando ] ];
179.5179 +		}
179.5180 +	}
179.5181 +});
179.5182 +
179.5183 +jQuery.fn.extend({
179.5184 +	text: function( value ) {
179.5185 +		return access( this, function( value ) {
179.5186 +			return value === undefined ?
179.5187 +				jQuery.text( this ) :
179.5188 +				this.empty().each(function() {
179.5189 +					if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
179.5190 +						this.textContent = value;
179.5191 +					}
179.5192 +				});
179.5193 +		}, null, value, arguments.length );
179.5194 +	},
179.5195 +
179.5196 +	append: function() {
179.5197 +		return this.domManip( arguments, function( elem ) {
179.5198 +			if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
179.5199 +				var target = manipulationTarget( this, elem );
179.5200 +				target.appendChild( elem );
179.5201 +			}
179.5202 +		});
179.5203 +	},
179.5204 +
179.5205 +	prepend: function() {
179.5206 +		return this.domManip( arguments, function( elem ) {
179.5207 +			if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
179.5208 +				var target = manipulationTarget( this, elem );
179.5209 +				target.insertBefore( elem, target.firstChild );
179.5210 +			}
179.5211 +		});
179.5212 +	},
179.5213 +
179.5214 +	before: function() {
179.5215 +		return this.domManip( arguments, function( elem ) {
179.5216 +			if ( this.parentNode ) {
179.5217 +				this.parentNode.insertBefore( elem, this );
179.5218 +			}
179.5219 +		});
179.5220 +	},
179.5221 +
179.5222 +	after: function() {
179.5223 +		return this.domManip( arguments, function( elem ) {
179.5224 +			if ( this.parentNode ) {
179.5225 +				this.parentNode.insertBefore( elem, this.nextSibling );
179.5226 +			}
179.5227 +		});
179.5228 +	},
179.5229 +
179.5230 +	remove: function( selector, keepData /* Internal Use Only */ ) {
179.5231 +		var elem,
179.5232 +			elems = selector ? jQuery.filter( selector, this ) : this,
179.5233 +			i = 0;
179.5234 +
179.5235 +		for ( ; (elem = elems[i]) != null; i++ ) {
179.5236 +			if ( !keepData && elem.nodeType === 1 ) {
179.5237 +				jQuery.cleanData( getAll( elem ) );
179.5238 +			}
179.5239 +
179.5240 +			if ( elem.parentNode ) {
179.5241 +				if ( keepData && jQuery.contains( elem.ownerDocument, elem ) ) {
179.5242 +					setGlobalEval( getAll( elem, "script" ) );
179.5243 +				}
179.5244 +				elem.parentNode.removeChild( elem );
179.5245 +			}
179.5246 +		}
179.5247 +
179.5248 +		return this;
179.5249 +	},
179.5250 +
179.5251 +	empty: function() {
179.5252 +		var elem,
179.5253 +			i = 0;
179.5254 +
179.5255 +		for ( ; (elem = this[i]) != null; i++ ) {
179.5256 +			if ( elem.nodeType === 1 ) {
179.5257 +
179.5258 +				// Prevent memory leaks
179.5259 +				jQuery.cleanData( getAll( elem, false ) );
179.5260 +
179.5261 +				// Remove any remaining nodes
179.5262 +				elem.textContent = "";
179.5263 +			}
179.5264 +		}
179.5265 +
179.5266 +		return this;
179.5267 +	},
179.5268 +
179.5269 +	clone: function( dataAndEvents, deepDataAndEvents ) {
179.5270 +		dataAndEvents = dataAndEvents == null ? false : dataAndEvents;
179.5271 +		deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;
179.5272 +
179.5273 +		return this.map(function() {
179.5274 +			return jQuery.clone( this, dataAndEvents, deepDataAndEvents );
179.5275 +		});
179.5276 +	},
179.5277 +
179.5278 +	html: function( value ) {
179.5279 +		return access( this, function( value ) {
179.5280 +			var elem = this[ 0 ] || {},
179.5281 +				i = 0,
179.5282 +				l = this.length;
179.5283 +
179.5284 +			if ( value === undefined && elem.nodeType === 1 ) {
179.5285 +				return elem.innerHTML;
179.5286 +			}
179.5287 +
179.5288 +			// See if we can take a shortcut and just use innerHTML
179.5289 +			if ( typeof value === "string" && !rnoInnerhtml.test( value ) &&
179.5290 +				!wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) {
179.5291 +
179.5292 +				value = value.replace( rxhtmlTag, "<$1></$2>" );
179.5293 +
179.5294 +				try {
179.5295 +					for ( ; i < l; i++ ) {
179.5296 +						elem = this[ i ] || {};
179.5297 +
179.5298 +						// Remove element nodes and prevent memory leaks
179.5299 +						if ( elem.nodeType === 1 ) {
179.5300 +							jQuery.cleanData( getAll( elem, false ) );
179.5301 +							elem.innerHTML = value;
179.5302 +						}
179.5303 +					}
179.5304 +
179.5305 +					elem = 0;
179.5306 +
179.5307 +				// If using innerHTML throws an exception, use the fallback method
179.5308 +				} catch( e ) {}
179.5309 +			}
179.5310 +
179.5311 +			if ( elem ) {
179.5312 +				this.empty().append( value );
179.5313 +			}
179.5314 +		}, null, value, arguments.length );
179.5315 +	},
179.5316 +
179.5317 +	replaceWith: function() {
179.5318 +		var arg = arguments[ 0 ];
179.5319 +
179.5320 +		// Make the changes, replacing each context element with the new content
179.5321 +		this.domManip( arguments, function( elem ) {
179.5322 +			arg = this.parentNode;
179.5323 +
179.5324 +			jQuery.cleanData( getAll( this ) );
179.5325 +
179.5326 +			if ( arg ) {
179.5327 +				arg.replaceChild( elem, this );
179.5328 +			}
179.5329 +		});
179.5330 +
179.5331 +		// Force removal if there was no new content (e.g., from empty arguments)
179.5332 +		return arg && (arg.length || arg.nodeType) ? this : this.remove();
179.5333 +	},
179.5334 +
179.5335 +	detach: function( selector ) {
179.5336 +		return this.remove( selector, true );
179.5337 +	},
179.5338 +
179.5339 +	domManip: function( args, callback ) {
179.5340 +
179.5341 +		// Flatten any nested arrays
179.5342 +		args = concat.apply( [], args );
179.5343 +
179.5344 +		var fragment, first, scripts, hasScripts, node, doc,
179.5345 +			i = 0,
179.5346 +			l = this.length,
179.5347 +			set = this,
179.5348 +			iNoClone = l - 1,
179.5349 +			value = args[ 0 ],
179.5350 +			isFunction = jQuery.isFunction( value );
179.5351 +
179.5352 +		// We can't cloneNode fragments that contain checked, in WebKit
179.5353 +		if ( isFunction ||
179.5354 +				( l > 1 && typeof value === "string" &&
179.5355 +					!support.checkClone && rchecked.test( value ) ) ) {
179.5356 +			return this.each(function( index ) {
179.5357 +				var self = set.eq( index );
179.5358 +				if ( isFunction ) {
179.5359 +					args[ 0 ] = value.call( this, index, self.html() );
179.5360 +				}
179.5361 +				self.domManip( args, callback );
179.5362 +			});
179.5363 +		}
179.5364 +
179.5365 +		if ( l ) {
179.5366 +			fragment = jQuery.buildFragment( args, this[ 0 ].ownerDocument, false, this );
179.5367 +			first = fragment.firstChild;
179.5368 +
179.5369 +			if ( fragment.childNodes.length === 1 ) {
179.5370 +				fragment = first;
179.5371 +			}
179.5372 +
179.5373 +			if ( first ) {
179.5374 +				scripts = jQuery.map( getAll( fragment, "script" ), disableScript );
179.5375 +				hasScripts = scripts.length;
179.5376 +
179.5377 +				// Use the original fragment for the last item instead of the first because it can end up
179.5378 +				// being emptied incorrectly in certain situations (#8070).
179.5379 +				for ( ; i < l; i++ ) {
179.5380 +					node = fragment;
179.5381 +
179.5382 +					if ( i !== iNoClone ) {
179.5383 +						node = jQuery.clone( node, true, true );
179.5384 +
179.5385 +						// Keep references to cloned scripts for later restoration
179.5386 +						if ( hasScripts ) {
179.5387 +							// Support: QtWebKit
179.5388 +							// jQuery.merge because push.apply(_, arraylike) throws
179.5389 +							jQuery.merge( scripts, getAll( node, "script" ) );
179.5390 +						}
179.5391 +					}
179.5392 +
179.5393 +					callback.call( this[ i ], node, i );
179.5394 +				}
179.5395 +
179.5396 +				if ( hasScripts ) {
179.5397 +					doc = scripts[ scripts.length - 1 ].ownerDocument;
179.5398 +
179.5399 +					// Reenable scripts
179.5400 +					jQuery.map( scripts, restoreScript );
179.5401 +
179.5402 +					// Evaluate executable scripts on first document insertion
179.5403 +					for ( i = 0; i < hasScripts; i++ ) {
179.5404 +						node = scripts[ i ];
179.5405 +						if ( rscriptType.test( node.type || "" ) &&
179.5406 +							!data_priv.access( node, "globalEval" ) && jQuery.contains( doc, node ) ) {
179.5407 +
179.5408 +							if ( node.src ) {
179.5409 +								// Optional AJAX dependency, but won't run scripts if not present
179.5410 +								if ( jQuery._evalUrl ) {
179.5411 +									jQuery._evalUrl( node.src );
179.5412 +								}
179.5413 +							} else {
179.5414 +								jQuery.globalEval( node.textContent.replace( rcleanScript, "" ) );
179.5415 +							}
179.5416 +						}
179.5417 +					}
179.5418 +				}
179.5419 +			}
179.5420 +		}
179.5421 +
179.5422 +		return this;
179.5423 +	}
179.5424 +});
179.5425 +
179.5426 +jQuery.each({
179.5427 +	appendTo: "append",
179.5428 +	prependTo: "prepend",
179.5429 +	insertBefore: "before",
179.5430 +	insertAfter: "after",
179.5431 +	replaceAll: "replaceWith"
179.5432 +}, function( name, original ) {
179.5433 +	jQuery.fn[ name ] = function( selector ) {
179.5434 +		var elems,
179.5435 +			ret = [],
179.5436 +			insert = jQuery( selector ),
179.5437 +			last = insert.length - 1,
179.5438 +			i = 0;
179.5439 +
179.5440 +		for ( ; i <= last; i++ ) {
179.5441 +			elems = i === last ? this : this.clone( true );
179.5442 +			jQuery( insert[ i ] )[ original ]( elems );
179.5443 +
179.5444 +			// Support: QtWebKit
179.5445 +			// .get() because push.apply(_, arraylike) throws
179.5446 +			push.apply( ret, elems.get() );
179.5447 +		}
179.5448 +
179.5449 +		return this.pushStack( ret );
179.5450 +	};
179.5451 +});
179.5452 +
179.5453 +
179.5454 +var iframe,
179.5455 +	elemdisplay = {};
179.5456 +
179.5457 +/**
179.5458 + * Retrieve the actual display of a element
179.5459 + * @param {String} name nodeName of the element
179.5460 + * @param {Object} doc Document object
179.5461 + */
179.5462 +// Called only from within defaultDisplay
179.5463 +function actualDisplay( name, doc ) {
179.5464 +	var style,
179.5465 +		elem = jQuery( doc.createElement( name ) ).appendTo( doc.body ),
179.5466 +
179.5467 +		// getDefaultComputedStyle might be reliably used only on attached element
179.5468 +		display = window.getDefaultComputedStyle && ( style = window.getDefaultComputedStyle( elem[ 0 ] ) ) ?
179.5469 +
179.5470 +			// Use of this method is a temporary fix (more like optmization) until something better comes along,
179.5471 +			// since it was removed from specification and supported only in FF
179.5472 +			style.display : jQuery.css( elem[ 0 ], "display" );
179.5473 +
179.5474 +	// We don't have any data stored on the element,
179.5475 +	// so use "detach" method as fast way to get rid of the element
179.5476 +	elem.detach();
179.5477 +
179.5478 +	return display;
179.5479 +}
179.5480 +
179.5481 +/**
179.5482 + * Try to determine the default display value of an element
179.5483 + * @param {String} nodeName
179.5484 + */
179.5485 +function defaultDisplay( nodeName ) {
179.5486 +	var doc = document,
179.5487 +		display = elemdisplay[ nodeName ];
179.5488 +
179.5489 +	if ( !display ) {
179.5490 +		display = actualDisplay( nodeName, doc );
179.5491 +
179.5492 +		// If the simple way fails, read from inside an iframe
179.5493 +		if ( display === "none" || !display ) {
179.5494 +
179.5495 +			// Use the already-created iframe if possible
179.5496 +			iframe = (iframe || jQuery( "<iframe frameborder='0' width='0' height='0'/>" )).appendTo( doc.documentElement );
179.5497 +
179.5498 +			// Always write a new HTML skeleton so Webkit and Firefox don't choke on reuse
179.5499 +			doc = iframe[ 0 ].contentDocument;
179.5500 +
179.5501 +			// Support: IE
179.5502 +			doc.write();
179.5503 +			doc.close();
179.5504 +
179.5505 +			display = actualDisplay( nodeName, doc );
179.5506 +			iframe.detach();
179.5507 +		}
179.5508 +
179.5509 +		// Store the correct default display
179.5510 +		elemdisplay[ nodeName ] = display;
179.5511 +	}
179.5512 +
179.5513 +	return display;
179.5514 +}
179.5515 +var rmargin = (/^margin/);
179.5516 +
179.5517 +var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" );
179.5518 +
179.5519 +var getStyles = function( elem ) {
179.5520 +		return elem.ownerDocument.defaultView.getComputedStyle( elem, null );
179.5521 +	};
179.5522 +
179.5523 +
179.5524 +
179.5525 +function curCSS( elem, name, computed ) {
179.5526 +	var width, minWidth, maxWidth, ret,
179.5527 +		style = elem.style;
179.5528 +
179.5529 +	computed = computed || getStyles( elem );
179.5530 +
179.5531 +	// Support: IE9
179.5532 +	// getPropertyValue is only needed for .css('filter') in IE9, see #12537
179.5533 +	if ( computed ) {
179.5534 +		ret = computed.getPropertyValue( name ) || computed[ name ];
179.5535 +	}
179.5536 +
179.5537 +	if ( computed ) {
179.5538 +
179.5539 +		if ( ret === "" && !jQuery.contains( elem.ownerDocument, elem ) ) {
179.5540 +			ret = jQuery.style( elem, name );
179.5541 +		}
179.5542 +
179.5543 +		// Support: iOS < 6
179.5544 +		// A tribute to the "awesome hack by Dean Edwards"
179.5545 +		// iOS < 6 (at least) returns percentage for a larger set of values, but width seems to be reliably pixels
179.5546 +		// this is against the CSSOM draft spec: http://dev.w3.org/csswg/cssom/#resolved-values
179.5547 +		if ( rnumnonpx.test( ret ) && rmargin.test( name ) ) {
179.5548 +
179.5549 +			// Remember the original values
179.5550 +			width = style.width;
179.5551 +			minWidth = style.minWidth;
179.5552 +			maxWidth = style.maxWidth;
179.5553 +
179.5554 +			// Put in the new values to get a computed value out
179.5555 +			style.minWidth = style.maxWidth = style.width = ret;
179.5556 +			ret = computed.width;
179.5557 +
179.5558 +			// Revert the changed values
179.5559 +			style.width = width;
179.5560 +			style.minWidth = minWidth;
179.5561 +			style.maxWidth = maxWidth;
179.5562 +		}
179.5563 +	}
179.5564 +
179.5565 +	return ret !== undefined ?
179.5566 +		// Support: IE
179.5567 +		// IE returns zIndex value as an integer.
179.5568 +		ret + "" :
179.5569 +		ret;
179.5570 +}
179.5571 +
179.5572 +
179.5573 +function addGetHookIf( conditionFn, hookFn ) {
179.5574 +	// Define the hook, we'll check on the first run if it's really needed.
179.5575 +	return {
179.5576 +		get: function() {
179.5577 +			if ( conditionFn() ) {
179.5578 +				// Hook not needed (or it's not possible to use it due to missing dependency),
179.5579 +				// remove it.
179.5580 +				// Since there are no other hooks for marginRight, remove the whole object.
179.5581 +				delete this.get;
179.5582 +				return;
179.5583 +			}
179.5584 +
179.5585 +			// Hook needed; redefine it so that the support test is not executed again.
179.5586 +
179.5587 +			return (this.get = hookFn).apply( this, arguments );
179.5588 +		}
179.5589 +	};
179.5590 +}
179.5591 +
179.5592 +
179.5593 +(function() {
179.5594 +	var pixelPositionVal, boxSizingReliableVal,
179.5595 +		docElem = document.documentElement,
179.5596 +		container = document.createElement( "div" ),
179.5597 +		div = document.createElement( "div" );
179.5598 +
179.5599 +	if ( !div.style ) {
179.5600 +		return;
179.5601 +	}
179.5602 +
179.5603 +	div.style.backgroundClip = "content-box";
179.5604 +	div.cloneNode( true ).style.backgroundClip = "";
179.5605 +	support.clearCloneStyle = div.style.backgroundClip === "content-box";
179.5606 +
179.5607 +	container.style.cssText = "border:0;width:0;height:0;top:0;left:-9999px;margin-top:1px;" +
179.5608 +		"position:absolute";
179.5609 +	container.appendChild( div );
179.5610 +
179.5611 +	// Executing both pixelPosition & boxSizingReliable tests require only one layout
179.5612 +	// so they're executed at the same time to save the second computation.
179.5613 +	function computePixelPositionAndBoxSizingReliable() {
179.5614 +		div.style.cssText =
179.5615 +			// Support: Firefox<29, Android 2.3
179.5616 +			// Vendor-prefix box-sizing
179.5617 +			"-webkit-box-sizing:border-box;-moz-box-sizing:border-box;" +
179.5618 +			"box-sizing:border-box;display:block;margin-top:1%;top:1%;" +
179.5619 +			"border:1px;padding:1px;width:4px;position:absolute";
179.5620 +		div.innerHTML = "";
179.5621 +		docElem.appendChild( container );
179.5622 +
179.5623 +		var divStyle = window.getComputedStyle( div, null );
179.5624 +		pixelPositionVal = divStyle.top !== "1%";
179.5625 +		boxSizingReliableVal = divStyle.width === "4px";
179.5626 +
179.5627 +		docElem.removeChild( container );
179.5628 +	}
179.5629 +
179.5630 +	// Support: node.js jsdom
179.5631 +	// Don't assume that getComputedStyle is a property of the global object
179.5632 +	if ( window.getComputedStyle ) {
179.5633 +		jQuery.extend( support, {
179.5634 +			pixelPosition: function() {
179.5635 +				// This test is executed only once but we still do memoizing
179.5636 +				// since we can use the boxSizingReliable pre-computing.
179.5637 +				// No need to check if the test was already performed, though.
179.5638 +				computePixelPositionAndBoxSizingReliable();
179.5639 +				return pixelPositionVal;
179.5640 +			},
179.5641 +			boxSizingReliable: function() {
179.5642 +				if ( boxSizingReliableVal == null ) {
179.5643 +					computePixelPositionAndBoxSizingReliable();
179.5644 +				}
179.5645 +				return boxSizingReliableVal;
179.5646 +			},
179.5647 +			reliableMarginRight: function() {
179.5648 +				// Support: Android 2.3
179.5649 +				// Check if div with explicit width and no margin-right incorrectly
179.5650 +				// gets computed margin-right based on width of container. (#3333)
179.5651 +				// WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
179.5652 +				// This support function is only executed once so no memoizing is needed.
179.5653 +				var ret,
179.5654 +					marginDiv = div.appendChild( document.createElement( "div" ) );
179.5655 +
179.5656 +				// Reset CSS: box-sizing; display; margin; border; padding
179.5657 +				marginDiv.style.cssText = div.style.cssText =
179.5658 +					// Support: Firefox<29, Android 2.3
179.5659 +					// Vendor-prefix box-sizing
179.5660 +					"-webkit-box-sizing:content-box;-moz-box-sizing:content-box;" +
179.5661 +					"box-sizing:content-box;display:block;margin:0;border:0;padding:0";
179.5662 +				marginDiv.style.marginRight = marginDiv.style.width = "0";
179.5663 +				div.style.width = "1px";
179.5664 +				docElem.appendChild( container );
179.5665 +
179.5666 +				ret = !parseFloat( window.getComputedStyle( marginDiv, null ).marginRight );
179.5667 +
179.5668 +				docElem.removeChild( container );
179.5669 +
179.5670 +				return ret;
179.5671 +			}
179.5672 +		});
179.5673 +	}
179.5674 +})();
179.5675 +
179.5676 +
179.5677 +// A method for quickly swapping in/out CSS properties to get correct calculations.
179.5678 +jQuery.swap = function( elem, options, callback, args ) {
179.5679 +	var ret, name,
179.5680 +		old = {};
179.5681 +
179.5682 +	// Remember the old values, and insert the new ones
179.5683 +	for ( name in options ) {
179.5684 +		old[ name ] = elem.style[ name ];
179.5685 +		elem.style[ name ] = options[ name ];
179.5686 +	}
179.5687 +
179.5688 +	ret = callback.apply( elem, args || [] );
179.5689 +
179.5690 +	// Revert the old values
179.5691 +	for ( name in options ) {
179.5692 +		elem.style[ name ] = old[ name ];
179.5693 +	}
179.5694 +
179.5695 +	return ret;
179.5696 +};
179.5697 +
179.5698 +
179.5699 +var
179.5700 +	// swappable if display is none or starts with table except "table", "table-cell", or "table-caption"
179.5701 +	// see here for display values: https://developer.mozilla.org/en-US/docs/CSS/display
179.5702 +	rdisplayswap = /^(none|table(?!-c[ea]).+)/,
179.5703 +	rnumsplit = new RegExp( "^(" + pnum + ")(.*)$", "i" ),
179.5704 +	rrelNum = new RegExp( "^([+-])=(" + pnum + ")", "i" ),
179.5705 +
179.5706 +	cssShow = { position: "absolute", visibility: "hidden", display: "block" },
179.5707 +	cssNormalTransform = {
179.5708 +		letterSpacing: "0",
179.5709 +		fontWeight: "400"
179.5710 +	},
179.5711 +
179.5712 +	cssPrefixes = [ "Webkit", "O", "Moz", "ms" ];
179.5713 +
179.5714 +// return a css property mapped to a potentially vendor prefixed property
179.5715 +function vendorPropName( style, name ) {
179.5716 +
179.5717 +	// shortcut for names that are not vendor prefixed
179.5718 +	if ( name in style ) {
179.5719 +		return name;
179.5720 +	}
179.5721 +
179.5722 +	// check for vendor prefixed names
179.5723 +	var capName = name[0].toUpperCase() + name.slice(1),
179.5724 +		origName = name,
179.5725 +		i = cssPrefixes.length;
179.5726 +
179.5727 +	while ( i-- ) {
179.5728 +		name = cssPrefixes[ i ] + capName;
179.5729 +		if ( name in style ) {
179.5730 +			return name;
179.5731 +		}
179.5732 +	}
179.5733 +
179.5734 +	return origName;
179.5735 +}
179.5736 +
179.5737 +function setPositiveNumber( elem, value, subtract ) {
179.5738 +	var matches = rnumsplit.exec( value );
179.5739 +	return matches ?
179.5740 +		// Guard against undefined "subtract", e.g., when used as in cssHooks
179.5741 +		Math.max( 0, matches[ 1 ] - ( subtract || 0 ) ) + ( matches[ 2 ] || "px" ) :
179.5742 +		value;
179.5743 +}
179.5744 +
179.5745 +function augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) {
179.5746 +	var i = extra === ( isBorderBox ? "border" : "content" ) ?
179.5747 +		// If we already have the right measurement, avoid augmentation
179.5748 +		4 :
179.5749 +		// Otherwise initialize for horizontal or vertical properties
179.5750 +		name === "width" ? 1 : 0,
179.5751 +
179.5752 +		val = 0;
179.5753 +
179.5754 +	for ( ; i < 4; i += 2 ) {
179.5755 +		// both box models exclude margin, so add it if we want it
179.5756 +		if ( extra === "margin" ) {
179.5757 +			val += jQuery.css( elem, extra + cssExpand[ i ], true, styles );
179.5758 +		}
179.5759 +
179.5760 +		if ( isBorderBox ) {
179.5761 +			// border-box includes padding, so remove it if we want content
179.5762 +			if ( extra === "content" ) {
179.5763 +				val -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
179.5764 +			}
179.5765 +
179.5766 +			// at this point, extra isn't border nor margin, so remove border
179.5767 +			if ( extra !== "margin" ) {
179.5768 +				val -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
179.5769 +			}
179.5770 +		} else {
179.5771 +			// at this point, extra isn't content, so add padding
179.5772 +			val += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
179.5773 +
179.5774 +			// at this point, extra isn't content nor padding, so add border
179.5775 +			if ( extra !== "padding" ) {
179.5776 +				val += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
179.5777 +			}
179.5778 +		}
179.5779 +	}
179.5780 +
179.5781 +	return val;
179.5782 +}
179.5783 +
179.5784 +function getWidthOrHeight( elem, name, extra ) {
179.5785 +
179.5786 +	// Start with offset property, which is equivalent to the border-box value
179.5787 +	var valueIsBorderBox = true,
179.5788 +		val = name === "width" ? elem.offsetWidth : elem.offsetHeight,
179.5789 +		styles = getStyles( elem ),
179.5790 +		isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box";
179.5791 +
179.5792 +	// some non-html elements return undefined for offsetWidth, so check for null/undefined
179.5793 +	// svg - https://bugzilla.mozilla.org/show_bug.cgi?id=649285
179.5794 +	// MathML - https://bugzilla.mozilla.org/show_bug.cgi?id=491668
179.5795 +	if ( val <= 0 || val == null ) {
179.5796 +		// Fall back to computed then uncomputed css if necessary
179.5797 +		val = curCSS( elem, name, styles );
179.5798 +		if ( val < 0 || val == null ) {
179.5799 +			val = elem.style[ name ];
179.5800 +		}
179.5801 +
179.5802 +		// Computed unit is not pixels. Stop here and return.
179.5803 +		if ( rnumnonpx.test(val) ) {
179.5804 +			return val;
179.5805 +		}
179.5806 +
179.5807 +		// we need the check for style in case a browser which returns unreliable values
179.5808 +		// for getComputedStyle silently falls back to the reliable elem.style
179.5809 +		valueIsBorderBox = isBorderBox &&
179.5810 +			( support.boxSizingReliable() || val === elem.style[ name ] );
179.5811 +
179.5812 +		// Normalize "", auto, and prepare for extra
179.5813 +		val = parseFloat( val ) || 0;
179.5814 +	}
179.5815 +
179.5816 +	// use the active box-sizing model to add/subtract irrelevant styles
179.5817 +	return ( val +
179.5818 +		augmentWidthOrHeight(
179.5819 +			elem,
179.5820 +			name,
179.5821 +			extra || ( isBorderBox ? "border" : "content" ),
179.5822 +			valueIsBorderBox,
179.5823 +			styles
179.5824 +		)
179.5825 +	) + "px";
179.5826 +}
179.5827 +
179.5828 +function showHide( elements, show ) {
179.5829 +	var display, elem, hidden,
179.5830 +		values = [],
179.5831 +		index = 0,
179.5832 +		length = elements.length;
179.5833 +
179.5834 +	for ( ; index < length; index++ ) {
179.5835 +		elem = elements[ index ];
179.5836 +		if ( !elem.style ) {
179.5837 +			continue;
179.5838 +		}
179.5839 +
179.5840 +		values[ index ] = data_priv.get( elem, "olddisplay" );
179.5841 +		display = elem.style.display;
179.5842 +		if ( show ) {
179.5843 +			// Reset the inline display of this element to learn if it is
179.5844 +			// being hidden by cascaded rules or not
179.5845 +			if ( !values[ index ] && display === "none" ) {
179.5846 +				elem.style.display = "";
179.5847 +			}
179.5848 +
179.5849 +			// Set elements which have been overridden with display: none
179.5850 +			// in a stylesheet to whatever the default browser style is
179.5851 +			// for such an element
179.5852 +			if ( elem.style.display === "" && isHidden( elem ) ) {
179.5853 +				values[ index ] = data_priv.access( elem, "olddisplay", defaultDisplay(elem.nodeName) );
179.5854 +			}
179.5855 +		} else {
179.5856 +			hidden = isHidden( elem );
179.5857 +
179.5858 +			if ( display !== "none" || !hidden ) {
179.5859 +				data_priv.set( elem, "olddisplay", hidden ? display : jQuery.css( elem, "display" ) );
179.5860 +			}
179.5861 +		}
179.5862 +	}
179.5863 +
179.5864 +	// Set the display of most of the elements in a second loop
179.5865 +	// to avoid the constant reflow
179.5866 +	for ( index = 0; index < length; index++ ) {
179.5867 +		elem = elements[ index ];
179.5868 +		if ( !elem.style ) {
179.5869 +			continue;
179.5870 +		}
179.5871 +		if ( !show || elem.style.display === "none" || elem.style.display === "" ) {
179.5872 +			elem.style.display = show ? values[ index ] || "" : "none";
179.5873 +		}
179.5874 +	}
179.5875 +
179.5876 +	return elements;
179.5877 +}
179.5878 +
179.5879 +jQuery.extend({
179.5880 +	// Add in style property hooks for overriding the default
179.5881 +	// behavior of getting and setting a style property
179.5882 +	cssHooks: {
179.5883 +		opacity: {
179.5884 +			get: function( elem, computed ) {
179.5885 +				if ( computed ) {
179.5886 +					// We should always get a number back from opacity
179.5887 +					var ret = curCSS( elem, "opacity" );
179.5888 +					return ret === "" ? "1" : ret;
179.5889 +				}
179.5890 +			}
179.5891 +		}
179.5892 +	},
179.5893 +
179.5894 +	// Don't automatically add "px" to these possibly-unitless properties
179.5895 +	cssNumber: {
179.5896 +		"columnCount": true,
179.5897 +		"fillOpacity": true,
179.5898 +		"flexGrow": true,
179.5899 +		"flexShrink": true,
179.5900 +		"fontWeight": true,
179.5901 +		"lineHeight": true,
179.5902 +		"opacity": true,
179.5903 +		"order": true,
179.5904 +		"orphans": true,
179.5905 +		"widows": true,
179.5906 +		"zIndex": true,
179.5907 +		"zoom": true
179.5908 +	},
179.5909 +
179.5910 +	// Add in properties whose names you wish to fix before
179.5911 +	// setting or getting the value
179.5912 +	cssProps: {
179.5913 +		// normalize float css property
179.5914 +		"float": "cssFloat"
179.5915 +	},
179.5916 +
179.5917 +	// Get and set the style property on a DOM Node
179.5918 +	style: function( elem, name, value, extra ) {
179.5919 +		// Don't set styles on text and comment nodes
179.5920 +		if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {
179.5921 +			return;
179.5922 +		}
179.5923 +
179.5924 +		// Make sure that we're working with the right name
179.5925 +		var ret, type, hooks,
179.5926 +			origName = jQuery.camelCase( name ),
179.5927 +			style = elem.style;
179.5928 +
179.5929 +		name = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( style, origName ) );
179.5930 +
179.5931 +		// gets hook for the prefixed version
179.5932 +		// followed by the unprefixed version
179.5933 +		hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
179.5934 +
179.5935 +		// Check if we're setting a value
179.5936 +		if ( value !== undefined ) {
179.5937 +			type = typeof value;
179.5938 +
179.5939 +			// convert relative number strings (+= or -=) to relative numbers. #7345
179.5940 +			if ( type === "string" && (ret = rrelNum.exec( value )) ) {
179.5941 +				value = ( ret[1] + 1 ) * ret[2] + parseFloat( jQuery.css( elem, name ) );
179.5942 +				// Fixes bug #9237
179.5943 +				type = "number";
179.5944 +			}
179.5945 +
179.5946 +			// Make sure that null and NaN values aren't set. See: #7116
179.5947 +			if ( value == null || value !== value ) {
179.5948 +				return;
179.5949 +			}
179.5950 +
179.5951 +			// If a number was passed in, add 'px' to the (except for certain CSS properties)
179.5952 +			if ( type === "number" && !jQuery.cssNumber[ origName ] ) {
179.5953 +				value += "px";
179.5954 +			}
179.5955 +
179.5956 +			// Fixes #8908, it can be done more correctly by specifying setters in cssHooks,
179.5957 +			// but it would mean to define eight (for every problematic property) identical functions
179.5958 +			if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) {
179.5959 +				style[ name ] = "inherit";
179.5960 +			}
179.5961 +
179.5962 +			// If a hook was provided, use that value, otherwise just set the specified value
179.5963 +			if ( !hooks || !("set" in hooks) || (value = hooks.set( elem, value, extra )) !== undefined ) {
179.5964 +				style[ name ] = value;
179.5965 +			}
179.5966 +
179.5967 +		} else {
179.5968 +			// If a hook was provided get the non-computed value from there
179.5969 +			if ( hooks && "get" in hooks && (ret = hooks.get( elem, false, extra )) !== undefined ) {
179.5970 +				return ret;
179.5971 +			}
179.5972 +
179.5973 +			// Otherwise just get the value from the style object
179.5974 +			return style[ name ];
179.5975 +		}
179.5976 +	},
179.5977 +
179.5978 +	css: function( elem, name, extra, styles ) {
179.5979 +		var val, num, hooks,
179.5980 +			origName = jQuery.camelCase( name );
179.5981 +
179.5982 +		// Make sure that we're working with the right name
179.5983 +		name = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( elem.style, origName ) );
179.5984 +
179.5985 +		// gets hook for the prefixed version
179.5986 +		// followed by the unprefixed version
179.5987 +		hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
179.5988 +
179.5989 +		// If a hook was provided get the computed value from there
179.5990 +		if ( hooks && "get" in hooks ) {
179.5991 +			val = hooks.get( elem, true, extra );
179.5992 +		}
179.5993 +
179.5994 +		// Otherwise, if a way to get the computed value exists, use that
179.5995 +		if ( val === undefined ) {
179.5996 +			val = curCSS( elem, name, styles );
179.5997 +		}
179.5998 +
179.5999 +		//convert "normal" to computed value
179.6000 +		if ( val === "normal" && name in cssNormalTransform ) {
179.6001 +			val = cssNormalTransform[ name ];
179.6002 +		}
179.6003 +
179.6004 +		// Return, converting to number if forced or a qualifier was provided and val looks numeric
179.6005 +		if ( extra === "" || extra ) {
179.6006 +			num = parseFloat( val );
179.6007 +			return extra === true || jQuery.isNumeric( num ) ? num || 0 : val;
179.6008 +		}
179.6009 +		return val;
179.6010 +	}
179.6011 +});
179.6012 +
179.6013 +jQuery.each([ "height", "width" ], function( i, name ) {
179.6014 +	jQuery.cssHooks[ name ] = {
179.6015 +		get: function( elem, computed, extra ) {
179.6016 +			if ( computed ) {
179.6017 +				// certain elements can have dimension info if we invisibly show them
179.6018 +				// however, it must have a current display style that would benefit from this
179.6019 +				return rdisplayswap.test( jQuery.css( elem, "display" ) ) && elem.offsetWidth === 0 ?
179.6020 +					jQuery.swap( elem, cssShow, function() {
179.6021 +						return getWidthOrHeight( elem, name, extra );
179.6022 +					}) :
179.6023 +					getWidthOrHeight( elem, name, extra );
179.6024 +			}
179.6025 +		},
179.6026 +
179.6027 +		set: function( elem, value, extra ) {
179.6028 +			var styles = extra && getStyles( elem );
179.6029 +			return setPositiveNumber( elem, value, extra ?
179.6030 +				augmentWidthOrHeight(
179.6031 +					elem,
179.6032 +					name,
179.6033 +					extra,
179.6034 +					jQuery.css( elem, "boxSizing", false, styles ) === "border-box",
179.6035 +					styles
179.6036 +				) : 0
179.6037 +			);
179.6038 +		}
179.6039 +	};
179.6040 +});
179.6041 +
179.6042 +// Support: Android 2.3
179.6043 +jQuery.cssHooks.marginRight = addGetHookIf( support.reliableMarginRight,
179.6044 +	function( elem, computed ) {
179.6045 +		if ( computed ) {
179.6046 +			// WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
179.6047 +			// Work around by temporarily setting element display to inline-block
179.6048 +			return jQuery.swap( elem, { "display": "inline-block" },
179.6049 +				curCSS, [ elem, "marginRight" ] );
179.6050 +		}
179.6051 +	}
179.6052 +);
179.6053 +
179.6054 +// These hooks are used by animate to expand properties
179.6055 +jQuery.each({
179.6056 +	margin: "",
179.6057 +	padding: "",
179.6058 +	border: "Width"
179.6059 +}, function( prefix, suffix ) {
179.6060 +	jQuery.cssHooks[ prefix + suffix ] = {
179.6061 +		expand: function( value ) {
179.6062 +			var i = 0,
179.6063 +				expanded = {},
179.6064 +
179.6065 +				// assumes a single number if not a string
179.6066 +				parts = typeof value === "string" ? value.split(" ") : [ value ];
179.6067 +
179.6068 +			for ( ; i < 4; i++ ) {
179.6069 +				expanded[ prefix + cssExpand[ i ] + suffix ] =
179.6070 +					parts[ i ] || parts[ i - 2 ] || parts[ 0 ];
179.6071 +			}
179.6072 +
179.6073 +			return expanded;
179.6074 +		}
179.6075 +	};
179.6076 +
179.6077 +	if ( !rmargin.test( prefix ) ) {
179.6078 +		jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;
179.6079 +	}
179.6080 +});
179.6081 +
179.6082 +jQuery.fn.extend({
179.6083 +	css: function( name, value ) {
179.6084 +		return access( this, function( elem, name, value ) {
179.6085 +			var styles, len,
179.6086 +				map = {},
179.6087 +				i = 0;
179.6088 +
179.6089 +			if ( jQuery.isArray( name ) ) {
179.6090 +				styles = getStyles( elem );
179.6091 +				len = name.length;
179.6092 +
179.6093 +				for ( ; i < len; i++ ) {
179.6094 +					map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );
179.6095 +				}
179.6096 +
179.6097 +				return map;
179.6098 +			}
179.6099 +
179.6100 +			return value !== undefined ?
179.6101 +				jQuery.style( elem, name, value ) :
179.6102 +				jQuery.css( elem, name );
179.6103 +		}, name, value, arguments.length > 1 );
179.6104 +	},
179.6105 +	show: function() {
179.6106 +		return showHide( this, true );
179.6107 +	},
179.6108 +	hide: function() {
179.6109 +		return showHide( this );
179.6110 +	},
179.6111 +	toggle: function( state ) {
179.6112 +		if ( typeof state === "boolean" ) {
179.6113 +			return state ? this.show() : this.hide();
179.6114 +		}
179.6115 +
179.6116 +		return this.each(function() {
179.6117 +			if ( isHidden( this ) ) {
179.6118 +				jQuery( this ).show();
179.6119 +			} else {
179.6120 +				jQuery( this ).hide();
179.6121 +			}
179.6122 +		});
179.6123 +	}
179.6124 +});
179.6125 +
179.6126 +
179.6127 +function Tween( elem, options, prop, end, easing ) {
179.6128 +	return new Tween.prototype.init( elem, options, prop, end, easing );
179.6129 +}
179.6130 +jQuery.Tween = Tween;
179.6131 +
179.6132 +Tween.prototype = {
179.6133 +	constructor: Tween,
179.6134 +	init: function( elem, options, prop, end, easing, unit ) {
179.6135 +		this.elem = elem;
179.6136 +		this.prop = prop;
179.6137 +		this.easing = easing || "swing";
179.6138 +		this.options = options;
179.6139 +		this.start = this.now = this.cur();
179.6140 +		this.end = end;
179.6141 +		this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" );
179.6142 +	},
179.6143 +	cur: function() {
179.6144 +		var hooks = Tween.propHooks[ this.prop ];
179.6145 +
179.6146 +		return hooks && hooks.get ?
179.6147 +			hooks.get( this ) :
179.6148 +			Tween.propHooks._default.get( this );
179.6149 +	},
179.6150 +	run: function( percent ) {
179.6151 +		var eased,
179.6152 +			hooks = Tween.propHooks[ this.prop ];
179.6153 +
179.6154 +		if ( this.options.duration ) {
179.6155 +			this.pos = eased = jQuery.easing[ this.easing ](
179.6156 +				percent, this.options.duration * percent, 0, 1, this.options.duration
179.6157 +			);
179.6158 +		} else {
179.6159 +			this.pos = eased = percent;
179.6160 +		}
179.6161 +		this.now = ( this.end - this.start ) * eased + this.start;
179.6162 +
179.6163 +		if ( this.options.step ) {
179.6164 +			this.options.step.call( this.elem, this.now, this );
179.6165 +		}
179.6166 +
179.6167 +		if ( hooks && hooks.set ) {
179.6168 +			hooks.set( this );
179.6169 +		} else {
179.6170 +			Tween.propHooks._default.set( this );
179.6171 +		}
179.6172 +		return this;
179.6173 +	}
179.6174 +};
179.6175 +
179.6176 +Tween.prototype.init.prototype = Tween.prototype;
179.6177 +
179.6178 +Tween.propHooks = {
179.6179 +	_default: {
179.6180 +		get: function( tween ) {
179.6181 +			var result;
179.6182 +
179.6183 +			if ( tween.elem[ tween.prop ] != null &&
179.6184 +				(!tween.elem.style || tween.elem.style[ tween.prop ] == null) ) {
179.6185 +				return tween.elem[ tween.prop ];
179.6186 +			}
179.6187 +
179.6188 +			// passing an empty string as a 3rd parameter to .css will automatically
179.6189 +			// attempt a parseFloat and fallback to a string if the parse fails
179.6190 +			// so, simple values such as "10px" are parsed to Float.
179.6191 +			// complex values such as "rotate(1rad)" are returned as is.
179.6192 +			result = jQuery.css( tween.elem, tween.prop, "" );
179.6193 +			// Empty strings, null, undefined and "auto" are converted to 0.
179.6194 +			return !result || result === "auto" ? 0 : result;
179.6195 +		},
179.6196 +		set: function( tween ) {
179.6197 +			// use step hook for back compat - use cssHook if its there - use .style if its
179.6198 +			// available and use plain properties where available
179.6199 +			if ( jQuery.fx.step[ tween.prop ] ) {
179.6200 +				jQuery.fx.step[ tween.prop ]( tween );
179.6201 +			} else if ( tween.elem.style && ( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null || jQuery.cssHooks[ tween.prop ] ) ) {
179.6202 +				jQuery.style( tween.elem, tween.prop, tween.now + tween.unit );
179.6203 +			} else {
179.6204 +				tween.elem[ tween.prop ] = tween.now;
179.6205 +			}
179.6206 +		}
179.6207 +	}
179.6208 +};
179.6209 +
179.6210 +// Support: IE9
179.6211 +// Panic based approach to setting things on disconnected nodes
179.6212 +
179.6213 +Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {
179.6214 +	set: function( tween ) {
179.6215 +		if ( tween.elem.nodeType && tween.elem.parentNode ) {
179.6216 +			tween.elem[ tween.prop ] = tween.now;
179.6217 +		}
179.6218 +	}
179.6219 +};
179.6220 +
179.6221 +jQuery.easing = {
179.6222 +	linear: function( p ) {
179.6223 +		return p;
179.6224 +	},
179.6225 +	swing: function( p ) {
179.6226 +		return 0.5 - Math.cos( p * Math.PI ) / 2;
179.6227 +	}
179.6228 +};
179.6229 +
179.6230 +jQuery.fx = Tween.prototype.init;
179.6231 +
179.6232 +// Back Compat <1.8 extension point
179.6233 +jQuery.fx.step = {};
179.6234 +
179.6235 +
179.6236 +
179.6237 +
179.6238 +var
179.6239 +	fxNow, timerId,
179.6240 +	rfxtypes = /^(?:toggle|show|hide)$/,
179.6241 +	rfxnum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" ),
179.6242 +	rrun = /queueHooks$/,
179.6243 +	animationPrefilters = [ defaultPrefilter ],
179.6244 +	tweeners = {
179.6245 +		"*": [ function( prop, value ) {
179.6246 +			var tween = this.createTween( prop, value ),
179.6247 +				target = tween.cur(),
179.6248 +				parts = rfxnum.exec( value ),
179.6249 +				unit = parts && parts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ),
179.6250 +
179.6251 +				// Starting value computation is required for potential unit mismatches
179.6252 +				start = ( jQuery.cssNumber[ prop ] || unit !== "px" && +target ) &&
179.6253 +					rfxnum.exec( jQuery.css( tween.elem, prop ) ),
179.6254 +				scale = 1,
179.6255 +				maxIterations = 20;
179.6256 +
179.6257 +			if ( start && start[ 3 ] !== unit ) {
179.6258 +				// Trust units reported by jQuery.css
179.6259 +				unit = unit || start[ 3 ];
179.6260 +
179.6261 +				// Make sure we update the tween properties later on
179.6262 +				parts = parts || [];
179.6263 +
179.6264 +				// Iteratively approximate from a nonzero starting point
179.6265 +				start = +target || 1;
179.6266 +
179.6267 +				do {
179.6268 +					// If previous iteration zeroed out, double until we get *something*
179.6269 +					// Use a string for doubling factor so we don't accidentally see scale as unchanged below
179.6270 +					scale = scale || ".5";
179.6271 +
179.6272 +					// Adjust and apply
179.6273 +					start = start / scale;
179.6274 +					jQuery.style( tween.elem, prop, start + unit );
179.6275 +
179.6276 +				// Update scale, tolerating zero or NaN from tween.cur()
179.6277 +				// And breaking the loop if scale is unchanged or perfect, or if we've just had enough
179.6278 +				} while ( scale !== (scale = tween.cur() / target) && scale !== 1 && --maxIterations );
179.6279 +			}
179.6280 +
179.6281 +			// Update tween properties
179.6282 +			if ( parts ) {
179.6283 +				start = tween.start = +start || +target || 0;
179.6284 +				tween.unit = unit;
179.6285 +				// If a +=/-= token was provided, we're doing a relative animation
179.6286 +				tween.end = parts[ 1 ] ?
179.6287 +					start + ( parts[ 1 ] + 1 ) * parts[ 2 ] :
179.6288 +					+parts[ 2 ];
179.6289 +			}
179.6290 +
179.6291 +			return tween;
179.6292 +		} ]
179.6293 +	};
179.6294 +
179.6295 +// Animations created synchronously will run synchronously
179.6296 +function createFxNow() {
179.6297 +	setTimeout(function() {
179.6298 +		fxNow = undefined;
179.6299 +	});
179.6300 +	return ( fxNow = jQuery.now() );
179.6301 +}
179.6302 +
179.6303 +// Generate parameters to create a standard animation
179.6304 +function genFx( type, includeWidth ) {
179.6305 +	var which,
179.6306 +		i = 0,
179.6307 +		attrs = { height: type };
179.6308 +
179.6309 +	// if we include width, step value is 1 to do all cssExpand values,
179.6310 +	// if we don't include width, step value is 2 to skip over Left and Right
179.6311 +	includeWidth = includeWidth ? 1 : 0;
179.6312 +	for ( ; i < 4 ; i += 2 - includeWidth ) {
179.6313 +		which = cssExpand[ i ];
179.6314 +		attrs[ "margin" + which ] = attrs[ "padding" + which ] = type;
179.6315 +	}
179.6316 +
179.6317 +	if ( includeWidth ) {
179.6318 +		attrs.opacity = attrs.width = type;
179.6319 +	}
179.6320 +
179.6321 +	return attrs;
179.6322 +}
179.6323 +
179.6324 +function createTween( value, prop, animation ) {
179.6325 +	var tween,
179.6326 +		collection = ( tweeners[ prop ] || [] ).concat( tweeners[ "*" ] ),
179.6327 +		index = 0,
179.6328 +		length = collection.length;
179.6329 +	for ( ; index < length; index++ ) {
179.6330 +		if ( (tween = collection[ index ].call( animation, prop, value )) ) {
179.6331 +
179.6332 +			// we're done with this property
179.6333 +			return tween;
179.6334 +		}
179.6335 +	}
179.6336 +}
179.6337 +
179.6338 +function defaultPrefilter( elem, props, opts ) {
179.6339 +	/* jshint validthis: true */
179.6340 +	var prop, value, toggle, tween, hooks, oldfire, display, checkDisplay,
179.6341 +		anim = this,
179.6342 +		orig = {},
179.6343 +		style = elem.style,
179.6344 +		hidden = elem.nodeType && isHidden( elem ),
179.6345 +		dataShow = data_priv.get( elem, "fxshow" );
179.6346 +
179.6347 +	// handle queue: false promises
179.6348 +	if ( !opts.queue ) {
179.6349 +		hooks = jQuery._queueHooks( elem, "fx" );
179.6350 +		if ( hooks.unqueued == null ) {
179.6351 +			hooks.unqueued = 0;
179.6352 +			oldfire = hooks.empty.fire;
179.6353 +			hooks.empty.fire = function() {
179.6354 +				if ( !hooks.unqueued ) {
179.6355 +					oldfire();
179.6356 +				}
179.6357 +			};
179.6358 +		}
179.6359 +		hooks.unqueued++;
179.6360 +
179.6361 +		anim.always(function() {
179.6362 +			// doing this makes sure that the complete handler will be called
179.6363 +			// before this completes
179.6364 +			anim.always(function() {
179.6365 +				hooks.unqueued--;
179.6366 +				if ( !jQuery.queue( elem, "fx" ).length ) {
179.6367 +					hooks.empty.fire();
179.6368 +				}
179.6369 +			});
179.6370 +		});
179.6371 +	}
179.6372 +
179.6373 +	// height/width overflow pass
179.6374 +	if ( elem.nodeType === 1 && ( "height" in props || "width" in props ) ) {
179.6375 +		// Make sure that nothing sneaks out
179.6376 +		// Record all 3 overflow attributes because IE9-10 do not
179.6377 +		// change the overflow attribute when overflowX and
179.6378 +		// overflowY are set to the same value
179.6379 +		opts.overflow = [ style.overflow, style.overflowX, style.overflowY ];
179.6380 +
179.6381 +		// Set display property to inline-block for height/width
179.6382 +		// animations on inline elements that are having width/height animated
179.6383 +		display = jQuery.css( elem, "display" );
179.6384 +
179.6385 +		// Test default display if display is currently "none"
179.6386 +		checkDisplay = display === "none" ?
179.6387 +			data_priv.get( elem, "olddisplay" ) || defaultDisplay( elem.nodeName ) : display;
179.6388 +
179.6389 +		if ( checkDisplay === "inline" && jQuery.css( elem, "float" ) === "none" ) {
179.6390 +			style.display = "inline-block";
179.6391 +		}
179.6392 +	}
179.6393 +
179.6394 +	if ( opts.overflow ) {
179.6395 +		style.overflow = "hidden";
179.6396 +		anim.always(function() {
179.6397 +			style.overflow = opts.overflow[ 0 ];
179.6398 +			style.overflowX = opts.overflow[ 1 ];
179.6399 +			style.overflowY = opts.overflow[ 2 ];
179.6400 +		});
179.6401 +	}
179.6402 +
179.6403 +	// show/hide pass
179.6404 +	for ( prop in props ) {
179.6405 +		value = props[ prop ];
179.6406 +		if ( rfxtypes.exec( value ) ) {
179.6407 +			delete props[ prop ];
179.6408 +			toggle = toggle || value === "toggle";
179.6409 +			if ( value === ( hidden ? "hide" : "show" ) ) {
179.6410 +
179.6411 +				// If there is dataShow left over from a stopped hide or show and we are going to proceed with show, we should pretend to be hidden
179.6412 +				if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) {
179.6413 +					hidden = true;
179.6414 +				} else {
179.6415 +					continue;
179.6416 +				}
179.6417 +			}
179.6418 +			orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );
179.6419 +
179.6420 +		// Any non-fx value stops us from restoring the original display value
179.6421 +		} else {
179.6422 +			display = undefined;
179.6423 +		}
179.6424 +	}
179.6425 +
179.6426 +	if ( !jQuery.isEmptyObject( orig ) ) {
179.6427 +		if ( dataShow ) {
179.6428 +			if ( "hidden" in dataShow ) {
179.6429 +				hidden = dataShow.hidden;
179.6430 +			}
179.6431 +		} else {
179.6432 +			dataShow = data_priv.access( elem, "fxshow", {} );
179.6433 +		}
179.6434 +
179.6435 +		// store state if its toggle - enables .stop().toggle() to "reverse"
179.6436 +		if ( toggle ) {
179.6437 +			dataShow.hidden = !hidden;
179.6438 +		}
179.6439 +		if ( hidden ) {
179.6440 +			jQuery( elem ).show();
179.6441 +		} else {
179.6442 +			anim.done(function() {
179.6443 +				jQuery( elem ).hide();
179.6444 +			});
179.6445 +		}
179.6446 +		anim.done(function() {
179.6447 +			var prop;
179.6448 +
179.6449 +			data_priv.remove( elem, "fxshow" );
179.6450 +			for ( prop in orig ) {
179.6451 +				jQuery.style( elem, prop, orig[ prop ] );
179.6452 +			}
179.6453 +		});
179.6454 +		for ( prop in orig ) {
179.6455 +			tween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );
179.6456 +
179.6457 +			if ( !( prop in dataShow ) ) {
179.6458 +				dataShow[ prop ] = tween.start;
179.6459 +				if ( hidden ) {
179.6460 +					tween.end = tween.start;
179.6461 +					tween.start = prop === "width" || prop === "height" ? 1 : 0;
179.6462 +				}
179.6463 +			}
179.6464 +		}
179.6465 +
179.6466 +	// If this is a noop like .hide().hide(), restore an overwritten display value
179.6467 +	} else if ( (display === "none" ? defaultDisplay( elem.nodeName ) : display) === "inline" ) {
179.6468 +		style.display = display;
179.6469 +	}
179.6470 +}
179.6471 +
179.6472 +function propFilter( props, specialEasing ) {
179.6473 +	var index, name, easing, value, hooks;
179.6474 +
179.6475 +	// camelCase, specialEasing and expand cssHook pass
179.6476 +	for ( index in props ) {
179.6477 +		name = jQuery.camelCase( index );
179.6478 +		easing = specialEasing[ name ];
179.6479 +		value = props[ index ];
179.6480 +		if ( jQuery.isArray( value ) ) {
179.6481 +			easing = value[ 1 ];
179.6482 +			value = props[ index ] = value[ 0 ];
179.6483 +		}
179.6484 +
179.6485 +		if ( index !== name ) {
179.6486 +			props[ name ] = value;
179.6487 +			delete props[ index ];
179.6488 +		}
179.6489 +
179.6490 +		hooks = jQuery.cssHooks[ name ];
179.6491 +		if ( hooks && "expand" in hooks ) {
179.6492 +			value = hooks.expand( value );
179.6493 +			delete props[ name ];
179.6494 +
179.6495 +			// not quite $.extend, this wont overwrite keys already present.
179.6496 +			// also - reusing 'index' from above because we have the correct "name"
179.6497 +			for ( index in value ) {
179.6498 +				if ( !( index in props ) ) {
179.6499 +					props[ index ] = value[ index ];
179.6500 +					specialEasing[ index ] = easing;
179.6501 +				}
179.6502 +			}
179.6503 +		} else {
179.6504 +			specialEasing[ name ] = easing;
179.6505 +		}
179.6506 +	}
179.6507 +}
179.6508 +
179.6509 +function Animation( elem, properties, options ) {
179.6510 +	var result,
179.6511 +		stopped,
179.6512 +		index = 0,
179.6513 +		length = animationPrefilters.length,
179.6514 +		deferred = jQuery.Deferred().always( function() {
179.6515 +			// don't match elem in the :animated selector
179.6516 +			delete tick.elem;
179.6517 +		}),
179.6518 +		tick = function() {
179.6519 +			if ( stopped ) {
179.6520 +				return false;
179.6521 +			}
179.6522 +			var currentTime = fxNow || createFxNow(),
179.6523 +				remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),
179.6524 +				// archaic crash bug won't allow us to use 1 - ( 0.5 || 0 ) (#12497)
179.6525 +				temp = remaining / animation.duration || 0,
179.6526 +				percent = 1 - temp,
179.6527 +				index = 0,
179.6528 +				length = animation.tweens.length;
179.6529 +
179.6530 +			for ( ; index < length ; index++ ) {
179.6531 +				animation.tweens[ index ].run( percent );
179.6532 +			}
179.6533 +
179.6534 +			deferred.notifyWith( elem, [ animation, percent, remaining ]);
179.6535 +
179.6536 +			if ( percent < 1 && length ) {
179.6537 +				return remaining;
179.6538 +			} else {
179.6539 +				deferred.resolveWith( elem, [ animation ] );
179.6540 +				return false;
179.6541 +			}
179.6542 +		},
179.6543 +		animation = deferred.promise({
179.6544 +			elem: elem,
179.6545 +			props: jQuery.extend( {}, properties ),
179.6546 +			opts: jQuery.extend( true, { specialEasing: {} }, options ),
179.6547 +			originalProperties: properties,
179.6548 +			originalOptions: options,
179.6549 +			startTime: fxNow || createFxNow(),
179.6550 +			duration: options.duration,
179.6551 +			tweens: [],
179.6552 +			createTween: function( prop, end ) {
179.6553 +				var tween = jQuery.Tween( elem, animation.opts, prop, end,
179.6554 +						animation.opts.specialEasing[ prop ] || animation.opts.easing );
179.6555 +				animation.tweens.push( tween );
179.6556 +				return tween;
179.6557 +			},
179.6558 +			stop: function( gotoEnd ) {
179.6559 +				var index = 0,
179.6560 +					// if we are going to the end, we want to run all the tweens
179.6561 +					// otherwise we skip this part
179.6562 +					length = gotoEnd ? animation.tweens.length : 0;
179.6563 +				if ( stopped ) {
179.6564 +					return this;
179.6565 +				}
179.6566 +				stopped = true;
179.6567 +				for ( ; index < length ; index++ ) {
179.6568 +					animation.tweens[ index ].run( 1 );
179.6569 +				}
179.6570 +
179.6571 +				// resolve when we played the last frame
179.6572 +				// otherwise, reject
179.6573 +				if ( gotoEnd ) {
179.6574 +					deferred.resolveWith( elem, [ animation, gotoEnd ] );
179.6575 +				} else {
179.6576 +					deferred.rejectWith( elem, [ animation, gotoEnd ] );
179.6577 +				}
179.6578 +				return this;
179.6579 +			}
179.6580 +		}),
179.6581 +		props = animation.props;
179.6582 +
179.6583 +	propFilter( props, animation.opts.specialEasing );
179.6584 +
179.6585 +	for ( ; index < length ; index++ ) {
179.6586 +		result = animationPrefilters[ index ].call( animation, elem, props, animation.opts );
179.6587 +		if ( result ) {
179.6588 +			return result;
179.6589 +		}
179.6590 +	}
179.6591 +
179.6592 +	jQuery.map( props, createTween, animation );
179.6593 +
179.6594 +	if ( jQuery.isFunction( animation.opts.start ) ) {
179.6595 +		animation.opts.start.call( elem, animation );
179.6596 +	}
179.6597 +
179.6598 +	jQuery.fx.timer(
179.6599 +		jQuery.extend( tick, {
179.6600 +			elem: elem,
179.6601 +			anim: animation,
179.6602 +			queue: animation.opts.queue
179.6603 +		})
179.6604 +	);
179.6605 +
179.6606 +	// attach callbacks from options
179.6607 +	return animation.progress( animation.opts.progress )
179.6608 +		.done( animation.opts.done, animation.opts.complete )
179.6609 +		.fail( animation.opts.fail )
179.6610 +		.always( animation.opts.always );
179.6611 +}
179.6612 +
179.6613 +jQuery.Animation = jQuery.extend( Animation, {
179.6614 +
179.6615 +	tweener: function( props, callback ) {
179.6616 +		if ( jQuery.isFunction( props ) ) {
179.6617 +			callback = props;
179.6618 +			props = [ "*" ];
179.6619 +		} else {
179.6620 +			props = props.split(" ");
179.6621 +		}
179.6622 +
179.6623 +		var prop,
179.6624 +			index = 0,
179.6625 +			length = props.length;
179.6626 +
179.6627 +		for ( ; index < length ; index++ ) {
179.6628 +			prop = props[ index ];
179.6629 +			tweeners[ prop ] = tweeners[ prop ] || [];
179.6630 +			tweeners[ prop ].unshift( callback );
179.6631 +		}
179.6632 +	},
179.6633 +
179.6634 +	prefilter: function( callback, prepend ) {
179.6635 +		if ( prepend ) {
179.6636 +			animationPrefilters.unshift( callback );
179.6637 +		} else {
179.6638 +			animationPrefilters.push( callback );
179.6639 +		}
179.6640 +	}
179.6641 +});
179.6642 +
179.6643 +jQuery.speed = function( speed, easing, fn ) {
179.6644 +	var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : {
179.6645 +		complete: fn || !fn && easing ||
179.6646 +			jQuery.isFunction( speed ) && speed,
179.6647 +		duration: speed,
179.6648 +		easing: fn && easing || easing && !jQuery.isFunction( easing ) && easing
179.6649 +	};
179.6650 +
179.6651 +	opt.duration = jQuery.fx.off ? 0 : typeof opt.duration === "number" ? opt.duration :
179.6652 +		opt.duration in jQuery.fx.speeds ? jQuery.fx.speeds[ opt.duration ] : jQuery.fx.speeds._default;
179.6653 +
179.6654 +	// normalize opt.queue - true/undefined/null -> "fx"
179.6655 +	if ( opt.queue == null || opt.queue === true ) {
179.6656 +		opt.queue = "fx";
179.6657 +	}
179.6658 +
179.6659 +	// Queueing
179.6660 +	opt.old = opt.complete;
179.6661 +
179.6662 +	opt.complete = function() {
179.6663 +		if ( jQuery.isFunction( opt.old ) ) {
179.6664 +			opt.old.call( this );
179.6665 +		}
179.6666 +
179.6667 +		if ( opt.queue ) {
179.6668 +			jQuery.dequeue( this, opt.queue );
179.6669 +		}
179.6670 +	};
179.6671 +
179.6672 +	return opt;
179.6673 +};
179.6674 +
179.6675 +jQuery.fn.extend({
179.6676 +	fadeTo: function( speed, to, easing, callback ) {
179.6677 +
179.6678 +		// show any hidden elements after setting opacity to 0
179.6679 +		return this.filter( isHidden ).css( "opacity", 0 ).show()
179.6680 +
179.6681 +			// animate to the value specified
179.6682 +			.end().animate({ opacity: to }, speed, easing, callback );
179.6683 +	},
179.6684 +	animate: function( prop, speed, easing, callback ) {
179.6685 +		var empty = jQuery.isEmptyObject( prop ),
179.6686 +			optall = jQuery.speed( speed, easing, callback ),
179.6687 +			doAnimation = function() {
179.6688 +				// Operate on a copy of prop so per-property easing won't be lost
179.6689 +				var anim = Animation( this, jQuery.extend( {}, prop ), optall );
179.6690 +
179.6691 +				// Empty animations, or finishing resolves immediately
179.6692 +				if ( empty || data_priv.get( this, "finish" ) ) {
179.6693 +					anim.stop( true );
179.6694 +				}
179.6695 +			};
179.6696 +			doAnimation.finish = doAnimation;
179.6697 +
179.6698 +		return empty || optall.queue === false ?
179.6699 +			this.each( doAnimation ) :
179.6700 +			this.queue( optall.queue, doAnimation );
179.6701 +	},
179.6702 +	stop: function( type, clearQueue, gotoEnd ) {
179.6703 +		var stopQueue = function( hooks ) {
179.6704 +			var stop = hooks.stop;
179.6705 +			delete hooks.stop;
179.6706 +			stop( gotoEnd );
179.6707 +		};
179.6708 +
179.6709 +		if ( typeof type !== "string" ) {
179.6710 +			gotoEnd = clearQueue;
179.6711 +			clearQueue = type;
179.6712 +			type = undefined;
179.6713 +		}
179.6714 +		if ( clearQueue && type !== false ) {
179.6715 +			this.queue( type || "fx", [] );
179.6716 +		}
179.6717 +
179.6718 +		return this.each(function() {
179.6719 +			var dequeue = true,
179.6720 +				index = type != null && type + "queueHooks",
179.6721 +				timers = jQuery.timers,
179.6722 +				data = data_priv.get( this );
179.6723 +
179.6724 +			if ( index ) {
179.6725 +				if ( data[ index ] && data[ index ].stop ) {
179.6726 +					stopQueue( data[ index ] );
179.6727 +				}
179.6728 +			} else {
179.6729 +				for ( index in data ) {
179.6730 +					if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {
179.6731 +						stopQueue( data[ index ] );
179.6732 +					}
179.6733 +				}
179.6734 +			}
179.6735 +
179.6736 +			for ( index = timers.length; index--; ) {
179.6737 +				if ( timers[ index ].elem === this && (type == null || timers[ index ].queue === type) ) {
179.6738 +					timers[ index ].anim.stop( gotoEnd );
179.6739 +					dequeue = false;
179.6740 +					timers.splice( index, 1 );
179.6741 +				}
179.6742 +			}
179.6743 +
179.6744 +			// start the next in the queue if the last step wasn't forced
179.6745 +			// timers currently will call their complete callbacks, which will dequeue
179.6746 +			// but only if they were gotoEnd
179.6747 +			if ( dequeue || !gotoEnd ) {
179.6748 +				jQuery.dequeue( this, type );
179.6749 +			}
179.6750 +		});
179.6751 +	},
179.6752 +	finish: function( type ) {
179.6753 +		if ( type !== false ) {
179.6754 +			type = type || "fx";
179.6755 +		}
179.6756 +		return this.each(function() {
179.6757 +			var index,
179.6758 +				data = data_priv.get( this ),
179.6759 +				queue = data[ type + "queue" ],
179.6760 +				hooks = data[ type + "queueHooks" ],
179.6761 +				timers = jQuery.timers,
179.6762 +				length = queue ? queue.length : 0;
179.6763 +
179.6764 +			// enable finishing flag on private data
179.6765 +			data.finish = true;
179.6766 +
179.6767 +			// empty the queue first
179.6768 +			jQuery.queue( this, type, [] );
179.6769 +
179.6770 +			if ( hooks && hooks.stop ) {
179.6771 +				hooks.stop.call( this, true );
179.6772 +			}
179.6773 +
179.6774 +			// look for any active animations, and finish them
179.6775 +			for ( index = timers.length; index--; ) {
179.6776 +				if ( timers[ index ].elem === this && timers[ index ].queue === type ) {
179.6777 +					timers[ index ].anim.stop( true );
179.6778 +					timers.splice( index, 1 );
179.6779 +				}
179.6780 +			}
179.6781 +
179.6782 +			// look for any animations in the old queue and finish them
179.6783 +			for ( index = 0; index < length; index++ ) {
179.6784 +				if ( queue[ index ] && queue[ index ].finish ) {
179.6785 +					queue[ index ].finish.call( this );
179.6786 +				}
179.6787 +			}
179.6788 +
179.6789 +			// turn off finishing flag
179.6790 +			delete data.finish;
179.6791 +		});
179.6792 +	}
179.6793 +});
179.6794 +
179.6795 +jQuery.each([ "toggle", "show", "hide" ], function( i, name ) {
179.6796 +	var cssFn = jQuery.fn[ name ];
179.6797 +	jQuery.fn[ name ] = function( speed, easing, callback ) {
179.6798 +		return speed == null || typeof speed === "boolean" ?
179.6799 +			cssFn.apply( this, arguments ) :
179.6800 +			this.animate( genFx( name, true ), speed, easing, callback );
179.6801 +	};
179.6802 +});
179.6803 +
179.6804 +// Generate shortcuts for custom animations
179.6805 +jQuery.each({
179.6806 +	slideDown: genFx("show"),
179.6807 +	slideUp: genFx("hide"),
179.6808 +	slideToggle: genFx("toggle"),
179.6809 +	fadeIn: { opacity: "show" },
179.6810 +	fadeOut: { opacity: "hide" },
179.6811 +	fadeToggle: { opacity: "toggle" }
179.6812 +}, function( name, props ) {
179.6813 +	jQuery.fn[ name ] = function( speed, easing, callback ) {
179.6814 +		return this.animate( props, speed, easing, callback );
179.6815 +	};
179.6816 +});
179.6817 +
179.6818 +jQuery.timers = [];
179.6819 +jQuery.fx.tick = function() {
179.6820 +	var timer,
179.6821 +		i = 0,
179.6822 +		timers = jQuery.timers;
179.6823 +
179.6824 +	fxNow = jQuery.now();
179.6825 +
179.6826 +	for ( ; i < timers.length; i++ ) {
179.6827 +		timer = timers[ i ];
179.6828 +		// Checks the timer has not already been removed
179.6829 +		if ( !timer() && timers[ i ] === timer ) {
179.6830 +			timers.splice( i--, 1 );
179.6831 +		}
179.6832 +	}
179.6833 +
179.6834 +	if ( !timers.length ) {
179.6835 +		jQuery.fx.stop();
179.6836 +	}
179.6837 +	fxNow = undefined;
179.6838 +};
179.6839 +
179.6840 +jQuery.fx.timer = function( timer ) {
179.6841 +	jQuery.timers.push( timer );
179.6842 +	if ( timer() ) {
179.6843 +		jQuery.fx.start();
179.6844 +	} else {
179.6845 +		jQuery.timers.pop();
179.6846 +	}
179.6847 +};
179.6848 +
179.6849 +jQuery.fx.interval = 13;
179.6850 +
179.6851 +jQuery.fx.start = function() {
179.6852 +	if ( !timerId ) {
179.6853 +		timerId = setInterval( jQuery.fx.tick, jQuery.fx.interval );
179.6854 +	}
179.6855 +};
179.6856 +
179.6857 +jQuery.fx.stop = function() {
179.6858 +	clearInterval( timerId );
179.6859 +	timerId = null;
179.6860 +};
179.6861 +
179.6862 +jQuery.fx.speeds = {
179.6863 +	slow: 600,
179.6864 +	fast: 200,
179.6865 +	// Default speed
179.6866 +	_default: 400
179.6867 +};
179.6868 +
179.6869 +
179.6870 +// Based off of the plugin by Clint Helfers, with permission.
179.6871 +// http://blindsignals.com/index.php/2009/07/jquery-delay/
179.6872 +jQuery.fn.delay = function( time, type ) {
179.6873 +	time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;
179.6874 +	type = type || "fx";
179.6875 +
179.6876 +	return this.queue( type, function( next, hooks ) {
179.6877 +		var timeout = setTimeout( next, time );
179.6878 +		hooks.stop = function() {
179.6879 +			clearTimeout( timeout );
179.6880 +		};
179.6881 +	});
179.6882 +};
179.6883 +
179.6884 +
179.6885 +(function() {
179.6886 +	var input = document.createElement( "input" ),
179.6887 +		select = document.createElement( "select" ),
179.6888 +		opt = select.appendChild( document.createElement( "option" ) );
179.6889 +
179.6890 +	input.type = "checkbox";
179.6891 +
179.6892 +	// Support: iOS 5.1, Android 4.x, Android 2.3
179.6893 +	// Check the default checkbox/radio value ("" on old WebKit; "on" elsewhere)
179.6894 +	support.checkOn = input.value !== "";
179.6895 +
179.6896 +	// Must access the parent to make an option select properly
179.6897 +	// Support: IE9, IE10
179.6898 +	support.optSelected = opt.selected;
179.6899 +
179.6900 +	// Make sure that the options inside disabled selects aren't marked as disabled
179.6901 +	// (WebKit marks them as disabled)
179.6902 +	select.disabled = true;
179.6903 +	support.optDisabled = !opt.disabled;
179.6904 +
179.6905 +	// Check if an input maintains its value after becoming a radio
179.6906 +	// Support: IE9, IE10
179.6907 +	input = document.createElement( "input" );
179.6908 +	input.value = "t";
179.6909 +	input.type = "radio";
179.6910 +	support.radioValue = input.value === "t";
179.6911 +})();
179.6912 +
179.6913 +
179.6914 +var nodeHook, boolHook,
179.6915 +	attrHandle = jQuery.expr.attrHandle;
179.6916 +
179.6917 +jQuery.fn.extend({
179.6918 +	attr: function( name, value ) {
179.6919 +		return access( this, jQuery.attr, name, value, arguments.length > 1 );
179.6920 +	},
179.6921 +
179.6922 +	removeAttr: function( name ) {
179.6923 +		return this.each(function() {
179.6924 +			jQuery.removeAttr( this, name );
179.6925 +		});
179.6926 +	}
179.6927 +});
179.6928 +
179.6929 +jQuery.extend({
179.6930 +	attr: function( elem, name, value ) {
179.6931 +		var hooks, ret,
179.6932 +			nType = elem.nodeType;
179.6933 +
179.6934 +		// don't get/set attributes on text, comment and attribute nodes
179.6935 +		if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {
179.6936 +			return;
179.6937 +		}
179.6938 +
179.6939 +		// Fallback to prop when attributes are not supported
179.6940 +		if ( typeof elem.getAttribute === strundefined ) {
179.6941 +			return jQuery.prop( elem, name, value );
179.6942 +		}
179.6943 +
179.6944 +		// All attributes are lowercase
179.6945 +		// Grab necessary hook if one is defined
179.6946 +		if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {
179.6947 +			name = name.toLowerCase();
179.6948 +			hooks = jQuery.attrHooks[ name ] ||
179.6949 +				( jQuery.expr.match.bool.test( name ) ? boolHook : nodeHook );
179.6950 +		}
179.6951 +
179.6952 +		if ( value !== undefined ) {
179.6953 +
179.6954 +			if ( value === null ) {
179.6955 +				jQuery.removeAttr( elem, name );
179.6956 +
179.6957 +			} else if ( hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) {
179.6958 +				return ret;
179.6959 +
179.6960 +			} else {
179.6961 +				elem.setAttribute( name, value + "" );
179.6962 +				return value;
179.6963 +			}
179.6964 +
179.6965 +		} else if ( hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ) {
179.6966 +			return ret;
179.6967 +
179.6968 +		} else {
179.6969 +			ret = jQuery.find.attr( elem, name );
179.6970 +
179.6971 +			// Non-existent attributes return null, we normalize to undefined
179.6972 +			return ret == null ?
179.6973 +				undefined :
179.6974 +				ret;
179.6975 +		}
179.6976 +	},
179.6977 +
179.6978 +	removeAttr: function( elem, value ) {
179.6979 +		var name, propName,
179.6980 +			i = 0,
179.6981 +			attrNames = value && value.match( rnotwhite );
179.6982 +
179.6983 +		if ( attrNames && elem.nodeType === 1 ) {
179.6984 +			while ( (name = attrNames[i++]) ) {
179.6985 +				propName = jQuery.propFix[ name ] || name;
179.6986 +
179.6987 +				// Boolean attributes get special treatment (#10870)
179.6988 +				if ( jQuery.expr.match.bool.test( name ) ) {
179.6989 +					// Set corresponding property to false
179.6990 +					elem[ propName ] = false;
179.6991 +				}
179.6992 +
179.6993 +				elem.removeAttribute( name );
179.6994 +			}
179.6995 +		}
179.6996 +	},
179.6997 +
179.6998 +	attrHooks: {
179.6999 +		type: {
179.7000 +			set: function( elem, value ) {
179.7001 +				if ( !support.radioValue && value === "radio" &&
179.7002 +					jQuery.nodeName( elem, "input" ) ) {
179.7003 +					// Setting the type on a radio button after the value resets the value in IE6-9
179.7004 +					// Reset value to default in case type is set after value during creation
179.7005 +					var val = elem.value;
179.7006 +					elem.setAttribute( "type", value );
179.7007 +					if ( val ) {
179.7008 +						elem.value = val;
179.7009 +					}
179.7010 +					return value;
179.7011 +				}
179.7012 +			}
179.7013 +		}
179.7014 +	}
179.7015 +});
179.7016 +
179.7017 +// Hooks for boolean attributes
179.7018 +boolHook = {
179.7019 +	set: function( elem, value, name ) {
179.7020 +		if ( value === false ) {
179.7021 +			// Remove boolean attributes when set to false
179.7022 +			jQuery.removeAttr( elem, name );
179.7023 +		} else {
179.7024 +			elem.setAttribute( name, name );
179.7025 +		}
179.7026 +		return name;
179.7027 +	}
179.7028 +};
179.7029 +jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( i, name ) {
179.7030 +	var getter = attrHandle[ name ] || jQuery.find.attr;
179.7031 +
179.7032 +	attrHandle[ name ] = function( elem, name, isXML ) {
179.7033 +		var ret, handle;
179.7034 +		if ( !isXML ) {
179.7035 +			// Avoid an infinite loop by temporarily removing this function from the getter
179.7036 +			handle = attrHandle[ name ];
179.7037 +			attrHandle[ name ] = ret;
179.7038 +			ret = getter( elem, name, isXML ) != null ?
179.7039 +				name.toLowerCase() :
179.7040 +				null;
179.7041 +			attrHandle[ name ] = handle;
179.7042 +		}
179.7043 +		return ret;
179.7044 +	};
179.7045 +});
179.7046 +
179.7047 +
179.7048 +
179.7049 +
179.7050 +var rfocusable = /^(?:input|select|textarea|button)$/i;
179.7051 +
179.7052 +jQuery.fn.extend({
179.7053 +	prop: function( name, value ) {
179.7054 +		return access( this, jQuery.prop, name, value, arguments.length > 1 );
179.7055 +	},
179.7056 +
179.7057 +	removeProp: function( name ) {
179.7058 +		return this.each(function() {
179.7059 +			delete this[ jQuery.propFix[ name ] || name ];
179.7060 +		});
179.7061 +	}
179.7062 +});
179.7063 +
179.7064 +jQuery.extend({
179.7065 +	propFix: {
179.7066 +		"for": "htmlFor",
179.7067 +		"class": "className"
179.7068 +	},
179.7069 +
179.7070 +	prop: function( elem, name, value ) {
179.7071 +		var ret, hooks, notxml,
179.7072 +			nType = elem.nodeType;
179.7073 +
179.7074 +		// don't get/set properties on text, comment and attribute nodes
179.7075 +		if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {
179.7076 +			return;
179.7077 +		}
179.7078 +
179.7079 +		notxml = nType !== 1 || !jQuery.isXMLDoc( elem );
179.7080 +
179.7081 +		if ( notxml ) {
179.7082 +			// Fix name and attach hooks
179.7083 +			name = jQuery.propFix[ name ] || name;
179.7084 +			hooks = jQuery.propHooks[ name ];
179.7085 +		}
179.7086 +
179.7087 +		if ( value !== undefined ) {
179.7088 +			return hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ?
179.7089 +				ret :
179.7090 +				( elem[ name ] = value );
179.7091 +
179.7092 +		} else {
179.7093 +			return hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ?
179.7094 +				ret :
179.7095 +				elem[ name ];
179.7096 +		}
179.7097 +	},
179.7098 +
179.7099 +	propHooks: {
179.7100 +		tabIndex: {
179.7101 +			get: function( elem ) {
179.7102 +				return elem.hasAttribute( "tabindex" ) || rfocusable.test( elem.nodeName ) || elem.href ?
179.7103 +					elem.tabIndex :
179.7104 +					-1;
179.7105 +			}
179.7106 +		}
179.7107 +	}
179.7108 +});
179.7109 +
179.7110 +// Support: IE9+
179.7111 +// Selectedness for an option in an optgroup can be inaccurate
179.7112 +if ( !support.optSelected ) {
179.7113 +	jQuery.propHooks.selected = {
179.7114 +		get: function( elem ) {
179.7115 +			var parent = elem.parentNode;
179.7116 +			if ( parent && parent.parentNode ) {
179.7117 +				parent.parentNode.selectedIndex;
179.7118 +			}
179.7119 +			return null;
179.7120 +		}
179.7121 +	};
179.7122 +}
179.7123 +
179.7124 +jQuery.each([
179.7125 +	"tabIndex",
179.7126 +	"readOnly",
179.7127 +	"maxLength",
179.7128 +	"cellSpacing",
179.7129 +	"cellPadding",
179.7130 +	"rowSpan",
179.7131 +	"colSpan",
179.7132 +	"useMap",
179.7133 +	"frameBorder",
179.7134 +	"contentEditable"
179.7135 +], function() {
179.7136 +	jQuery.propFix[ this.toLowerCase() ] = this;
179.7137 +});
179.7138 +
179.7139 +
179.7140 +
179.7141 +
179.7142 +var rclass = /[\t\r\n\f]/g;
179.7143 +
179.7144 +jQuery.fn.extend({
179.7145 +	addClass: function( value ) {
179.7146 +		var classes, elem, cur, clazz, j, finalValue,
179.7147 +			proceed = typeof value === "string" && value,
179.7148 +			i = 0,
179.7149 +			len = this.length;
179.7150 +
179.7151 +		if ( jQuery.isFunction( value ) ) {
179.7152 +			return this.each(function( j ) {
179.7153 +				jQuery( this ).addClass( value.call( this, j, this.className ) );
179.7154 +			});
179.7155 +		}
179.7156 +
179.7157 +		if ( proceed ) {
179.7158 +			// The disjunction here is for better compressibility (see removeClass)
179.7159 +			classes = ( value || "" ).match( rnotwhite ) || [];
179.7160 +
179.7161 +			for ( ; i < len; i++ ) {
179.7162 +				elem = this[ i ];
179.7163 +				cur = elem.nodeType === 1 && ( elem.className ?
179.7164 +					( " " + elem.className + " " ).replace( rclass, " " ) :
179.7165 +					" "
179.7166 +				);
179.7167 +
179.7168 +				if ( cur ) {
179.7169 +					j = 0;
179.7170 +					while ( (clazz = classes[j++]) ) {
179.7171 +						if ( cur.indexOf( " " + clazz + " " ) < 0 ) {
179.7172 +							cur += clazz + " ";
179.7173 +						}
179.7174 +					}
179.7175 +
179.7176 +					// only assign if different to avoid unneeded rendering.
179.7177 +					finalValue = jQuery.trim( cur );
179.7178 +					if ( elem.className !== finalValue ) {
179.7179 +						elem.className = finalValue;
179.7180 +					}
179.7181 +				}
179.7182 +			}
179.7183 +		}
179.7184 +
179.7185 +		return this;
179.7186 +	},
179.7187 +
179.7188 +	removeClass: function( value ) {
179.7189 +		var classes, elem, cur, clazz, j, finalValue,
179.7190 +			proceed = arguments.length === 0 || typeof value === "string" && value,
179.7191 +			i = 0,
179.7192 +			len = this.length;
179.7193 +
179.7194 +		if ( jQuery.isFunction( value ) ) {
179.7195 +			return this.each(function( j ) {
179.7196 +				jQuery( this ).removeClass( value.call( this, j, this.className ) );
179.7197 +			});
179.7198 +		}
179.7199 +		if ( proceed ) {
179.7200 +			classes = ( value || "" ).match( rnotwhite ) || [];
179.7201 +
179.7202 +			for ( ; i < len; i++ ) {
179.7203 +				elem = this[ i ];
179.7204 +				// This expression is here for better compressibility (see addClass)
179.7205 +				cur = elem.nodeType === 1 && ( elem.className ?
179.7206 +					( " " + elem.className + " " ).replace( rclass, " " ) :
179.7207 +					""
179.7208 +				);
179.7209 +
179.7210 +				if ( cur ) {
179.7211 +					j = 0;
179.7212 +					while ( (clazz = classes[j++]) ) {
179.7213 +						// Remove *all* instances
179.7214 +						while ( cur.indexOf( " " + clazz + " " ) >= 0 ) {
179.7215 +							cur = cur.replace( " " + clazz + " ", " " );
179.7216 +						}
179.7217 +					}
179.7218 +
179.7219 +					// only assign if different to avoid unneeded rendering.
179.7220 +					finalValue = value ? jQuery.trim( cur ) : "";
179.7221 +					if ( elem.className !== finalValue ) {
179.7222 +						elem.className = finalValue;
179.7223 +					}
179.7224 +				}
179.7225 +			}
179.7226 +		}
179.7227 +
179.7228 +		return this;
179.7229 +	},
179.7230 +
179.7231 +	toggleClass: function( value, stateVal ) {
179.7232 +		var type = typeof value;
179.7233 +
179.7234 +		if ( typeof stateVal === "boolean" && type === "string" ) {
179.7235 +			return stateVal ? this.addClass( value ) : this.removeClass( value );
179.7236 +		}
179.7237 +
179.7238 +		if ( jQuery.isFunction( value ) ) {
179.7239 +			return this.each(function( i ) {
179.7240 +				jQuery( this ).toggleClass( value.call(this, i, this.className, stateVal), stateVal );
179.7241 +			});
179.7242 +		}
179.7243 +
179.7244 +		return this.each(function() {
179.7245 +			if ( type === "string" ) {
179.7246 +				// toggle individual class names
179.7247 +				var className,
179.7248 +					i = 0,
179.7249 +					self = jQuery( this ),
179.7250 +					classNames = value.match( rnotwhite ) || [];
179.7251 +
179.7252 +				while ( (className = classNames[ i++ ]) ) {
179.7253 +					// check each className given, space separated list
179.7254 +					if ( self.hasClass( className ) ) {
179.7255 +						self.removeClass( className );
179.7256 +					} else {
179.7257 +						self.addClass( className );
179.7258 +					}
179.7259 +				}
179.7260 +
179.7261 +			// Toggle whole class name
179.7262 +			} else if ( type === strundefined || type === "boolean" ) {
179.7263 +				if ( this.className ) {
179.7264 +					// store className if set
179.7265 +					data_priv.set( this, "__className__", this.className );
179.7266 +				}
179.7267 +
179.7268 +				// If the element has a class name or if we're passed "false",
179.7269 +				// then remove the whole classname (if there was one, the above saved it).
179.7270 +				// Otherwise bring back whatever was previously saved (if anything),
179.7271 +				// falling back to the empty string if nothing was stored.
179.7272 +				this.className = this.className || value === false ? "" : data_priv.get( this, "__className__" ) || "";
179.7273 +			}
179.7274 +		});
179.7275 +	},
179.7276 +
179.7277 +	hasClass: function( selector ) {
179.7278 +		var className = " " + selector + " ",
179.7279 +			i = 0,
179.7280 +			l = this.length;
179.7281 +		for ( ; i < l; i++ ) {
179.7282 +			if ( this[i].nodeType === 1 && (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) >= 0 ) {
179.7283 +				return true;
179.7284 +			}
179.7285 +		}
179.7286 +
179.7287 +		return false;
179.7288 +	}
179.7289 +});
179.7290 +
179.7291 +
179.7292 +
179.7293 +
179.7294 +var rreturn = /\r/g;
179.7295 +
179.7296 +jQuery.fn.extend({
179.7297 +	val: function( value ) {
179.7298 +		var hooks, ret, isFunction,
179.7299 +			elem = this[0];
179.7300 +
179.7301 +		if ( !arguments.length ) {
179.7302 +			if ( elem ) {
179.7303 +				hooks = jQuery.valHooks[ elem.type ] || jQuery.valHooks[ elem.nodeName.toLowerCase() ];
179.7304 +
179.7305 +				if ( hooks && "get" in hooks && (ret = hooks.get( elem, "value" )) !== undefined ) {
179.7306 +					return ret;
179.7307 +				}
179.7308 +
179.7309 +				ret = elem.value;
179.7310 +
179.7311 +				return typeof ret === "string" ?
179.7312 +					// handle most common string cases
179.7313 +					ret.replace(rreturn, "") :
179.7314 +					// handle cases where value is null/undef or number
179.7315 +					ret == null ? "" : ret;
179.7316 +			}
179.7317 +
179.7318 +			return;
179.7319 +		}
179.7320 +
179.7321 +		isFunction = jQuery.isFunction( value );
179.7322 +
179.7323 +		return this.each(function( i ) {
179.7324 +			var val;
179.7325 +
179.7326 +			if ( this.nodeType !== 1 ) {
179.7327 +				return;
179.7328 +			}
179.7329 +
179.7330 +			if ( isFunction ) {
179.7331 +				val = value.call( this, i, jQuery( this ).val() );
179.7332 +			} else {
179.7333 +				val = value;
179.7334 +			}
179.7335 +
179.7336 +			// Treat null/undefined as ""; convert numbers to string
179.7337 +			if ( val == null ) {
179.7338 +				val = "";
179.7339 +
179.7340 +			} else if ( typeof val === "number" ) {
179.7341 +				val += "";
179.7342 +
179.7343 +			} else if ( jQuery.isArray( val ) ) {
179.7344 +				val = jQuery.map( val, function( value ) {
179.7345 +					return value == null ? "" : value + "";
179.7346 +				});
179.7347 +			}
179.7348 +
179.7349 +			hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];
179.7350 +
179.7351 +			// If set returns undefined, fall back to normal setting
179.7352 +			if ( !hooks || !("set" in hooks) || hooks.set( this, val, "value" ) === undefined ) {
179.7353 +				this.value = val;
179.7354 +			}
179.7355 +		});
179.7356 +	}
179.7357 +});
179.7358 +
179.7359 +jQuery.extend({
179.7360 +	valHooks: {
179.7361 +		option: {
179.7362 +			get: function( elem ) {
179.7363 +				var val = jQuery.find.attr( elem, "value" );
179.7364 +				return val != null ?
179.7365 +					val :
179.7366 +					// Support: IE10-11+
179.7367 +					// option.text throws exceptions (#14686, #14858)
179.7368 +					jQuery.trim( jQuery.text( elem ) );
179.7369 +			}
179.7370 +		},
179.7371 +		select: {
179.7372 +			get: function( elem ) {
179.7373 +				var value, option,
179.7374 +					options = elem.options,
179.7375 +					index = elem.selectedIndex,
179.7376 +					one = elem.type === "select-one" || index < 0,
179.7377 +					values = one ? null : [],
179.7378 +					max = one ? index + 1 : options.length,
179.7379 +					i = index < 0 ?
179.7380 +						max :
179.7381 +						one ? index : 0;
179.7382 +
179.7383 +				// Loop through all the selected options
179.7384 +				for ( ; i < max; i++ ) {
179.7385 +					option = options[ i ];
179.7386 +
179.7387 +					// IE6-9 doesn't update selected after form reset (#2551)
179.7388 +					if ( ( option.selected || i === index ) &&
179.7389 +							// Don't return options that are disabled or in a disabled optgroup
179.7390 +							( support.optDisabled ? !option.disabled : option.getAttribute( "disabled" ) === null ) &&
179.7391 +							( !option.parentNode.disabled || !jQuery.nodeName( option.parentNode, "optgroup" ) ) ) {
179.7392 +
179.7393 +						// Get the specific value for the option
179.7394 +						value = jQuery( option ).val();
179.7395 +
179.7396 +						// We don't need an array for one selects
179.7397 +						if ( one ) {
179.7398 +							return value;
179.7399 +						}
179.7400 +
179.7401 +						// Multi-Selects return an array
179.7402 +						values.push( value );
179.7403 +					}
179.7404 +				}
179.7405 +
179.7406 +				return values;
179.7407 +			},
179.7408 +
179.7409 +			set: function( elem, value ) {
179.7410 +				var optionSet, option,
179.7411 +					options = elem.options,
179.7412 +					values = jQuery.makeArray( value ),
179.7413 +					i = options.length;
179.7414 +
179.7415 +				while ( i-- ) {
179.7416 +					option = options[ i ];
179.7417 +					if ( (option.selected = jQuery.inArray( option.value, values ) >= 0) ) {
179.7418 +						optionSet = true;
179.7419 +					}
179.7420 +				}
179.7421 +
179.7422 +				// force browsers to behave consistently when non-matching value is set
179.7423 +				if ( !optionSet ) {
179.7424 +					elem.selectedIndex = -1;
179.7425 +				}
179.7426 +				return values;
179.7427 +			}
179.7428 +		}
179.7429 +	}
179.7430 +});
179.7431 +
179.7432 +// Radios and checkboxes getter/setter
179.7433 +jQuery.each([ "radio", "checkbox" ], function() {
179.7434 +	jQuery.valHooks[ this ] = {
179.7435 +		set: function( elem, value ) {
179.7436 +			if ( jQuery.isArray( value ) ) {
179.7437 +				return ( elem.checked = jQuery.inArray( jQuery(elem).val(), value ) >= 0 );
179.7438 +			}
179.7439 +		}
179.7440 +	};
179.7441 +	if ( !support.checkOn ) {
179.7442 +		jQuery.valHooks[ this ].get = function( elem ) {
179.7443 +			// Support: Webkit
179.7444 +			// "" is returned instead of "on" if a value isn't specified
179.7445 +			return elem.getAttribute("value") === null ? "on" : elem.value;
179.7446 +		};
179.7447 +	}
179.7448 +});
179.7449 +
179.7450 +
179.7451 +
179.7452 +
179.7453 +// Return jQuery for attributes-only inclusion
179.7454 +
179.7455 +
179.7456 +jQuery.each( ("blur focus focusin focusout load resize scroll unload click dblclick " +
179.7457 +	"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " +
179.7458 +	"change select submit keydown keypress keyup error contextmenu").split(" "), function( i, name ) {
179.7459 +
179.7460 +	// Handle event binding
179.7461 +	jQuery.fn[ name ] = function( data, fn ) {
179.7462 +		return arguments.length > 0 ?
179.7463 +			this.on( name, null, data, fn ) :
179.7464 +			this.trigger( name );
179.7465 +	};
179.7466 +});
179.7467 +
179.7468 +jQuery.fn.extend({
179.7469 +	hover: function( fnOver, fnOut ) {
179.7470 +		return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );
179.7471 +	},
179.7472 +
179.7473 +	bind: function( types, data, fn ) {
179.7474 +		return this.on( types, null, data, fn );
179.7475 +	},
179.7476 +	unbind: function( types, fn ) {
179.7477 +		return this.off( types, null, fn );
179.7478 +	},
179.7479 +
179.7480 +	delegate: function( selector, types, data, fn ) {
179.7481 +		return this.on( types, selector, data, fn );
179.7482 +	},
179.7483 +	undelegate: function( selector, types, fn ) {
179.7484 +		// ( namespace ) or ( selector, types [, fn] )
179.7485 +		return arguments.length === 1 ? this.off( selector, "**" ) : this.off( types, selector || "**", fn );
179.7486 +	}
179.7487 +});
179.7488 +
179.7489 +
179.7490 +var nonce = jQuery.now();
179.7491 +
179.7492 +var rquery = (/\?/);
179.7493 +
179.7494 +
179.7495 +
179.7496 +// Support: Android 2.3
179.7497 +// Workaround failure to string-cast null input
179.7498 +jQuery.parseJSON = function( data ) {
179.7499 +	return JSON.parse( data + "" );
179.7500 +};
179.7501 +
179.7502 +
179.7503 +// Cross-browser xml parsing
179.7504 +jQuery.parseXML = function( data ) {
179.7505 +	var xml, tmp;
179.7506 +	if ( !data || typeof data !== "string" ) {
179.7507 +		return null;
179.7508 +	}
179.7509 +
179.7510 +	// Support: IE9
179.7511 +	try {
179.7512 +		tmp = new DOMParser();
179.7513 +		xml = tmp.parseFromString( data, "text/xml" );
179.7514 +	} catch ( e ) {
179.7515 +		xml = undefined;
179.7516 +	}
179.7517 +
179.7518 +	if ( !xml || xml.getElementsByTagName( "parsererror" ).length ) {
179.7519 +		jQuery.error( "Invalid XML: " + data );
179.7520 +	}
179.7521 +	return xml;
179.7522 +};
179.7523 +
179.7524 +
179.7525 +var
179.7526 +	// Document location
179.7527 +	ajaxLocParts,
179.7528 +	ajaxLocation,
179.7529 +
179.7530 +	rhash = /#.*$/,
179.7531 +	rts = /([?&])_=[^&]*/,
179.7532 +	rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg,
179.7533 +	// #7653, #8125, #8152: local protocol detection
179.7534 +	rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,
179.7535 +	rnoContent = /^(?:GET|HEAD)$/,
179.7536 +	rprotocol = /^\/\//,
179.7537 +	rurl = /^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,
179.7538 +
179.7539 +	/* Prefilters
179.7540 +	 * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)
179.7541 +	 * 2) These are called:
179.7542 +	 *    - BEFORE asking for a transport
179.7543 +	 *    - AFTER param serialization (s.data is a string if s.processData is true)
179.7544 +	 * 3) key is the dataType
179.7545 +	 * 4) the catchall symbol "*" can be used
179.7546 +	 * 5) execution will start with transport dataType and THEN continue down to "*" if needed
179.7547 +	 */
179.7548 +	prefilters = {},
179.7549 +
179.7550 +	/* Transports bindings
179.7551 +	 * 1) key is the dataType
179.7552 +	 * 2) the catchall symbol "*" can be used
179.7553 +	 * 3) selection will start with transport dataType and THEN go to "*" if needed
179.7554 +	 */
179.7555 +	transports = {},
179.7556 +
179.7557 +	// Avoid comment-prolog char sequence (#10098); must appease lint and evade compression
179.7558 +	allTypes = "*/".concat("*");
179.7559 +
179.7560 +// #8138, IE may throw an exception when accessing
179.7561 +// a field from window.location if document.domain has been set
179.7562 +try {
179.7563 +	ajaxLocation = location.href;
179.7564 +} catch( e ) {
179.7565 +	// Use the href attribute of an A element
179.7566 +	// since IE will modify it given document.location
179.7567 +	ajaxLocation = document.createElement( "a" );
179.7568 +	ajaxLocation.href = "";
179.7569 +	ajaxLocation = ajaxLocation.href;
179.7570 +}
179.7571 +
179.7572 +// Segment location into parts
179.7573 +ajaxLocParts = rurl.exec( ajaxLocation.toLowerCase() ) || [];
179.7574 +
179.7575 +// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport
179.7576 +function addToPrefiltersOrTransports( structure ) {
179.7577 +
179.7578 +	// dataTypeExpression is optional and defaults to "*"
179.7579 +	return function( dataTypeExpression, func ) {
179.7580 +
179.7581 +		if ( typeof dataTypeExpression !== "string" ) {
179.7582 +			func = dataTypeExpression;
179.7583 +			dataTypeExpression = "*";
179.7584 +		}
179.7585 +
179.7586 +		var dataType,
179.7587 +			i = 0,
179.7588 +			dataTypes = dataTypeExpression.toLowerCase().match( rnotwhite ) || [];
179.7589 +
179.7590 +		if ( jQuery.isFunction( func ) ) {
179.7591 +			// For each dataType in the dataTypeExpression
179.7592 +			while ( (dataType = dataTypes[i++]) ) {
179.7593 +				// Prepend if requested
179.7594 +				if ( dataType[0] === "+" ) {
179.7595 +					dataType = dataType.slice( 1 ) || "*";
179.7596 +					(structure[ dataType ] = structure[ dataType ] || []).unshift( func );
179.7597 +
179.7598 +				// Otherwise append
179.7599 +				} else {
179.7600 +					(structure[ dataType ] = structure[ dataType ] || []).push( func );
179.7601 +				}
179.7602 +			}
179.7603 +		}
179.7604 +	};
179.7605 +}
179.7606 +
179.7607 +// Base inspection function for prefilters and transports
179.7608 +function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {
179.7609 +
179.7610 +	var inspected = {},
179.7611 +		seekingTransport = ( structure === transports );
179.7612 +
179.7613 +	function inspect( dataType ) {
179.7614 +		var selected;
179.7615 +		inspected[ dataType ] = true;
179.7616 +		jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {
179.7617 +			var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );
179.7618 +			if ( typeof dataTypeOrTransport === "string" && !seekingTransport && !inspected[ dataTypeOrTransport ] ) {
179.7619 +				options.dataTypes.unshift( dataTypeOrTransport );
179.7620 +				inspect( dataTypeOrTransport );
179.7621 +				return false;
179.7622 +			} else if ( seekingTransport ) {
179.7623 +				return !( selected = dataTypeOrTransport );
179.7624 +			}
179.7625 +		});
179.7626 +		return selected;
179.7627 +	}
179.7628 +
179.7629 +	return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" );
179.7630 +}
179.7631 +
179.7632 +// A special extend for ajax options
179.7633 +// that takes "flat" options (not to be deep extended)
179.7634 +// Fixes #9887
179.7635 +function ajaxExtend( target, src ) {
179.7636 +	var key, deep,
179.7637 +		flatOptions = jQuery.ajaxSettings.flatOptions || {};
179.7638 +
179.7639 +	for ( key in src ) {
179.7640 +		if ( src[ key ] !== undefined ) {
179.7641 +			( flatOptions[ key ] ? target : ( deep || (deep = {}) ) )[ key ] = src[ key ];
179.7642 +		}
179.7643 +	}
179.7644 +	if ( deep ) {
179.7645 +		jQuery.extend( true, target, deep );
179.7646 +	}
179.7647 +
179.7648 +	return target;
179.7649 +}
179.7650 +
179.7651 +/* Handles responses to an ajax request:
179.7652 + * - finds the right dataType (mediates between content-type and expected dataType)
179.7653 + * - returns the corresponding response
179.7654 + */
179.7655 +function ajaxHandleResponses( s, jqXHR, responses ) {
179.7656 +
179.7657 +	var ct, type, finalDataType, firstDataType,
179.7658 +		contents = s.contents,
179.7659 +		dataTypes = s.dataTypes;
179.7660 +
179.7661 +	// Remove auto dataType and get content-type in the process
179.7662 +	while ( dataTypes[ 0 ] === "*" ) {
179.7663 +		dataTypes.shift();
179.7664 +		if ( ct === undefined ) {
179.7665 +			ct = s.mimeType || jqXHR.getResponseHeader("Content-Type");
179.7666 +		}
179.7667 +	}
179.7668 +
179.7669 +	// Check if we're dealing with a known content-type
179.7670 +	if ( ct ) {
179.7671 +		for ( type in contents ) {
179.7672 +			if ( contents[ type ] && contents[ type ].test( ct ) ) {
179.7673 +				dataTypes.unshift( type );
179.7674 +				break;
179.7675 +			}
179.7676 +		}
179.7677 +	}
179.7678 +
179.7679 +	// Check to see if we have a response for the expected dataType
179.7680 +	if ( dataTypes[ 0 ] in responses ) {
179.7681 +		finalDataType = dataTypes[ 0 ];
179.7682 +	} else {
179.7683 +		// Try convertible dataTypes
179.7684 +		for ( type in responses ) {
179.7685 +			if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[0] ] ) {
179.7686 +				finalDataType = type;
179.7687 +				break;
179.7688 +			}
179.7689 +			if ( !firstDataType ) {
179.7690 +				firstDataType = type;
179.7691 +			}
179.7692 +		}
179.7693 +		// Or just use first one
179.7694 +		finalDataType = finalDataType || firstDataType;
179.7695 +	}
179.7696 +
179.7697 +	// If we found a dataType
179.7698 +	// We add the dataType to the list if needed
179.7699 +	// and return the corresponding response
179.7700 +	if ( finalDataType ) {
179.7701 +		if ( finalDataType !== dataTypes[ 0 ] ) {
179.7702 +			dataTypes.unshift( finalDataType );
179.7703 +		}
179.7704 +		return responses[ finalDataType ];
179.7705 +	}
179.7706 +}
179.7707 +
179.7708 +/* Chain conversions given the request and the original response
179.7709 + * Also sets the responseXXX fields on the jqXHR instance
179.7710 + */
179.7711 +function ajaxConvert( s, response, jqXHR, isSuccess ) {
179.7712 +	var conv2, current, conv, tmp, prev,
179.7713 +		converters = {},
179.7714 +		// Work with a copy of dataTypes in case we need to modify it for conversion
179.7715 +		dataTypes = s.dataTypes.slice();
179.7716 +
179.7717 +	// Create converters map with lowercased keys
179.7718 +	if ( dataTypes[ 1 ] ) {
179.7719 +		for ( conv in s.converters ) {
179.7720 +			converters[ conv.toLowerCase() ] = s.converters[ conv ];
179.7721 +		}
179.7722 +	}
179.7723 +
179.7724 +	current = dataTypes.shift();
179.7725 +
179.7726 +	// Convert to each sequential dataType
179.7727 +	while ( current ) {
179.7728 +
179.7729 +		if ( s.responseFields[ current ] ) {
179.7730 +			jqXHR[ s.responseFields[ current ] ] = response;
179.7731 +		}
179.7732 +
179.7733 +		// Apply the dataFilter if provided
179.7734 +		if ( !prev && isSuccess && s.dataFilter ) {
179.7735 +			response = s.dataFilter( response, s.dataType );
179.7736 +		}
179.7737 +
179.7738 +		prev = current;
179.7739 +		current = dataTypes.shift();
179.7740 +
179.7741 +		if ( current ) {
179.7742 +
179.7743 +		// There's only work to do if current dataType is non-auto
179.7744 +			if ( current === "*" ) {
179.7745 +
179.7746 +				current = prev;
179.7747 +
179.7748 +			// Convert response if prev dataType is non-auto and differs from current
179.7749 +			} else if ( prev !== "*" && prev !== current ) {
179.7750 +
179.7751 +				// Seek a direct converter
179.7752 +				conv = converters[ prev + " " + current ] || converters[ "* " + current ];
179.7753 +
179.7754 +				// If none found, seek a pair
179.7755 +				if ( !conv ) {
179.7756 +					for ( conv2 in converters ) {
179.7757 +
179.7758 +						// If conv2 outputs current
179.7759 +						tmp = conv2.split( " " );
179.7760 +						if ( tmp[ 1 ] === current ) {
179.7761 +
179.7762 +							// If prev can be converted to accepted input
179.7763 +							conv = converters[ prev + " " + tmp[ 0 ] ] ||
179.7764 +								converters[ "* " + tmp[ 0 ] ];
179.7765 +							if ( conv ) {
179.7766 +								// Condense equivalence converters
179.7767 +								if ( conv === true ) {
179.7768 +									conv = converters[ conv2 ];
179.7769 +
179.7770 +								// Otherwise, insert the intermediate dataType
179.7771 +								} else if ( converters[ conv2 ] !== true ) {
179.7772 +									current = tmp[ 0 ];
179.7773 +									dataTypes.unshift( tmp[ 1 ] );
179.7774 +								}
179.7775 +								break;
179.7776 +							}
179.7777 +						}
179.7778 +					}
179.7779 +				}
179.7780 +
179.7781 +				// Apply converter (if not an equivalence)
179.7782 +				if ( conv !== true ) {
179.7783 +
179.7784 +					// Unless errors are allowed to bubble, catch and return them
179.7785 +					if ( conv && s[ "throws" ] ) {
179.7786 +						response = conv( response );
179.7787 +					} else {
179.7788 +						try {
179.7789 +							response = conv( response );
179.7790 +						} catch ( e ) {
179.7791 +							return { state: "parsererror", error: conv ? e : "No conversion from " + prev + " to " + current };
179.7792 +						}
179.7793 +					}
179.7794 +				}
179.7795 +			}
179.7796 +		}
179.7797 +	}
179.7798 +
179.7799 +	return { state: "success", data: response };
179.7800 +}
179.7801 +
179.7802 +jQuery.extend({
179.7803 +
179.7804 +	// Counter for holding the number of active queries
179.7805 +	active: 0,
179.7806 +
179.7807 +	// Last-Modified header cache for next request
179.7808 +	lastModified: {},
179.7809 +	etag: {},
179.7810 +
179.7811 +	ajaxSettings: {
179.7812 +		url: ajaxLocation,
179.7813 +		type: "GET",
179.7814 +		isLocal: rlocalProtocol.test( ajaxLocParts[ 1 ] ),
179.7815 +		global: true,
179.7816 +		processData: true,
179.7817 +		async: true,
179.7818 +		contentType: "application/x-www-form-urlencoded; charset=UTF-8",
179.7819 +		/*
179.7820 +		timeout: 0,
179.7821 +		data: null,
179.7822 +		dataType: null,
179.7823 +		username: null,
179.7824 +		password: null,
179.7825 +		cache: null,
179.7826 +		throws: false,
179.7827 +		traditional: false,
179.7828 +		headers: {},
179.7829 +		*/
179.7830 +
179.7831 +		accepts: {
179.7832 +			"*": allTypes,
179.7833 +			text: "text/plain",
179.7834 +			html: "text/html",
179.7835 +			xml: "application/xml, text/xml",
179.7836 +			json: "application/json, text/javascript"
179.7837 +		},
179.7838 +
179.7839 +		contents: {
179.7840 +			xml: /xml/,
179.7841 +			html: /html/,
179.7842 +			json: /json/
179.7843 +		},
179.7844 +
179.7845 +		responseFields: {
179.7846 +			xml: "responseXML",
179.7847 +			text: "responseText",
179.7848 +			json: "responseJSON"
179.7849 +		},
179.7850 +
179.7851 +		// Data converters
179.7852 +		// Keys separate source (or catchall "*") and destination types with a single space
179.7853 +		converters: {
179.7854 +
179.7855 +			// Convert anything to text
179.7856 +			"* text": String,
179.7857 +
179.7858 +			// Text to html (true = no transformation)
179.7859 +			"text html": true,
179.7860 +
179.7861 +			// Evaluate text as a json expression
179.7862 +			"text json": jQuery.parseJSON,
179.7863 +
179.7864 +			// Parse text as xml
179.7865 +			"text xml": jQuery.parseXML
179.7866 +		},
179.7867 +
179.7868 +		// For options that shouldn't be deep extended:
179.7869 +		// you can add your own custom options here if
179.7870 +		// and when you create one that shouldn't be
179.7871 +		// deep extended (see ajaxExtend)
179.7872 +		flatOptions: {
179.7873 +			url: true,
179.7874 +			context: true
179.7875 +		}
179.7876 +	},
179.7877 +
179.7878 +	// Creates a full fledged settings object into target
179.7879 +	// with both ajaxSettings and settings fields.
179.7880 +	// If target is omitted, writes into ajaxSettings.
179.7881 +	ajaxSetup: function( target, settings ) {
179.7882 +		return settings ?
179.7883 +
179.7884 +			// Building a settings object
179.7885 +			ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :
179.7886 +
179.7887 +			// Extending ajaxSettings
179.7888 +			ajaxExtend( jQuery.ajaxSettings, target );
179.7889 +	},
179.7890 +
179.7891 +	ajaxPrefilter: addToPrefiltersOrTransports( prefilters ),
179.7892 +	ajaxTransport: addToPrefiltersOrTransports( transports ),
179.7893 +
179.7894 +	// Main method
179.7895 +	ajax: function( url, options ) {
179.7896 +
179.7897 +		// If url is an object, simulate pre-1.5 signature
179.7898 +		if ( typeof url === "object" ) {
179.7899 +			options = url;
179.7900 +			url = undefined;
179.7901 +		}
179.7902 +
179.7903 +		// Force options to be an object
179.7904 +		options = options || {};
179.7905 +
179.7906 +		var transport,
179.7907 +			// URL without anti-cache param
179.7908 +			cacheURL,
179.7909 +			// Response headers
179.7910 +			responseHeadersString,
179.7911 +			responseHeaders,
179.7912 +			// timeout handle
179.7913 +			timeoutTimer,
179.7914 +			// Cross-domain detection vars
179.7915 +			parts,
179.7916 +			// To know if global events are to be dispatched
179.7917 +			fireGlobals,
179.7918 +			// Loop variable
179.7919 +			i,
179.7920 +			// Create the final options object
179.7921 +			s = jQuery.ajaxSetup( {}, options ),
179.7922 +			// Callbacks context
179.7923 +			callbackContext = s.context || s,
179.7924 +			// Context for global events is callbackContext if it is a DOM node or jQuery collection
179.7925 +			globalEventContext = s.context && ( callbackContext.nodeType || callbackContext.jquery ) ?
179.7926 +				jQuery( callbackContext ) :
179.7927 +				jQuery.event,
179.7928 +			// Deferreds
179.7929 +			deferred = jQuery.Deferred(),
179.7930 +			completeDeferred = jQuery.Callbacks("once memory"),
179.7931 +			// Status-dependent callbacks
179.7932 +			statusCode = s.statusCode || {},
179.7933 +			// Headers (they are sent all at once)
179.7934 +			requestHeaders = {},
179.7935 +			requestHeadersNames = {},
179.7936 +			// The jqXHR state
179.7937 +			state = 0,
179.7938 +			// Default abort message
179.7939 +			strAbort = "canceled",
179.7940 +			// Fake xhr
179.7941 +			jqXHR = {
179.7942 +				readyState: 0,
179.7943 +
179.7944 +				// Builds headers hashtable if needed
179.7945 +				getResponseHeader: function( key ) {
179.7946 +					var match;
179.7947 +					if ( state === 2 ) {
179.7948 +						if ( !responseHeaders ) {
179.7949 +							responseHeaders = {};
179.7950 +							while ( (match = rheaders.exec( responseHeadersString )) ) {
179.7951 +								responseHeaders[ match[1].toLowerCase() ] = match[ 2 ];
179.7952 +							}
179.7953 +						}
179.7954 +						match = responseHeaders[ key.toLowerCase() ];
179.7955 +					}
179.7956 +					return match == null ? null : match;
179.7957 +				},
179.7958 +
179.7959 +				// Raw string
179.7960 +				getAllResponseHeaders: function() {
179.7961 +					return state === 2 ? responseHeadersString : null;
179.7962 +				},
179.7963 +
179.7964 +				// Caches the header
179.7965 +				setRequestHeader: function( name, value ) {
179.7966 +					var lname = name.toLowerCase();
179.7967 +					if ( !state ) {
179.7968 +						name = requestHeadersNames[ lname ] = requestHeadersNames[ lname ] || name;
179.7969 +						requestHeaders[ name ] = value;
179.7970 +					}
179.7971 +					return this;
179.7972 +				},
179.7973 +
179.7974 +				// Overrides response content-type header
179.7975 +				overrideMimeType: function( type ) {
179.7976 +					if ( !state ) {
179.7977 +						s.mimeType = type;
179.7978 +					}
179.7979 +					return this;
179.7980 +				},
179.7981 +
179.7982 +				// Status-dependent callbacks
179.7983 +				statusCode: function( map ) {
179.7984 +					var code;
179.7985 +					if ( map ) {
179.7986 +						if ( state < 2 ) {
179.7987 +							for ( code in map ) {
179.7988 +								// Lazy-add the new callback in a way that preserves old ones
179.7989 +								statusCode[ code ] = [ statusCode[ code ], map[ code ] ];
179.7990 +							}
179.7991 +						} else {
179.7992 +							// Execute the appropriate callbacks
179.7993 +							jqXHR.always( map[ jqXHR.status ] );
179.7994 +						}
179.7995 +					}
179.7996 +					return this;
179.7997 +				},
179.7998 +
179.7999 +				// Cancel the request
179.8000 +				abort: function( statusText ) {
179.8001 +					var finalText = statusText || strAbort;
179.8002 +					if ( transport ) {
179.8003 +						transport.abort( finalText );
179.8004 +					}
179.8005 +					done( 0, finalText );
179.8006 +					return this;
179.8007 +				}
179.8008 +			};
179.8009 +
179.8010 +		// Attach deferreds
179.8011 +		deferred.promise( jqXHR ).complete = completeDeferred.add;
179.8012 +		jqXHR.success = jqXHR.done;
179.8013 +		jqXHR.error = jqXHR.fail;
179.8014 +
179.8015 +		// Remove hash character (#7531: and string promotion)
179.8016 +		// Add protocol if not provided (prefilters might expect it)
179.8017 +		// Handle falsy url in the settings object (#10093: consistency with old signature)
179.8018 +		// We also use the url parameter if available
179.8019 +		s.url = ( ( url || s.url || ajaxLocation ) + "" ).replace( rhash, "" )
179.8020 +			.replace( rprotocol, ajaxLocParts[ 1 ] + "//" );
179.8021 +
179.8022 +		// Alias method option to type as per ticket #12004
179.8023 +		s.type = options.method || options.type || s.method || s.type;
179.8024 +
179.8025 +		// Extract dataTypes list
179.8026 +		s.dataTypes = jQuery.trim( s.dataType || "*" ).toLowerCase().match( rnotwhite ) || [ "" ];
179.8027 +
179.8028 +		// A cross-domain request is in order when we have a protocol:host:port mismatch
179.8029 +		if ( s.crossDomain == null ) {
179.8030 +			parts = rurl.exec( s.url.toLowerCase() );
179.8031 +			s.crossDomain = !!( parts &&
179.8032 +				( parts[ 1 ] !== ajaxLocParts[ 1 ] || parts[ 2 ] !== ajaxLocParts[ 2 ] ||
179.8033 +					( parts[ 3 ] || ( parts[ 1 ] === "http:" ? "80" : "443" ) ) !==
179.8034 +						( ajaxLocParts[ 3 ] || ( ajaxLocParts[ 1 ] === "http:" ? "80" : "443" ) ) )
179.8035 +			);
179.8036 +		}
179.8037 +
179.8038 +		// Convert data if not already a string
179.8039 +		if ( s.data && s.processData && typeof s.data !== "string" ) {
179.8040 +			s.data = jQuery.param( s.data, s.traditional );
179.8041 +		}
179.8042 +
179.8043 +		// Apply prefilters
179.8044 +		inspectPrefiltersOrTransports( prefilters, s, options, jqXHR );
179.8045 +
179.8046 +		// If request was aborted inside a prefilter, stop there
179.8047 +		if ( state === 2 ) {
179.8048 +			return jqXHR;
179.8049 +		}
179.8050 +
179.8051 +		// We can fire global events as of now if asked to
179.8052 +		fireGlobals = s.global;
179.8053 +
179.8054 +		// Watch for a new set of requests
179.8055 +		if ( fireGlobals && jQuery.active++ === 0 ) {
179.8056 +			jQuery.event.trigger("ajaxStart");
179.8057 +		}
179.8058 +
179.8059 +		// Uppercase the type
179.8060 +		s.type = s.type.toUpperCase();
179.8061 +
179.8062 +		// Determine if request has content
179.8063 +		s.hasContent = !rnoContent.test( s.type );
179.8064 +
179.8065 +		// Save the URL in case we're toying with the If-Modified-Since
179.8066 +		// and/or If-None-Match header later on
179.8067 +		cacheURL = s.url;
179.8068 +
179.8069 +		// More options handling for requests with no content
179.8070 +		if ( !s.hasContent ) {
179.8071 +
179.8072 +			// If data is available, append data to url
179.8073 +			if ( s.data ) {
179.8074 +				cacheURL = ( s.url += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data );
179.8075 +				// #9682: remove data so that it's not used in an eventual retry
179.8076 +				delete s.data;
179.8077 +			}
179.8078 +
179.8079 +			// Add anti-cache in url if needed
179.8080 +			if ( s.cache === false ) {
179.8081 +				s.url = rts.test( cacheURL ) ?
179.8082 +
179.8083 +					// If there is already a '_' parameter, set its value
179.8084 +					cacheURL.replace( rts, "$1_=" + nonce++ ) :
179.8085 +
179.8086 +					// Otherwise add one to the end
179.8087 +					cacheURL + ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + nonce++;
179.8088 +			}
179.8089 +		}
179.8090 +
179.8091 +		// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
179.8092 +		if ( s.ifModified ) {
179.8093 +			if ( jQuery.lastModified[ cacheURL ] ) {
179.8094 +				jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] );
179.8095 +			}
179.8096 +			if ( jQuery.etag[ cacheURL ] ) {
179.8097 +				jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] );
179.8098 +			}
179.8099 +		}
179.8100 +
179.8101 +		// Set the correct header, if data is being sent
179.8102 +		if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {
179.8103 +			jqXHR.setRequestHeader( "Content-Type", s.contentType );
179.8104 +		}
179.8105 +
179.8106 +		// Set the Accepts header for the server, depending on the dataType
179.8107 +		jqXHR.setRequestHeader(
179.8108 +			"Accept",
179.8109 +			s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[0] ] ?
179.8110 +				s.accepts[ s.dataTypes[0] ] + ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) :
179.8111 +				s.accepts[ "*" ]
179.8112 +		);
179.8113 +
179.8114 +		// Check for headers option
179.8115 +		for ( i in s.headers ) {
179.8116 +			jqXHR.setRequestHeader( i, s.headers[ i ] );
179.8117 +		}
179.8118 +
179.8119 +		// Allow custom headers/mimetypes and early abort
179.8120 +		if ( s.beforeSend && ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || state === 2 ) ) {
179.8121 +			// Abort if not done already and return
179.8122 +			return jqXHR.abort();
179.8123 +		}
179.8124 +
179.8125 +		// aborting is no longer a cancellation
179.8126 +		strAbort = "abort";
179.8127 +
179.8128 +		// Install callbacks on deferreds
179.8129 +		for ( i in { success: 1, error: 1, complete: 1 } ) {
179.8130 +			jqXHR[ i ]( s[ i ] );
179.8131 +		}
179.8132 +
179.8133 +		// Get transport
179.8134 +		transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );
179.8135 +
179.8136 +		// If no transport, we auto-abort
179.8137 +		if ( !transport ) {
179.8138 +			done( -1, "No Transport" );
179.8139 +		} else {
179.8140 +			jqXHR.readyState = 1;
179.8141 +
179.8142 +			// Send global event
179.8143 +			if ( fireGlobals ) {
179.8144 +				globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] );
179.8145 +			}
179.8146 +			// Timeout
179.8147 +			if ( s.async && s.timeout > 0 ) {
179.8148 +				timeoutTimer = setTimeout(function() {
179.8149 +					jqXHR.abort("timeout");
179.8150 +				}, s.timeout );
179.8151 +			}
179.8152 +
179.8153 +			try {
179.8154 +				state = 1;
179.8155 +				transport.send( requestHeaders, done );
179.8156 +			} catch ( e ) {
179.8157 +				// Propagate exception as error if not done
179.8158 +				if ( state < 2 ) {
179.8159 +					done( -1, e );
179.8160 +				// Simply rethrow otherwise
179.8161 +				} else {
179.8162 +					throw e;
179.8163 +				}
179.8164 +			}
179.8165 +		}
179.8166 +
179.8167 +		// Callback for when everything is done
179.8168 +		function done( status, nativeStatusText, responses, headers ) {
179.8169 +			var isSuccess, success, error, response, modified,
179.8170 +				statusText = nativeStatusText;
179.8171 +
179.8172 +			// Called once
179.8173 +			if ( state === 2 ) {
179.8174 +				return;
179.8175 +			}
179.8176 +
179.8177 +			// State is "done" now
179.8178 +			state = 2;
179.8179 +
179.8180 +			// Clear timeout if it exists
179.8181 +			if ( timeoutTimer ) {
179.8182 +				clearTimeout( timeoutTimer );
179.8183 +			}
179.8184 +
179.8185 +			// Dereference transport for early garbage collection
179.8186 +			// (no matter how long the jqXHR object will be used)
179.8187 +			transport = undefined;
179.8188 +
179.8189 +			// Cache response headers
179.8190 +			responseHeadersString = headers || "";
179.8191 +
179.8192 +			// Set readyState
179.8193 +			jqXHR.readyState = status > 0 ? 4 : 0;
179.8194 +
179.8195 +			// Determine if successful
179.8196 +			isSuccess = status >= 200 && status < 300 || status === 304;
179.8197 +
179.8198 +			// Get response data
179.8199 +			if ( responses ) {
179.8200 +				response = ajaxHandleResponses( s, jqXHR, responses );
179.8201 +			}
179.8202 +
179.8203 +			// Convert no matter what (that way responseXXX fields are always set)
179.8204 +			response = ajaxConvert( s, response, jqXHR, isSuccess );
179.8205 +
179.8206 +			// If successful, handle type chaining
179.8207 +			if ( isSuccess ) {
179.8208 +
179.8209 +				// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
179.8210 +				if ( s.ifModified ) {
179.8211 +					modified = jqXHR.getResponseHeader("Last-Modified");
179.8212 +					if ( modified ) {
179.8213 +						jQuery.lastModified[ cacheURL ] = modified;
179.8214 +					}
179.8215 +					modified = jqXHR.getResponseHeader("etag");
179.8216 +					if ( modified ) {
179.8217 +						jQuery.etag[ cacheURL ] = modified;
179.8218 +					}
179.8219 +				}
179.8220 +
179.8221 +				// if no content
179.8222 +				if ( status === 204 || s.type === "HEAD" ) {
179.8223 +					statusText = "nocontent";
179.8224 +
179.8225 +				// if not modified
179.8226 +				} else if ( status === 304 ) {
179.8227 +					statusText = "notmodified";
179.8228 +
179.8229 +				// If we have data, let's convert it
179.8230 +				} else {
179.8231 +					statusText = response.state;
179.8232 +					success = response.data;
179.8233 +					error = response.error;
179.8234 +					isSuccess = !error;
179.8235 +				}
179.8236 +			} else {
179.8237 +				// We extract error from statusText
179.8238 +				// then normalize statusText and status for non-aborts
179.8239 +				error = statusText;
179.8240 +				if ( status || !statusText ) {
179.8241 +					statusText = "error";
179.8242 +					if ( status < 0 ) {
179.8243 +						status = 0;
179.8244 +					}
179.8245 +				}
179.8246 +			}
179.8247 +
179.8248 +			// Set data for the fake xhr object
179.8249 +			jqXHR.status = status;
179.8250 +			jqXHR.statusText = ( nativeStatusText || statusText ) + "";
179.8251 +
179.8252 +			// Success/Error
179.8253 +			if ( isSuccess ) {
179.8254 +				deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );
179.8255 +			} else {
179.8256 +				deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );
179.8257 +			}
179.8258 +
179.8259 +			// Status-dependent callbacks
179.8260 +			jqXHR.statusCode( statusCode );
179.8261 +			statusCode = undefined;
179.8262 +
179.8263 +			if ( fireGlobals ) {
179.8264 +				globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError",
179.8265 +					[ jqXHR, s, isSuccess ? success : error ] );
179.8266 +			}
179.8267 +
179.8268 +			// Complete
179.8269 +			completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );
179.8270 +
179.8271 +			if ( fireGlobals ) {
179.8272 +				globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] );
179.8273 +				// Handle the global AJAX counter
179.8274 +				if ( !( --jQuery.active ) ) {
179.8275 +					jQuery.event.trigger("ajaxStop");
179.8276 +				}
179.8277 +			}
179.8278 +		}
179.8279 +
179.8280 +		return jqXHR;
179.8281 +	},
179.8282 +
179.8283 +	getJSON: function( url, data, callback ) {
179.8284 +		return jQuery.get( url, data, callback, "json" );
179.8285 +	},
179.8286 +
179.8287 +	getScript: function( url, callback ) {
179.8288 +		return jQuery.get( url, undefined, callback, "script" );
179.8289 +	}
179.8290 +});
179.8291 +
179.8292 +jQuery.each( [ "get", "post" ], function( i, method ) {
179.8293 +	jQuery[ method ] = function( url, data, callback, type ) {
179.8294 +		// shift arguments if data argument was omitted
179.8295 +		if ( jQuery.isFunction( data ) ) {
179.8296 +			type = type || callback;
179.8297 +			callback = data;
179.8298 +			data = undefined;
179.8299 +		}
179.8300 +
179.8301 +		return jQuery.ajax({
179.8302 +			url: url,
179.8303 +			type: method,
179.8304 +			dataType: type,
179.8305 +			data: data,
179.8306 +			success: callback
179.8307 +		});
179.8308 +	};
179.8309 +});
179.8310 +
179.8311 +// Attach a bunch of functions for handling common AJAX events
179.8312 +jQuery.each( [ "ajaxStart", "ajaxStop", "ajaxComplete", "ajaxError", "ajaxSuccess", "ajaxSend" ], function( i, type ) {
179.8313 +	jQuery.fn[ type ] = function( fn ) {
179.8314 +		return this.on( type, fn );
179.8315 +	};
179.8316 +});
179.8317 +
179.8318 +
179.8319 +jQuery._evalUrl = function( url ) {
179.8320 +	return jQuery.ajax({
179.8321 +		url: url,
179.8322 +		type: "GET",
179.8323 +		dataType: "script",
179.8324 +		async: false,
179.8325 +		global: false,
179.8326 +		"throws": true
179.8327 +	});
179.8328 +};
179.8329 +
179.8330 +
179.8331 +jQuery.fn.extend({
179.8332 +	wrapAll: function( html ) {
179.8333 +		var wrap;
179.8334 +
179.8335 +		if ( jQuery.isFunction( html ) ) {
179.8336 +			return this.each(function( i ) {
179.8337 +				jQuery( this ).wrapAll( html.call(this, i) );
179.8338 +			});
179.8339 +		}
179.8340 +
179.8341 +		if ( this[ 0 ] ) {
179.8342 +
179.8343 +			// The elements to wrap the target around
179.8344 +			wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );
179.8345 +
179.8346 +			if ( this[ 0 ].parentNode ) {
179.8347 +				wrap.insertBefore( this[ 0 ] );
179.8348 +			}
179.8349 +
179.8350 +			wrap.map(function() {
179.8351 +				var elem = this;
179.8352 +
179.8353 +				while ( elem.firstElementChild ) {
179.8354 +					elem = elem.firstElementChild;
179.8355 +				}
179.8356 +
179.8357 +				return elem;
179.8358 +			}).append( this );
179.8359 +		}
179.8360 +
179.8361 +		return this;
179.8362 +	},
179.8363 +
179.8364 +	wrapInner: function( html ) {
179.8365 +		if ( jQuery.isFunction( html ) ) {
179.8366 +			return this.each(function( i ) {
179.8367 +				jQuery( this ).wrapInner( html.call(this, i) );
179.8368 +			});
179.8369 +		}
179.8370 +
179.8371 +		return this.each(function() {
179.8372 +			var self = jQuery( this ),
179.8373 +				contents = self.contents();
179.8374 +
179.8375 +			if ( contents.length ) {
179.8376 +				contents.wrapAll( html );
179.8377 +
179.8378 +			} else {
179.8379 +				self.append( html );
179.8380 +			}
179.8381 +		});
179.8382 +	},
179.8383 +
179.8384 +	wrap: function( html ) {
179.8385 +		var isFunction = jQuery.isFunction( html );
179.8386 +
179.8387 +		return this.each(function( i ) {
179.8388 +			jQuery( this ).wrapAll( isFunction ? html.call(this, i) : html );
179.8389 +		});
179.8390 +	},
179.8391 +
179.8392 +	unwrap: function() {
179.8393 +		return this.parent().each(function() {
179.8394 +			if ( !jQuery.nodeName( this, "body" ) ) {
179.8395 +				jQuery( this ).replaceWith( this.childNodes );
179.8396 +			}
179.8397 +		}).end();
179.8398 +	}
179.8399 +});
179.8400 +
179.8401 +
179.8402 +jQuery.expr.filters.hidden = function( elem ) {
179.8403 +	// Support: Opera <= 12.12
179.8404 +	// Opera reports offsetWidths and offsetHeights less than zero on some elements
179.8405 +	return elem.offsetWidth <= 0 && elem.offsetHeight <= 0;
179.8406 +};
179.8407 +jQuery.expr.filters.visible = function( elem ) {
179.8408 +	return !jQuery.expr.filters.hidden( elem );
179.8409 +};
179.8410 +
179.8411 +
179.8412 +
179.8413 +
179.8414 +var r20 = /%20/g,
179.8415 +	rbracket = /\[\]$/,
179.8416 +	rCRLF = /\r?\n/g,
179.8417 +	rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,
179.8418 +	rsubmittable = /^(?:input|select|textarea|keygen)/i;
179.8419 +
179.8420 +function buildParams( prefix, obj, traditional, add ) {
179.8421 +	var name;
179.8422 +
179.8423 +	if ( jQuery.isArray( obj ) ) {
179.8424 +		// Serialize array item.
179.8425 +		jQuery.each( obj, function( i, v ) {
179.8426 +			if ( traditional || rbracket.test( prefix ) ) {
179.8427 +				// Treat each array item as a scalar.
179.8428 +				add( prefix, v );
179.8429 +
179.8430 +			} else {
179.8431 +				// Item is non-scalar (array or object), encode its numeric index.
179.8432 +				buildParams( prefix + "[" + ( typeof v === "object" ? i : "" ) + "]", v, traditional, add );
179.8433 +			}
179.8434 +		});
179.8435 +
179.8436 +	} else if ( !traditional && jQuery.type( obj ) === "object" ) {
179.8437 +		// Serialize object item.
179.8438 +		for ( name in obj ) {
179.8439 +			buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add );
179.8440 +		}
179.8441 +
179.8442 +	} else {
179.8443 +		// Serialize scalar item.
179.8444 +		add( prefix, obj );
179.8445 +	}
179.8446 +}
179.8447 +
179.8448 +// Serialize an array of form elements or a set of
179.8449 +// key/values into a query string
179.8450 +jQuery.param = function( a, traditional ) {
179.8451 +	var prefix,
179.8452 +		s = [],
179.8453 +		add = function( key, value ) {
179.8454 +			// If value is a function, invoke it and return its value
179.8455 +			value = jQuery.isFunction( value ) ? value() : ( value == null ? "" : value );
179.8456 +			s[ s.length ] = encodeURIComponent( key ) + "=" + encodeURIComponent( value );
179.8457 +		};
179.8458 +
179.8459 +	// Set traditional to true for jQuery <= 1.3.2 behavior.
179.8460 +	if ( traditional === undefined ) {
179.8461 +		traditional = jQuery.ajaxSettings && jQuery.ajaxSettings.traditional;
179.8462 +	}
179.8463 +
179.8464 +	// If an array was passed in, assume that it is an array of form elements.
179.8465 +	if ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {
179.8466 +		// Serialize the form elements
179.8467 +		jQuery.each( a, function() {
179.8468 +			add( this.name, this.value );
179.8469 +		});
179.8470 +
179.8471 +	} else {
179.8472 +		// If traditional, encode the "old" way (the way 1.3.2 or older
179.8473 +		// did it), otherwise encode params recursively.
179.8474 +		for ( prefix in a ) {
179.8475 +			buildParams( prefix, a[ prefix ], traditional, add );
179.8476 +		}
179.8477 +	}
179.8478 +
179.8479 +	// Return the resulting serialization
179.8480 +	return s.join( "&" ).replace( r20, "+" );
179.8481 +};
179.8482 +
179.8483 +jQuery.fn.extend({
179.8484 +	serialize: function() {
179.8485 +		return jQuery.param( this.serializeArray() );
179.8486 +	},
179.8487 +	serializeArray: function() {
179.8488 +		return this.map(function() {
179.8489 +			// Can add propHook for "elements" to filter or add form elements
179.8490 +			var elements = jQuery.prop( this, "elements" );
179.8491 +			return elements ? jQuery.makeArray( elements ) : this;
179.8492 +		})
179.8493 +		.filter(function() {
179.8494 +			var type = this.type;
179.8495 +
179.8496 +			// Use .is( ":disabled" ) so that fieldset[disabled] works
179.8497 +			return this.name && !jQuery( this ).is( ":disabled" ) &&
179.8498 +				rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&
179.8499 +				( this.checked || !rcheckableType.test( type ) );
179.8500 +		})
179.8501 +		.map(function( i, elem ) {
179.8502 +			var val = jQuery( this ).val();
179.8503 +
179.8504 +			return val == null ?
179.8505 +				null :
179.8506 +				jQuery.isArray( val ) ?
179.8507 +					jQuery.map( val, function( val ) {
179.8508 +						return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
179.8509 +					}) :
179.8510 +					{ name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
179.8511 +		}).get();
179.8512 +	}
179.8513 +});
179.8514 +
179.8515 +
179.8516 +jQuery.ajaxSettings.xhr = function() {
179.8517 +	try {
179.8518 +		return new XMLHttpRequest();
179.8519 +	} catch( e ) {}
179.8520 +};
179.8521 +
179.8522 +var xhrId = 0,
179.8523 +	xhrCallbacks = {},
179.8524 +	xhrSuccessStatus = {
179.8525 +		// file protocol always yields status code 0, assume 200
179.8526 +		0: 200,
179.8527 +		// Support: IE9
179.8528 +		// #1450: sometimes IE returns 1223 when it should be 204
179.8529 +		1223: 204
179.8530 +	},
179.8531 +	xhrSupported = jQuery.ajaxSettings.xhr();
179.8532 +
179.8533 +// Support: IE9
179.8534 +// Open requests must be manually aborted on unload (#5280)
179.8535 +if ( window.ActiveXObject ) {
179.8536 +	jQuery( window ).on( "unload", function() {
179.8537 +		for ( var key in xhrCallbacks ) {
179.8538 +			xhrCallbacks[ key ]();
179.8539 +		}
179.8540 +	});
179.8541 +}
179.8542 +
179.8543 +support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported );
179.8544 +support.ajax = xhrSupported = !!xhrSupported;
179.8545 +
179.8546 +jQuery.ajaxTransport(function( options ) {
179.8547 +	var callback;
179.8548 +
179.8549 +	// Cross domain only allowed if supported through XMLHttpRequest
179.8550 +	if ( support.cors || xhrSupported && !options.crossDomain ) {
179.8551 +		return {
179.8552 +			send: function( headers, complete ) {
179.8553 +				var i,
179.8554 +					xhr = options.xhr(),
179.8555 +					id = ++xhrId;
179.8556 +
179.8557 +				xhr.open( options.type, options.url, options.async, options.username, options.password );
179.8558 +
179.8559 +				// Apply custom fields if provided
179.8560 +				if ( options.xhrFields ) {
179.8561 +					for ( i in options.xhrFields ) {
179.8562 +						xhr[ i ] = options.xhrFields[ i ];
179.8563 +					}
179.8564 +				}
179.8565 +
179.8566 +				// Override mime type if needed
179.8567 +				if ( options.mimeType && xhr.overrideMimeType ) {
179.8568 +					xhr.overrideMimeType( options.mimeType );
179.8569 +				}
179.8570 +
179.8571 +				// X-Requested-With header
179.8572 +				// For cross-domain requests, seeing as conditions for a preflight are
179.8573 +				// akin to a jigsaw puzzle, we simply never set it to be sure.
179.8574 +				// (it can always be set on a per-request basis or even using ajaxSetup)
179.8575 +				// For same-domain requests, won't change header if already provided.
179.8576 +				if ( !options.crossDomain && !headers["X-Requested-With"] ) {
179.8577 +					headers["X-Requested-With"] = "XMLHttpRequest";
179.8578 +				}
179.8579 +
179.8580 +				// Set headers
179.8581 +				for ( i in headers ) {
179.8582 +					xhr.setRequestHeader( i, headers[ i ] );
179.8583 +				}
179.8584 +
179.8585 +				// Callback
179.8586 +				callback = function( type ) {
179.8587 +					return function() {
179.8588 +						if ( callback ) {
179.8589 +							delete xhrCallbacks[ id ];
179.8590 +							callback = xhr.onload = xhr.onerror = null;
179.8591 +
179.8592 +							if ( type === "abort" ) {
179.8593 +								xhr.abort();
179.8594 +							} else if ( type === "error" ) {
179.8595 +								complete(
179.8596 +									// file: protocol always yields status 0; see #8605, #14207
179.8597 +									xhr.status,
179.8598 +									xhr.statusText
179.8599 +								);
179.8600 +							} else {
179.8601 +								complete(
179.8602 +									xhrSuccessStatus[ xhr.status ] || xhr.status,
179.8603 +									xhr.statusText,
179.8604 +									// Support: IE9
179.8605 +									// Accessing binary-data responseText throws an exception
179.8606 +									// (#11426)
179.8607 +									typeof xhr.responseText === "string" ? {
179.8608 +										text: xhr.responseText
179.8609 +									} : undefined,
179.8610 +									xhr.getAllResponseHeaders()
179.8611 +								);
179.8612 +							}
179.8613 +						}
179.8614 +					};
179.8615 +				};
179.8616 +
179.8617 +				// Listen to events
179.8618 +				xhr.onload = callback();
179.8619 +				xhr.onerror = callback("error");
179.8620 +
179.8621 +				// Create the abort callback
179.8622 +				callback = xhrCallbacks[ id ] = callback("abort");
179.8623 +
179.8624 +				try {
179.8625 +					// Do send the request (this may raise an exception)
179.8626 +					xhr.send( options.hasContent && options.data || null );
179.8627 +				} catch ( e ) {
179.8628 +					// #14683: Only rethrow if this hasn't been notified as an error yet
179.8629 +					if ( callback ) {
179.8630 +						throw e;
179.8631 +					}
179.8632 +				}
179.8633 +			},
179.8634 +
179.8635 +			abort: function() {
179.8636 +				if ( callback ) {
179.8637 +					callback();
179.8638 +				}
179.8639 +			}
179.8640 +		};
179.8641 +	}
179.8642 +});
179.8643 +
179.8644 +
179.8645 +
179.8646 +
179.8647 +// Install script dataType
179.8648 +jQuery.ajaxSetup({
179.8649 +	accepts: {
179.8650 +		script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"
179.8651 +	},
179.8652 +	contents: {
179.8653 +		script: /(?:java|ecma)script/
179.8654 +	},
179.8655 +	converters: {
179.8656 +		"text script": function( text ) {
179.8657 +			jQuery.globalEval( text );
179.8658 +			return text;
179.8659 +		}
179.8660 +	}
179.8661 +});
179.8662 +
179.8663 +// Handle cache's special case and crossDomain
179.8664 +jQuery.ajaxPrefilter( "script", function( s ) {
179.8665 +	if ( s.cache === undefined ) {
179.8666 +		s.cache = false;
179.8667 +	}
179.8668 +	if ( s.crossDomain ) {
179.8669 +		s.type = "GET";
179.8670 +	}
179.8671 +});
179.8672 +
179.8673 +// Bind script tag hack transport
179.8674 +jQuery.ajaxTransport( "script", function( s ) {
179.8675 +	// This transport only deals with cross domain requests
179.8676 +	if ( s.crossDomain ) {
179.8677 +		var script, callback;
179.8678 +		return {
179.8679 +			send: function( _, complete ) {
179.8680 +				script = jQuery("<script>").prop({
179.8681 +					async: true,
179.8682 +					charset: s.scriptCharset,
179.8683 +					src: s.url
179.8684 +				}).on(
179.8685 +					"load error",
179.8686 +					callback = function( evt ) {
179.8687 +						script.remove();
179.8688 +						callback = null;
179.8689 +						if ( evt ) {
179.8690 +							complete( evt.type === "error" ? 404 : 200, evt.type );
179.8691 +						}
179.8692 +					}
179.8693 +				);
179.8694 +				document.head.appendChild( script[ 0 ] );
179.8695 +			},
179.8696 +			abort: function() {
179.8697 +				if ( callback ) {
179.8698 +					callback();
179.8699 +				}
179.8700 +			}
179.8701 +		};
179.8702 +	}
179.8703 +});
179.8704 +
179.8705 +
179.8706 +
179.8707 +
179.8708 +var oldCallbacks = [],
179.8709 +	rjsonp = /(=)\?(?=&|$)|\?\?/;
179.8710 +
179.8711 +// Default jsonp settings
179.8712 +jQuery.ajaxSetup({
179.8713 +	jsonp: "callback",
179.8714 +	jsonpCallback: function() {
179.8715 +		var callback = oldCallbacks.pop() || ( jQuery.expando + "_" + ( nonce++ ) );
179.8716 +		this[ callback ] = true;
179.8717 +		return callback;
179.8718 +	}
179.8719 +});
179.8720 +
179.8721 +// Detect, normalize options and install callbacks for jsonp requests
179.8722 +jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) {
179.8723 +
179.8724 +	var callbackName, overwritten, responseContainer,
179.8725 +		jsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?
179.8726 +			"url" :
179.8727 +			typeof s.data === "string" && !( s.contentType || "" ).indexOf("application/x-www-form-urlencoded") && rjsonp.test( s.data ) && "data"
179.8728 +		);
179.8729 +
179.8730 +	// Handle iff the expected data type is "jsonp" or we have a parameter to set
179.8731 +	if ( jsonProp || s.dataTypes[ 0 ] === "jsonp" ) {
179.8732 +
179.8733 +		// Get callback name, remembering preexisting value associated with it
179.8734 +		callbackName = s.jsonpCallback = jQuery.isFunction( s.jsonpCallback ) ?
179.8735 +			s.jsonpCallback() :
179.8736 +			s.jsonpCallback;
179.8737 +
179.8738 +		// Insert callback into url or form data
179.8739 +		if ( jsonProp ) {
179.8740 +			s[ jsonProp ] = s[ jsonProp ].replace( rjsonp, "$1" + callbackName );
179.8741 +		} else if ( s.jsonp !== false ) {
179.8742 +			s.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.jsonp + "=" + callbackName;
179.8743 +		}
179.8744 +
179.8745 +		// Use data converter to retrieve json after script execution
179.8746 +		s.converters["script json"] = function() {
179.8747 +			if ( !responseContainer ) {
179.8748 +				jQuery.error( callbackName + " was not called" );
179.8749 +			}
179.8750 +			return responseContainer[ 0 ];
179.8751 +		};
179.8752 +
179.8753 +		// force json dataType
179.8754 +		s.dataTypes[ 0 ] = "json";
179.8755 +
179.8756 +		// Install callback
179.8757 +		overwritten = window[ callbackName ];
179.8758 +		window[ callbackName ] = function() {
179.8759 +			responseContainer = arguments;
179.8760 +		};
179.8761 +
179.8762 +		// Clean-up function (fires after converters)
179.8763 +		jqXHR.always(function() {
179.8764 +			// Restore preexisting value
179.8765 +			window[ callbackName ] = overwritten;
179.8766 +
179.8767 +			// Save back as free
179.8768 +			if ( s[ callbackName ] ) {
179.8769 +				// make sure that re-using the options doesn't screw things around
179.8770 +				s.jsonpCallback = originalSettings.jsonpCallback;
179.8771 +
179.8772 +				// save the callback name for future use
179.8773 +				oldCallbacks.push( callbackName );
179.8774 +			}
179.8775 +
179.8776 +			// Call if it was a function and we have a response
179.8777 +			if ( responseContainer && jQuery.isFunction( overwritten ) ) {
179.8778 +				overwritten( responseContainer[ 0 ] );
179.8779 +			}
179.8780 +
179.8781 +			responseContainer = overwritten = undefined;
179.8782 +		});
179.8783 +
179.8784 +		// Delegate to script
179.8785 +		return "script";
179.8786 +	}
179.8787 +});
179.8788 +
179.8789 +
179.8790 +
179.8791 +
179.8792 +// data: string of html
179.8793 +// context (optional): If specified, the fragment will be created in this context, defaults to document
179.8794 +// keepScripts (optional): If true, will include scripts passed in the html string
179.8795 +jQuery.parseHTML = function( data, context, keepScripts ) {
179.8796 +	if ( !data || typeof data !== "string" ) {
179.8797 +		return null;
179.8798 +	}
179.8799 +	if ( typeof context === "boolean" ) {
179.8800 +		keepScripts = context;
179.8801 +		context = false;
179.8802 +	}
179.8803 +	context = context || document;
179.8804 +
179.8805 +	var parsed = rsingleTag.exec( data ),
179.8806 +		scripts = !keepScripts && [];
179.8807 +
179.8808 +	// Single tag
179.8809 +	if ( parsed ) {
179.8810 +		return [ context.createElement( parsed[1] ) ];
179.8811 +	}
179.8812 +
179.8813 +	parsed = jQuery.buildFragment( [ data ], context, scripts );
179.8814 +
179.8815 +	if ( scripts && scripts.length ) {
179.8816 +		jQuery( scripts ).remove();
179.8817 +	}
179.8818 +
179.8819 +	return jQuery.merge( [], parsed.childNodes );
179.8820 +};
179.8821 +
179.8822 +
179.8823 +// Keep a copy of the old load method
179.8824 +var _load = jQuery.fn.load;
179.8825 +
179.8826 +/**
179.8827 + * Load a url into a page
179.8828 + */
179.8829 +jQuery.fn.load = function( url, params, callback ) {
179.8830 +	if ( typeof url !== "string" && _load ) {
179.8831 +		return _load.apply( this, arguments );
179.8832 +	}
179.8833 +
179.8834 +	var selector, type, response,
179.8835 +		self = this,
179.8836 +		off = url.indexOf(" ");
179.8837 +
179.8838 +	if ( off >= 0 ) {
179.8839 +		selector = jQuery.trim( url.slice( off ) );
179.8840 +		url = url.slice( 0, off );
179.8841 +	}
179.8842 +
179.8843 +	// If it's a function
179.8844 +	if ( jQuery.isFunction( params ) ) {
179.8845 +
179.8846 +		// We assume that it's the callback
179.8847 +		callback = params;
179.8848 +		params = undefined;
179.8849 +
179.8850 +	// Otherwise, build a param string
179.8851 +	} else if ( params && typeof params === "object" ) {
179.8852 +		type = "POST";
179.8853 +	}
179.8854 +
179.8855 +	// If we have elements to modify, make the request
179.8856 +	if ( self.length > 0 ) {
179.8857 +		jQuery.ajax({
179.8858 +			url: url,
179.8859 +
179.8860 +			// if "type" variable is undefined, then "GET" method will be used
179.8861 +			type: type,
179.8862 +			dataType: "html",
179.8863 +			data: params
179.8864 +		}).done(function( responseText ) {
179.8865 +
179.8866 +			// Save response for use in complete callback
179.8867 +			response = arguments;
179.8868 +
179.8869 +			self.html( selector ?
179.8870 +
179.8871 +				// If a selector was specified, locate the right elements in a dummy div
179.8872 +				// Exclude scripts to avoid IE 'Permission Denied' errors
179.8873 +				jQuery("<div>").append( jQuery.parseHTML( responseText ) ).find( selector ) :
179.8874 +
179.8875 +				// Otherwise use the full result
179.8876 +				responseText );
179.8877 +
179.8878 +		}).complete( callback && function( jqXHR, status ) {
179.8879 +			self.each( callback, response || [ jqXHR.responseText, status, jqXHR ] );
179.8880 +		});
179.8881 +	}
179.8882 +
179.8883 +	return this;
179.8884 +};
179.8885 +
179.8886 +
179.8887 +
179.8888 +
179.8889 +jQuery.expr.filters.animated = function( elem ) {
179.8890 +	return jQuery.grep(jQuery.timers, function( fn ) {
179.8891 +		return elem === fn.elem;
179.8892 +	}).length;
179.8893 +};
179.8894 +
179.8895 +
179.8896 +
179.8897 +
179.8898 +var docElem = window.document.documentElement;
179.8899 +
179.8900 +/**
179.8901 + * Gets a window from an element
179.8902 + */
179.8903 +function getWindow( elem ) {
179.8904 +	return jQuery.isWindow( elem ) ? elem : elem.nodeType === 9 && elem.defaultView;
179.8905 +}
179.8906 +
179.8907 +jQuery.offset = {
179.8908 +	setOffset: function( elem, options, i ) {
179.8909 +		var curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,
179.8910 +			position = jQuery.css( elem, "position" ),
179.8911 +			curElem = jQuery( elem ),
179.8912 +			props = {};
179.8913 +
179.8914 +		// Set position first, in-case top/left are set even on static elem
179.8915 +		if ( position === "static" ) {
179.8916 +			elem.style.position = "relative";
179.8917 +		}
179.8918 +
179.8919 +		curOffset = curElem.offset();
179.8920 +		curCSSTop = jQuery.css( elem, "top" );
179.8921 +		curCSSLeft = jQuery.css( elem, "left" );
179.8922 +		calculatePosition = ( position === "absolute" || position === "fixed" ) &&
179.8923 +			( curCSSTop + curCSSLeft ).indexOf("auto") > -1;
179.8924 +
179.8925 +		// Need to be able to calculate position if either top or left is auto and position is either absolute or fixed
179.8926 +		if ( calculatePosition ) {
179.8927 +			curPosition = curElem.position();
179.8928 +			curTop = curPosition.top;
179.8929 +			curLeft = curPosition.left;
179.8930 +
179.8931 +		} else {
179.8932 +			curTop = parseFloat( curCSSTop ) || 0;
179.8933 +			curLeft = parseFloat( curCSSLeft ) || 0;
179.8934 +		}
179.8935 +
179.8936 +		if ( jQuery.isFunction( options ) ) {
179.8937 +			options = options.call( elem, i, curOffset );
179.8938 +		}
179.8939 +
179.8940 +		if ( options.top != null ) {
179.8941 +			props.top = ( options.top - curOffset.top ) + curTop;
179.8942 +		}
179.8943 +		if ( options.left != null ) {
179.8944 +			props.left = ( options.left - curOffset.left ) + curLeft;
179.8945 +		}
179.8946 +
179.8947 +		if ( "using" in options ) {
179.8948 +			options.using.call( elem, props );
179.8949 +
179.8950 +		} else {
179.8951 +			curElem.css( props );
179.8952 +		}
179.8953 +	}
179.8954 +};
179.8955 +
179.8956 +jQuery.fn.extend({
179.8957 +	offset: function( options ) {
179.8958 +		if ( arguments.length ) {
179.8959 +			return options === undefined ?
179.8960 +				this :
179.8961 +				this.each(function( i ) {
179.8962 +					jQuery.offset.setOffset( this, options, i );
179.8963 +				});
179.8964 +		}
179.8965 +
179.8966 +		var docElem, win,
179.8967 +			elem = this[ 0 ],
179.8968 +			box = { top: 0, left: 0 },
179.8969 +			doc = elem && elem.ownerDocument;
179.8970 +
179.8971 +		if ( !doc ) {
179.8972 +			return;
179.8973 +		}
179.8974 +
179.8975 +		docElem = doc.documentElement;
179.8976 +
179.8977 +		// Make sure it's not a disconnected DOM node
179.8978 +		if ( !jQuery.contains( docElem, elem ) ) {
179.8979 +			return box;
179.8980 +		}
179.8981 +
179.8982 +		// If we don't have gBCR, just use 0,0 rather than error
179.8983 +		// BlackBerry 5, iOS 3 (original iPhone)
179.8984 +		if ( typeof elem.getBoundingClientRect !== strundefined ) {
179.8985 +			box = elem.getBoundingClientRect();
179.8986 +		}
179.8987 +		win = getWindow( doc );
179.8988 +		return {
179.8989 +			top: box.top + win.pageYOffset - docElem.clientTop,
179.8990 +			left: box.left + win.pageXOffset - docElem.clientLeft
179.8991 +		};
179.8992 +	},
179.8993 +
179.8994 +	position: function() {
179.8995 +		if ( !this[ 0 ] ) {
179.8996 +			return;
179.8997 +		}
179.8998 +
179.8999 +		var offsetParent, offset,
179.9000 +			elem = this[ 0 ],
179.9001 +			parentOffset = { top: 0, left: 0 };
179.9002 +
179.9003 +		// Fixed elements are offset from window (parentOffset = {top:0, left: 0}, because it is its only offset parent
179.9004 +		if ( jQuery.css( elem, "position" ) === "fixed" ) {
179.9005 +			// We assume that getBoundingClientRect is available when computed position is fixed
179.9006 +			offset = elem.getBoundingClientRect();
179.9007 +
179.9008 +		} else {
179.9009 +			// Get *real* offsetParent
179.9010 +			offsetParent = this.offsetParent();
179.9011 +
179.9012 +			// Get correct offsets
179.9013 +			offset = this.offset();
179.9014 +			if ( !jQuery.nodeName( offsetParent[ 0 ], "html" ) ) {
179.9015 +				parentOffset = offsetParent.offset();
179.9016 +			}
179.9017 +
179.9018 +			// Add offsetParent borders
179.9019 +			parentOffset.top += jQuery.css( offsetParent[ 0 ], "borderTopWidth", true );
179.9020 +			parentOffset.left += jQuery.css( offsetParent[ 0 ], "borderLeftWidth", true );
179.9021 +		}
179.9022 +
179.9023 +		// Subtract parent offsets and element margins
179.9024 +		return {
179.9025 +			top: offset.top - parentOffset.top - jQuery.css( elem, "marginTop", true ),
179.9026 +			left: offset.left - parentOffset.left - jQuery.css( elem, "marginLeft", true )
179.9027 +		};
179.9028 +	},
179.9029 +
179.9030 +	offsetParent: function() {
179.9031 +		return this.map(function() {
179.9032 +			var offsetParent = this.offsetParent || docElem;
179.9033 +
179.9034 +			while ( offsetParent && ( !jQuery.nodeName( offsetParent, "html" ) && jQuery.css( offsetParent, "position" ) === "static" ) ) {
179.9035 +				offsetParent = offsetParent.offsetParent;
179.9036 +			}
179.9037 +
179.9038 +			return offsetParent || docElem;
179.9039 +		});
179.9040 +	}
179.9041 +});
179.9042 +
179.9043 +// Create scrollLeft and scrollTop methods
179.9044 +jQuery.each( { scrollLeft: "pageXOffset", scrollTop: "pageYOffset" }, function( method, prop ) {
179.9045 +	var top = "pageYOffset" === prop;
179.9046 +
179.9047 +	jQuery.fn[ method ] = function( val ) {
179.9048 +		return access( this, function( elem, method, val ) {
179.9049 +			var win = getWindow( elem );
179.9050 +
179.9051 +			if ( val === undefined ) {
179.9052 +				return win ? win[ prop ] : elem[ method ];
179.9053 +			}
179.9054 +
179.9055 +			if ( win ) {
179.9056 +				win.scrollTo(
179.9057 +					!top ? val : window.pageXOffset,
179.9058 +					top ? val : window.pageYOffset
179.9059 +				);
179.9060 +
179.9061 +			} else {
179.9062 +				elem[ method ] = val;
179.9063 +			}
179.9064 +		}, method, val, arguments.length, null );
179.9065 +	};
179.9066 +});
179.9067 +
179.9068 +// Add the top/left cssHooks using jQuery.fn.position
179.9069 +// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084
179.9070 +// getComputedStyle returns percent when specified for top/left/bottom/right
179.9071 +// rather than make the css module depend on the offset module, we just check for it here
179.9072 +jQuery.each( [ "top", "left" ], function( i, prop ) {
179.9073 +	jQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition,
179.9074 +		function( elem, computed ) {
179.9075 +			if ( computed ) {
179.9076 +				computed = curCSS( elem, prop );
179.9077 +				// if curCSS returns percentage, fallback to offset
179.9078 +				return rnumnonpx.test( computed ) ?
179.9079 +					jQuery( elem ).position()[ prop ] + "px" :
179.9080 +					computed;
179.9081 +			}
179.9082 +		}
179.9083 +	);
179.9084 +});
179.9085 +
179.9086 +
179.9087 +// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods
179.9088 +jQuery.each( { Height: "height", Width: "width" }, function( name, type ) {
179.9089 +	jQuery.each( { padding: "inner" + name, content: type, "": "outer" + name }, function( defaultExtra, funcName ) {
179.9090 +		// margin is only for outerHeight, outerWidth
179.9091 +		jQuery.fn[ funcName ] = function( margin, value ) {
179.9092 +			var chainable = arguments.length && ( defaultExtra || typeof margin !== "boolean" ),
179.9093 +				extra = defaultExtra || ( margin === true || value === true ? "margin" : "border" );
179.9094 +
179.9095 +			return access( this, function( elem, type, value ) {
179.9096 +				var doc;
179.9097 +
179.9098 +				if ( jQuery.isWindow( elem ) ) {
179.9099 +					// As of 5/8/2012 this will yield incorrect results for Mobile Safari, but there
179.9100 +					// isn't a whole lot we can do. See pull request at this URL for discussion:
179.9101 +					// https://github.com/jquery/jquery/pull/764
179.9102 +					return elem.document.documentElement[ "client" + name ];
179.9103 +				}
179.9104 +
179.9105 +				// Get document width or height
179.9106 +				if ( elem.nodeType === 9 ) {
179.9107 +					doc = elem.documentElement;
179.9108 +
179.9109 +					// Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],
179.9110 +					// whichever is greatest
179.9111 +					return Math.max(
179.9112 +						elem.body[ "scroll" + name ], doc[ "scroll" + name ],
179.9113 +						elem.body[ "offset" + name ], doc[ "offset" + name ],
179.9114 +						doc[ "client" + name ]
179.9115 +					);
179.9116 +				}
179.9117 +
179.9118 +				return value === undefined ?
179.9119 +					// Get width or height on the element, requesting but not forcing parseFloat
179.9120 +					jQuery.css( elem, type, extra ) :
179.9121 +
179.9122 +					// Set width or height on the element
179.9123 +					jQuery.style( elem, type, value, extra );
179.9124 +			}, type, chainable ? margin : undefined, chainable, null );
179.9125 +		};
179.9126 +	});
179.9127 +});
179.9128 +
179.9129 +
179.9130 +// The number of elements contained in the matched element set
179.9131 +jQuery.fn.size = function() {
179.9132 +	return this.length;
179.9133 +};
179.9134 +
179.9135 +jQuery.fn.andSelf = jQuery.fn.addBack;
179.9136 +
179.9137 +
179.9138 +
179.9139 +
179.9140 +// Register as a named AMD module, since jQuery can be concatenated with other
179.9141 +// files that may use define, but not via a proper concatenation script that
179.9142 +// understands anonymous AMD modules. A named AMD is safest and most robust
179.9143 +// way to register. Lowercase jquery is used because AMD module names are
179.9144 +// derived from file names, and jQuery is normally delivered in a lowercase
179.9145 +// file name. Do this after creating the global so that if an AMD module wants
179.9146 +// to call noConflict to hide this version of jQuery, it will work.
179.9147 +
179.9148 +// Note that for maximum portability, libraries that are not jQuery should
179.9149 +// declare themselves as anonymous modules, and avoid setting a global if an
179.9150 +// AMD loader is present. jQuery is a special case. For more information, see
179.9151 +// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon
179.9152 +
179.9153 +if ( typeof define === "function" && define.amd ) {
179.9154 +	define( "jquery", [], function() {
179.9155 +		return jQuery;
179.9156 +	});
179.9157 +}
179.9158 +
179.9159 +
179.9160 +
179.9161 +
179.9162 +var
179.9163 +	// Map over jQuery in case of overwrite
179.9164 +	_jQuery = window.jQuery,
179.9165 +
179.9166 +	// Map over the $ in case of overwrite
179.9167 +	_$ = window.$;
179.9168 +
179.9169 +jQuery.noConflict = function( deep ) {
179.9170 +	if ( window.$ === jQuery ) {
179.9171 +		window.$ = _$;
179.9172 +	}
179.9173 +
179.9174 +	if ( deep && window.jQuery === jQuery ) {
179.9175 +		window.jQuery = _jQuery;
179.9176 +	}
179.9177 +
179.9178 +	return jQuery;
179.9179 +};
179.9180 +
179.9181 +// Expose jQuery and $ identifiers, even in
179.9182 +// AMD (#7102#comment:10, https://github.com/jquery/jquery/pull/557)
179.9183 +// and CommonJS for browser emulators (#13566)
179.9184 +if ( typeof noGlobal === strundefined ) {
179.9185 +	window.jQuery = window.$ = jQuery;
179.9186 +}
179.9187 +
179.9188 +
179.9189 +
179.9190 +
179.9191 +return jQuery;
179.9192 +
179.9193 +}));
179.9194 \ No newline at end of file
   180.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   180.2 +++ b/Touchiot/.gitignore	Thu Jun 04 14:50:33 2015 +0200
   180.3 @@ -0,0 +1,1 @@
   180.4 +.DS_Store
   181.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   181.2 +++ b/Touchiot/README.md	Thu Jun 04 14:50:33 2015 +0200
   181.3 @@ -0,0 +1,67 @@
   181.4 +Touch Notifier Node.js IoT App
   181.5 +============================
   181.6 +The Touch Notifier Node.js sample application distributed within Intel® XDK IoT Edition under the IoT with Node.js Projects project creation option showcases how to read digital data from a Grover Starter Kit Plus – IoT Intel® Edition Touch Sensor, start a web server and communicate wirelessly using WebSockets.
   181.7 +
   181.8 +Intel(R) XDK IoT Edition
   181.9 +-------------------------------------------
  181.10 +This template is part of the Intel(R) XDK IoT Edition. 
  181.11 +Download the Intel(R) XDK IoT Edition at https://software.intel.com/en-us/html5/xdk-iot. To see the technical details of the sample, 
  181.12 +please visit the sample article page at https://software.intel.com/en-us/html5/articles/iot-touch-notifier-nodejs-and-html5-samples.
  181.13 +
  181.14 +
  181.15 +Important App Files
  181.16 +---------------------------
  181.17 +* main.js
  181.18 +* package.json
  181.19 +* icon.png
  181.20 +* README.md
  181.21 +
  181.22 +License Information Follows
  181.23 +---------------------------
  181.24 +Copyright (c) 2014, Intel Corporation. All rights reserved.
  181.25 +
  181.26 +Redistribution and use in source and binary forms, with or without modification, 
  181.27 +are permitted provided that the following conditions are met:
  181.28 +
  181.29 +- Redistributions of source code must retain the above copyright notice, 
  181.30 +  this list of conditions and the following disclaimer.
  181.31 +
  181.32 +- Redistributions in binary form must reproduce the above copyright notice, 
  181.33 +  this list of conditions and the following disclaimer in the documentation 
  181.34 +  and/or other materials provided with the distribution.
  181.35 +
  181.36 +- Neither the name of Intel Corporation nor the names of its contributors 
  181.37 +  may be used to endorse or promote products derived from this software 
  181.38 +  without specific prior written permission.
  181.39 +
  181.40 +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 
  181.41 +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 
  181.42 +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 
  181.43 +ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 
  181.44 +LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 
  181.45 +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE 
  181.46 +GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 
  181.47 +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 
  181.48 +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT 
  181.49 +OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  181.50 +
  181.51 +mraa
  181.52 +--------------------------------------------
  181.53 +* Included on the IoTDevkit Linux Image 
  181.54 +
  181.55 +* source:  https://github.com/intel-iot-devkit/mraa
  181.56 +* license:  https://github.com/intel-iot-devkit/mraa/blob/9d488c8e869e59e1dff2c68218a8f38e9b959cd7/cmake/modules/LICENSE_1_0.txt
  181.57 +
  181.58 +express
  181.59 +--------------------------------------------
  181.60 +http://expressjs.com/
  181.61 +
  181.62 +* source: https://github.com/strongloop/express
  181.63 +* license: https://github.com/strongloop/express/blob/master/LICENSE
  181.64 +
  181.65 +socket.io
  181.66 +--------------------------------------------
  181.67 +http://socket.io/
  181.68 +
  181.69 +* source: https://github.com/Automattic/socket.io
  181.70 +* license: https://github.com/Automattic/socket.io/blob/master/LICENSE
   182.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   182.2 +++ b/Touchiot/Touchiot.xdk	Thu Jun 04 14:50:33 2015 +0200
   182.3 @@ -0,0 +1,39 @@
   182.4 +{
   182.5 +  "project": {
   182.6 +    "projectSettingsVersion": "1.2",
   182.7 +    "creationData": {
   182.8 +      "projectTypeName": "com.intel.xdk.projecttype.iotapp",
   182.9 +      "src": "https://edge-intel.s3.amazonaws.com/iotapp/production/release-2015-ww07/iotapp-touch-notifier/sample.zip",
  182.10 +      "projectGuid": "57cf1b18-d764-4689-86d6-a473d576228e",
  182.11 +      "lastModifiedDate": 1425145569885,
  182.12 +      "creationDate": 1425145569772
  182.13 +    },
  182.14 +    "sourceDirectory": "",
  182.15 +    "cordovaPluginsDirectory": "plugins",
  182.16 +    "startFile": "main.js",
  182.17 +    "projectFiles": {},
  182.18 +    "projectDirectories": {},
  182.19 +    "libraries": [
  182.20 +      {
  182.21 +        "name": "Cordova",
  182.22 +        "version": "2.9.0",
  182.23 +        "data": {
  182.24 +          "default": true
  182.25 +        }
  182.26 +      },
  182.27 +      {
  182.28 +        "name": "intelXDK",
  182.29 +        "version": "4.0.0",
  182.30 +        "data": {
  182.31 +          "default": true
  182.32 +        }
  182.33 +      }
  182.34 +    ],
  182.35 +    "cordovaPlugins": [],
  182.36 +    "serviceMethods": [],
  182.37 +    "gameAssetDirectory": "asset",
  182.38 +    "gameMetadata": {},
  182.39 +    "projectTags": [],
  182.40 +    "buildConfigurations": {}
  182.41 +  }
  182.42 +}
  182.43 \ No newline at end of file
   183.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   183.2 +++ b/Touchiot/Touchiot.xdke	Thu Jun 04 14:50:33 2015 +0200
   183.3 @@ -0,0 +1,8 @@
   183.4 +{
   183.5 +  "project": {
   183.6 +    "projectSettingsVersion": "1.2",
   183.7 +    "currentBuildConfiguration": null,
   183.8 +    "projectFiles": {},
   183.9 +    "projectDirectories": {}
  183.10 +  }
  183.11 +}
  183.12 \ No newline at end of file
   184.1 Binary file Touchiot/icon.png has changed
   185.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   185.2 +++ b/Touchiot/main.js	Thu Jun 04 14:50:33 2015 +0200
   185.3 @@ -0,0 +1,91 @@
   185.4 +/*jslint node:true,vars:true, unparam:true */
   185.5 +/*jshint unused:true */
   185.6 +
   185.7 +
   185.8 +/*
   185.9 +The Touch Notifier Node.js sample application distributed within Intel® XDK IoT Edition under the IoT with Node.js Projects project creation option showcases how to read digital data from a Grover Starter Kit Plus – IoT Intel® Edition Touch Sensor, start a web server and communicate wirelessly using WebSockets.
  185.10 +
  185.11 +MRAA - Low Level Skeleton Library for Communication on GNU/Linux platforms
  185.12 +Library in C/C++ to interface with Galileo & other Intel platforms, in a structured and sane API with port nanmes/numbering that match boards & with bindings to javascript & python.
  185.13 +
  185.14 +Steps for installing MRAA & UPM Library on Intel IoT Platform with IoTDevKit Linux* image
  185.15 +Using a ssh client: 
  185.16 +1. echo "src maa-upm http://iotdk.intel.com/repos/1.1/intelgalactic" > /etc/opkg/intel-iotdk.conf
  185.17 +2. opkg update
  185.18 +3. opkg upgrade
  185.19 +
  185.20 +Article: https://software.intel.com/en-us/html5/articles/iot-touch-notifier-nodejs-and-html5-samples
  185.21 +*/
  185.22 +
  185.23 +//MRAA Library was installed on the board directly through ssh session
  185.24 +var mraa = require("mraa");
  185.25 +var mqtt = require("mqtt");
  185.26 +var http = require("http");
  185.27 +
  185.28 +function setOpenhabState(txtNewState) {
  185.29 +    http.get("http://192.168.42.245:8080/CMD?door_bell="+txtNewState);
  185.30 +}
  185.31 +
  185.32 +//GROVE Kit Shield D6 --> GPIO6
  185.33 +//GROVE Kit Shield D2 --> GPIO2
  185.34 +function startSensorWatch(socket) {
  185.35 +    'use strict';
  185.36 +    var touch_sensor_value = 0, last_t_sensor_value;
  185.37 +    var mqtcli = mqtt.connect('mqtt://raspeinz.local/');
  185.38 +
  185.39 +    //Touch Sensor connected to D2 connector
  185.40 +    var digital_pin_D2 = new mraa.Gpio(2);
  185.41 +    digital_pin_D2.dir(mraa.DIR_IN);
  185.42 +
  185.43 +    //Buzzer connected to D6 connector
  185.44 +    var digital_pin_D6 = new mraa.Gpio(6);
  185.45 +    digital_pin_D6.dir(mraa.DIR_OUT);
  185.46 +
  185.47 +    digital_pin_D6.write(0);
  185.48 +
  185.49 +    setInterval(function () {
  185.50 +        touch_sensor_value = digital_pin_D2.read();
  185.51 +        if (touch_sensor_value === 1 && last_t_sensor_value === 0) {
  185.52 +            console.log("Buzz ON!!!");
  185.53 +            socket.emit('message', "present");
  185.54 +            mqtcli.publish('door', 'ding');
  185.55 +            //mqtcli.end(); // end connection
  185.56 +// FUR ULRICH!            //http.get("http://ulno.local:8080/CMD?door_bell=ON");
  185.57 +            digital_pin_D6.write(touch_sensor_value);
  185.58 +        } else if (touch_sensor_value === 0 && last_t_sensor_value === 1) {
  185.59 +            console.log("Buzz OFF!!!");
  185.60 +            //socket.emit('message', "absent");
  185.61 +            mqtcli.publish('door', 'dong');
  185.62 +// FUR ULRICH!            //http.get("http://ulno.local:8080/CMD?door_bell=OFF");
  185.63 +            digital_pin_D6.write(touch_sensor_value);
  185.64 +        }
  185.65 +        last_t_sensor_value = touch_sensor_value;
  185.66 +    }, 500);
  185.67 +}
  185.68 +
  185.69 +//Create Socket.io server
  185.70 +//var http = require('http'); // See top requires
  185.71 +var app = http.createServer(function (req, res) {
  185.72 +    'use strict';
  185.73 +    res.writeHead(200, {'Content-Type': 'text/plain'});
  185.74 +    res.end('<h1>Hello world from Intel IoT platform!</h1>');
  185.75 +}).listen(1338);
  185.76 +var io = require('socket.io')(app);
  185.77 +
  185.78 +console.log("Sample Reading Touch Sensor");
  185.79 +
  185.80 +//Attach a 'connection' event handler to the server
  185.81 +io.on('connection', function (socket) {
  185.82 +    'use strict';
  185.83 +    console.log('a user connected');
  185.84 +    //Emits an event along with a message
  185.85 +    socket.emit('connected', 'Welcome');
  185.86 +
  185.87 +    //Start watching Sensors connected to Galileo board
  185.88 +    startSensorWatch(socket);
  185.89 +
  185.90 +    //Attach a 'disconnect' event handler to the socket
  185.91 +    socket.on('disconnect', function () {
  185.92 +        console.log('user disconnected');
  185.93 +    });
  185.94 +});
   186.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   186.2 +++ b/Touchiot/package.json	Thu Jun 04 14:50:33 2015 +0200
   186.3 @@ -0,0 +1,13 @@
   186.4 +{
   186.5 +  "name": "TouchNotifier",
   186.6 +  "description": "",
   186.7 +  "version": "0.0.0",
   186.8 +  "main": "main.js",
   186.9 +  "engines": {
  186.10 +    "node": ">=0.10.0"
  186.11 +  },
  186.12 +  "dependencies": {
  186.13 +      "socket.io":"latest",
  186.14 +      "mqtt":"latest"
  186.15 +  }
  186.16 +}
   187.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   187.2 +++ b/doorbell/bellhear.js	Thu Jun 04 14:50:33 2015 +0200
   187.3 @@ -0,0 +1,61 @@
   187.4 +#! /usr/bin/env node
   187.5 +//
   187.6 +//  Doorbell - Door Bell Gateway for Mesh Networks
   187.7 +//  Copyright © 2015 Michael Schloh von Bennewitz <michael@schloh.com>
   187.8 +//
   187.9 +//  Permission to use, copy, modify, and/or distribute this software for
  187.10 +//  any purpose with or without fee is hereby granted, provided that the
  187.11 +//  above copyright notice and this permission notice appear in all copies.
  187.12 +//
  187.13 +//  THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
  187.14 +//  WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
  187.15 +//  WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
  187.16 +//  AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
  187.17 +//  DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
  187.18 +//  PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
  187.19 +//  ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
  187.20 +//  THIS SOFTWARE.
  187.21 +//
  187.22 +//  This file is part of Doorbell, a smart door bell IoT gateway
  187.23 +//  which can be found at http://dev.europalab.com/doorbell/
  187.24 +//
  187.25 +//  bellhear.js: ECMA JavaScript implementation
  187.26 +//
  187.27 +
  187.28 +/***********************************************************
  187.29 +|              _                  _          _ _           |
  187.30 +|           __| | ___   ___  _ __| |__   ___| | |          |
  187.31 +|          / _` |/ _ \ / _ \| '__| '_ \ / _ \ | |          |
  187.32 +|         | (_| | (_) | (_) | |  | |_) |  __/ | |          |
  187.33 +|          \__,_|\___/ \___/|_|  |_.__/ \___|_|_|          |
  187.34 +|                                                          |
  187.35 +| Requirements: MQTT broker with standard configuration    |
  187.36 +|               NodeJS and NPM modules (see package.json)  |
  187.37 +|                                                          |
  187.38 +| Execute: To start this application, launch it with the   |
  187.39 +|          script named bellhear.js: $ ./bellhear.js       |
  187.40 +|                                                          |
  187.41 +| Support: http://list.europalab.com/mailman/doorbell/     |
  187.42 +|                                                          |
  187.43 +| Test: mosquitto_pub -m ON -t door/bell                   |
  187.44 +|                                                          |
  187.45 +***********************************************************/
  187.46 +
  187.47 +
  187.48 +// Simple doorbell subscribe client
  187.49 +var mqtt = require('mqtt');
  187.50 +var locli = mqtt.connect('mqtt://localhost/');
  187.51 +
  187.52 +locli.on('connect', function () {
  187.53 +    //locli.subscribe('/door/bell');  // explicit
  187.54 +    //locli.subscribe('/door/#');     // recursive
  187.55 +    locli.subscribe('/door/+');       // one level
  187.56 +});
  187.57 + 
  187.58 +locli.on('message', function(topic, message) {
  187.59 +    console.log(message.toString());
  187.60 +    //locli.end();
  187.61 +});
  187.62 +
  187.63 +// disable automatic reconnect
  187.64 +locli.options.reconnectPeriod = 0;
   188.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   188.2 +++ b/doorbell/bellpush.js	Thu Jun 04 14:50:33 2015 +0200
   188.3 @@ -0,0 +1,58 @@
   188.4 +#! /usr/bin/env node
   188.5 +//
   188.6 +//  Doorbell - Door Bell Gateway for Mesh Networks
   188.7 +//  Copyright © 2015 Michael Schloh von Bennewitz <michael@schloh.com>
   188.8 +//
   188.9 +//  Permission to use, copy, modify, and/or distribute this software for
  188.10 +//  any purpose with or without fee is hereby granted, provided that the
  188.11 +//  above copyright notice and this permission notice appear in all copies.
  188.12 +//
  188.13 +//  THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
  188.14 +//  WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
  188.15 +//  WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
  188.16 +//  AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
  188.17 +//  DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
  188.18 +//  PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
  188.19 +//  ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
  188.20 +//  THIS SOFTWARE.
  188.21 +//
  188.22 +//  This file is part of Doorbell, a smart door bell IoT gateway
  188.23 +//  which can be found at http://dev.europalab.com/doorbell/
  188.24 +//
  188.25 +//  bellpush.js: ECMA JavaScript implementation
  188.26 +//
  188.27 +
  188.28 +/***********************************************************
  188.29 +|              _                  _          _ _           |
  188.30 +|           __| | ___   ___  _ __| |__   ___| | |          |
  188.31 +|          / _` |/ _ \ / _ \| '__| '_ \ / _ \ | |          |
  188.32 +|         | (_| | (_) | (_) | |  | |_) |  __/ | |          |
  188.33 +|          \__,_|\___/ \___/|_|  |_.__/ \___|_|_|          |
  188.34 +|                                                          |
  188.35 +| Requirements: MQTT broker with standard configuration    |
  188.36 +|               NodeJS and NPM modules (see package.json)  |
  188.37 +|                                                          |
  188.38 +| Execute: To start this application, launch it with the   |
  188.39 +|          script named bellpush.js: $ ./bellpush.js       |
  188.40 +|                                                          |
  188.41 +| Support: http://list.europalab.com/mailman/doorbell/     |
  188.42 +|                                                          |
  188.43 +| Test: mosquitto_sub -t door/bell                         |
  188.44 +|                                                          |
  188.45 +***********************************************************/
  188.46 +
  188.47 +// Simple doorbell publish client
  188.48 +var mqtt = require('mqtt')
  188.49 +var locli = mqtt.connect('mqtt://localhost/');
  188.50 +var args = process.argv.slice(2).length;  // Argc
  188.51 +var prog = process.argv.slice(1)[0];  // Program name
  188.52 +var parm = process.argv.slice(2)[0];  // Parameter cmd
  188.53 +
  188.54 +// Either activate or deactivate the doorbell
  188.55 +if (args > 1 || parm != 'ON' && parm != 'OFF')
  188.56 +    console.error('usage: %s <ON|OFF>', prog);
  188.57 +else
  188.58 +    locli.publish('/door/bell', parm);
  188.59 +
  188.60 +// Close connection
  188.61 +locli.end();
   189.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   189.2 +++ b/mqttest/iotpubcli.js	Thu Jun 04 14:50:33 2015 +0200
   189.3 @@ -0,0 +1,9 @@
   189.4 +// Simple publish client
   189.5 +
   189.6 +//var mqtt = require('mqtt'), locli = mqtt.connect('mqtt://test.mosquitto.org/');
   189.7 +//var mqtt = require('mqtt'), locli = mqtt.connect('mqtt://192.168.42.250/');
   189.8 +var mqtt = require('mqtt'), locli = mqtt.connect('mqtt://raspeinz.local/');
   189.9 +locli.publish('iotmsg', 'Mqtt');
  189.10 +locli.publish('iotmsg', 'is pretty cool');
  189.11 +//locli.publish('messages', 'remember that!', {retain: true});
  189.12 +locli.end();
   190.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   190.2 +++ b/mqttest/iotsubcli.js	Thu Jun 04 14:50:33 2015 +0200
   190.3 @@ -0,0 +1,17 @@
   190.4 +// Simple subscribe client
   190.5 +
   190.6 +//var mqtt = require('mqtt'), locli = mqtt.connect('mqtt://test.mosquitto.org/');
   190.7 +//var mqtt = require('mqtt'), locli = mqtt.connect('mqtt://192.168.42.250/');
   190.8 +var mqtt = require('mqtt'), locli = mqtt.connect('mqtt://raspeinz.local/');
   190.9 +
  190.10 +locli.on('connect', function () {
  190.11 +  locli.subscribe('iotmsg');
  190.12 +});
  190.13 + 
  190.14 +locli.on('message', function(topic, message) {
  190.15 +  console.log(message.toString());
  190.16 +  //locli.end();
  190.17 +});
  190.18 +
  190.19 +// disable automatic reconnect
  190.20 +locli.options.reconnectPeriod = 0;

mercurial