From 7844c0edaa720c875789c6f354ee3d09603b96b1 Mon Sep 17 00:00:00 2001 From: Kenji Urushima Date: Thu, 12 Nov 2015 00:45:29 +0900 Subject: [PATCH] 5.0.2 release --- ChangeLog.txt | 10 + api/files.html | 23 +- api/symbols/KJUR.jws.JWS.html | 73 + api/symbols/global__.html | 363 +++ api/symbols/src/base64x-1.1.js.html | 81 +- api/symbols/src/jws-3.3.js.html | 349 ++- api/symbols/src/keyutil-1.0.js.html | 2 +- api/symbols/src/nodeutil-1.0.js.html | 94 + base64x-1.1.js | 39 +- base64x-1.1.min.js | 4 +- bower.json | 2 +- index.html | 9 + jsrsasign-5.0.2-all-min.js | 289 ++ jsrsasign-latest-all-min.js | 13 +- jws-3.3.js | 67 +- jws-3.3.min.js | 4 +- nodeutil-1.0.js | 86 + nodeutil-1.0.min.js | 3 + npm/lib/footer.js | 9 + npm/lib/jsrsasign.js | 22 +- npm/package.json | 2 +- sample/css/bbplayer.css | 182 ++ sample/css/clndr.css | 188 ++ sample/css/fd-slider.css | 150 + sample/css/flexslider.css | 112 + sample/css/jquery.nouislider.css | 172 ++ sample/css/style.css | 3415 ++++++++++++++++++++++ sample/images/arrow-left.png | Bin 0 -> 645 bytes sample/images/arrow-right.png | Bin 0 -> 653 bytes sample/images/audio.jpg | Bin 0 -> 15863 bytes sample/images/audio2.jpg | Bin 0 -> 15751 bytes sample/images/close.png | Bin 0 -> 3048 bytes sample/images/cloud.png | Bin 0 -> 4709 bytes sample/images/clouds.png | Bin 0 -> 3696 bytes sample/images/heart.png | Bin 0 -> 3159 bytes sample/images/img_sprite.png | Bin 0 -> 25353 bytes sample/images/left_arrow.png | Bin 0 -> 3221 bytes sample/images/likes.png | Bin 0 -> 3933 bytes sample/images/lock.png | Bin 0 -> 3159 bytes sample/images/mail.png | Bin 0 -> 520 bytes sample/images/mail1.png | Bin 0 -> 3042 bytes sample/images/menu_1_left.png | Bin 0 -> 3374 bytes sample/images/menu_1_right.png | Bin 0 -> 4940 bytes sample/images/menu_2_left.png | Bin 0 -> 4638 bytes sample/images/menu_3_left.png | Bin 0 -> 3056 bytes sample/images/menu_3_right.PNG | Bin 0 -> 5448 bytes sample/images/menu_4_left.png | Bin 0 -> 2908 bytes sample/images/menu_4_right.png | Bin 0 -> 3654 bytes sample/images/menu_5_1.PNG | Bin 0 -> 2912 bytes sample/images/menu_5_2.png | Bin 0 -> 2895 bytes sample/images/menu_5_3.png | Bin 0 -> 3019 bytes sample/images/menu_5_4.png | Bin 0 -> 2991 bytes sample/images/menu_5_5.png | Bin 0 -> 2901 bytes sample/images/notify.png | Bin 0 -> 5388 bytes sample/images/pause.png | Bin 0 -> 288 bytes sample/images/pic1.jpg | Bin 0 -> 38579 bytes sample/images/pic2.jpg | Bin 0 -> 9170 bytes sample/images/play.png | Bin 0 -> 3879 bytes sample/images/plus.png | Bin 0 -> 2974 bytes sample/images/request.png | Bin 0 -> 4205 bytes sample/images/search.png | Bin 0 -> 3015 bytes sample/images/serch_plus.png | Bin 0 -> 3671 bytes sample/images/set.png | Bin 0 -> 3171 bytes sample/images/shop.png | Bin 0 -> 3168 bytes sample/images/sun.png | Bin 0 -> 4008 bytes sample/images/sun1.png | Bin 0 -> 3888 bytes sample/images/sun_cloud.png | Bin 0 -> 7543 bytes sample/images/sun_icon1.png | Bin 0 -> 746 bytes sample/images/tag_close.png | Bin 0 -> 3033 bytes sample/images/temp.png | Bin 0 -> 6791 bytes sample/images/twit_1_ban.jpg | Bin 0 -> 24742 bytes sample/images/twit_1_social_dribble.png | Bin 0 -> 3229 bytes sample/images/twit_1_social_dribbleh.png | Bin 0 -> 3245 bytes sample/images/twit_1_social_fb.png | Bin 0 -> 2912 bytes sample/images/twit_1_social_fbh.png | Bin 0 -> 2920 bytes sample/images/twit_1_social_twitter.png | Bin 0 -> 3144 bytes sample/images/twit_1_social_twitterh.png | Bin 0 -> 3167 bytes sample/images/twit_1_social_vimeo.png | Bin 0 -> 3147 bytes sample/images/twit_1_social_vimeoh.png | Bin 0 -> 3195 bytes sample/images/twit_1_user.png | Bin 0 -> 31045 bytes sample/images/user.png | Bin 0 -> 3146 bytes sample/images/weather_1.jpg | Bin 0 -> 6038 bytes sample/images/weather_2.jpg | Bin 0 -> 19071 bytes sample/index.html | 135 + sample/js/Chart.js | 1273 ++++++++ sample/js/bbplayer.js | 329 +++ sample/js/clndr.js | 833 ++++++ sample/js/easyResponsiveTabs.js | 111 + sample/js/fd-slider.js | 1212 ++++++++ sample/js/jquery-1.11.1.min.js | 4 + sample/js/jquery.circliful.min.js | 1 + sample/js/jquery.flexslider.js | 874 ++++++ sample/js/jquery.nouislider.js | 1650 +++++++++++ sample/js/moment-2.2.1.js | 8 + sample/js/site.js | 90 + sample/js/underscore-min.js | 6 + sample/js/w3layouts-License.txt | 55 + sample/tool_intary.html | 179 ++ sample/tool_jwktp.html | 203 ++ test/index.html | 1 + test/qunit-do-base64x.html | 6 + test/qunit-do-jws.html | 45 + 102 files changed, 12585 insertions(+), 193 deletions(-) create mode 100644 api/symbols/src/nodeutil-1.0.js.html create mode 100644 jsrsasign-5.0.2-all-min.js create mode 100644 nodeutil-1.0.js create mode 100644 nodeutil-1.0.min.js create mode 100755 sample/css/bbplayer.css create mode 100755 sample/css/clndr.css create mode 100755 sample/css/fd-slider.css create mode 100755 sample/css/flexslider.css create mode 100755 sample/css/jquery.nouislider.css create mode 100755 sample/css/style.css create mode 100755 sample/images/arrow-left.png create mode 100755 sample/images/arrow-right.png create mode 100755 sample/images/audio.jpg create mode 100755 sample/images/audio2.jpg create mode 100755 sample/images/close.png create mode 100755 sample/images/cloud.png create mode 100755 sample/images/clouds.png create mode 100755 sample/images/heart.png create mode 100755 sample/images/img_sprite.png create mode 100755 sample/images/left_arrow.png create mode 100755 sample/images/likes.png create mode 100755 sample/images/lock.png create mode 100755 sample/images/mail.png create mode 100755 sample/images/mail1.png create mode 100755 sample/images/menu_1_left.png create mode 100755 sample/images/menu_1_right.png create mode 100755 sample/images/menu_2_left.png create mode 100755 sample/images/menu_3_left.png create mode 100755 sample/images/menu_3_right.PNG create mode 100755 sample/images/menu_4_left.png create mode 100755 sample/images/menu_4_right.png create mode 100755 sample/images/menu_5_1.PNG create mode 100755 sample/images/menu_5_2.png create mode 100755 sample/images/menu_5_3.png create mode 100755 sample/images/menu_5_4.png create mode 100755 sample/images/menu_5_5.png create mode 100755 sample/images/notify.png create mode 100755 sample/images/pause.png create mode 100755 sample/images/pic1.jpg create mode 100755 sample/images/pic2.jpg create mode 100755 sample/images/play.png create mode 100755 sample/images/plus.png create mode 100755 sample/images/request.png create mode 100755 sample/images/search.png create mode 100755 sample/images/serch_plus.png create mode 100755 sample/images/set.png create mode 100755 sample/images/shop.png create mode 100755 sample/images/sun.png create mode 100755 sample/images/sun1.png create mode 100755 sample/images/sun_cloud.png create mode 100755 sample/images/sun_icon1.png create mode 100755 sample/images/tag_close.png create mode 100755 sample/images/temp.png create mode 100755 sample/images/twit_1_ban.jpg create mode 100755 sample/images/twit_1_social_dribble.png create mode 100755 sample/images/twit_1_social_dribbleh.png create mode 100755 sample/images/twit_1_social_fb.png create mode 100755 sample/images/twit_1_social_fbh.png create mode 100755 sample/images/twit_1_social_twitter.png create mode 100755 sample/images/twit_1_social_twitterh.png create mode 100755 sample/images/twit_1_social_vimeo.png create mode 100755 sample/images/twit_1_social_vimeoh.png create mode 100755 sample/images/twit_1_user.png create mode 100755 sample/images/user.png create mode 100755 sample/images/weather_1.jpg create mode 100755 sample/images/weather_2.jpg create mode 100755 sample/index.html create mode 100755 sample/js/Chart.js create mode 100755 sample/js/bbplayer.js create mode 100755 sample/js/clndr.js create mode 100755 sample/js/easyResponsiveTabs.js create mode 100755 sample/js/fd-slider.js create mode 100755 sample/js/jquery-1.11.1.min.js create mode 100755 sample/js/jquery.circliful.min.js create mode 100755 sample/js/jquery.flexslider.js create mode 100755 sample/js/jquery.nouislider.js create mode 100755 sample/js/moment-2.2.1.js create mode 100755 sample/js/site.js create mode 100755 sample/js/underscore-min.js create mode 100755 sample/js/w3layouts-License.txt create mode 100755 sample/tool_intary.html create mode 100755 sample/tool_jwktp.html create mode 100755 test/qunit-do-jws.html diff --git a/ChangeLog.txt b/ChangeLog.txt index e5dc2ad7..ab50d37e 100755 --- a/ChangeLog.txt +++ b/ChangeLog.txt @@ -1,6 +1,16 @@ ChangeLog for jsrsasign +* Changes between 5.0.1 to 5.0.2 (2015-Nov-11) + - jws 3.3.1 to 3.3.2 + - RFC 7638 getJWKthumbprint method added + - base64x 1.1.5 to 1.1.6 + - function intarystrtohex added + - nodeutil 1.0.0 newly added + - utils for file I/O in Node.js + - npm + - add reference to intarystrtohex and CryptoJS + * Changes between 5.0.0 to 5.0.1 (2015-Oct-17) - keyutil 1.0.10 to 1.0.11 - add support for bare RSA NED hexadecimal key in KEYUTIL.getKey diff --git a/api/files.html b/api/files.html index 008f5032..28406312 100644 --- a/api/files.html +++ b/api/files.html @@ -554,7 +554,7 @@

base64x-1.1.js

Version:
-
asn1 1.1.5 (2015-Sep-13)
+
asn1 1.1.6 (2015-Nov-11)
@@ -649,7 +649,7 @@

jws-3.3.js

Version:
-
3.3.1 (2015-Oct-14)
+
3.3.2 (2015-Nov-11)
@@ -691,6 +691,25 @@

keyutil-1.0.js

+ + +
+ +
+

nodeutil-1.0.js

+ + +
+ +
Author:
+
Kenji Urushima kenji.urushima@gmail.com
+ + +
Version:
+
1.0.0 (2015-Nov-11)
+ + +

diff --git a/api/symbols/KJUR.jws.JWS.html b/api/symbols/KJUR.jws.JWS.html index 10b2e183..3501b4d8 100644 --- a/api/symbols/KJUR.jws.JWS.html +++ b/api/symbols/KJUR.jws.JWS.html @@ -509,6 +509,18 @@

+ + <static>   + +
KJUR.jws.JWS.getJWKthumbprint(o) +
+
get RFC 7638 JWK thumbprint from JWK object +This method calculates JWK thmubprint for specified JWK object +as described in +RFC 7638.
+ + + <static>   @@ -783,6 +795,67 @@

Supported Algorithms

+
+ + +
<static> + + {String} + KJUR.jws.JWS.getJWKthumbprint(o) + +
+
+ get RFC 7638 JWK thumbprint from JWK object +This method calculates JWK thmubprint for specified JWK object +as described in +RFC 7638. +It supports all type of "kty". (i.e. "RSA", "EC" and "oct" +(for symmetric key)) +Working sample is +here. + + +
+ + + +
jwk = {"kty":"RSA", "n":"0vx...", "e":"AQAB", ...};
+thumbprint = KJUR.jws.JWS.getJWKthumbprint(jwk);
+ + + + +
+
Parameters:
+ +
+ {String} o + +
+
JWK object to be calculated thumbprint
+ +
+ + + +
+
Since:
+
jsrsasign 5.0.2 jws 3.3.2
+
+ + + + +
+
Returns:
+ +
{String} Base64 URL encoded JWK thumbprint value
+ +
+ + + +
diff --git a/api/symbols/global__.html b/api/symbols/global__.html index aec6bbe3..4e2a8473 100644 --- a/api/symbols/global__.html +++ b/api/symbols/global__.html @@ -566,6 +566,15 @@

+ +   + + +
convert string of integer array to hexadecimal string.
+ + +   @@ -586,6 +595,36 @@

+ +   + +
readFile(binFile) +
+
read file and return file contents +This function only works in Node.js.
+ + + + +   + +
readFileHexByBin(binFile) +
+
read binary file and return file contents as hexadecimal string +This function only works in Node.js.
+ + + + +   + +
readFileUTF8(utf8File) +
+
read file and return file contents as utf-8 string +This function only works in Node.js.
+ + +   @@ -595,6 +634,26 @@

+ +   + +
saveFile(binFile, rawString) +
+
save raw string to file +This function only works in Node.js.
+ + + + +   + +
saveFileBinByHex(binFile, hexString) +
+
save data represented by hexadecimal string to file +This function only works in Node.js.
+ + +   @@ -1332,6 +1391,77 @@

+
+ + +
+ + {String} + intarystrtohex(s) + +
+
+ convert string of integer array to hexadecimal string.
+This function converts a string of JavaScript integer array to +a hexadecimal string. Each integer value shall be in a range +from 0 to 255 otherwise it raise exception. Input string can +have extra space or newline string so that they will be ignored. + +
+ Defined in: base64x-1.1.js. + + +
+ + + +
intarystrtohex(" [123, 34, 101, 34, 58] ")
+-> 7b2265223a (i.e. `{"e":` as string)
+ + + + +
+
Parameters:
+ +
+ {String} s + +
+
string of integer array
+ +
+ + + +
+
Since:
+
base64x 1.1.6 jsrsasign 5.0.2
+
+ + + +
+
Throws:
+ +
+ +
+
"malformed integer array string: *" for wrong input
+ +
+ + +
+
Returns:
+ +
{String} hexadecimal string
+ +
+ + + +
@@ -1426,6 +1556,147 @@

+
+ + +
+ + {String} + readFile(binFile) + +
+
+ read file and return file contents +This function only works in Node.js. + +
+ Defined in: nodeutil-1.0.js. + + +
+ + + + +
+
Parameters:
+ +
+ {String} binFile + +
+
file name to be read
+ +
+ + + + + +
+
Returns:
+ +
{String} raw string of file contents
+ +
+ + + + +
+ + +
+ + {String} + readFileHexByBin(binFile) + +
+
+ read binary file and return file contents as hexadecimal string +This function only works in Node.js. + +
+ Defined in: nodeutil-1.0.js. + + +
+ + + + +
+
Parameters:
+ +
+ {String} binFile + +
+
file name to be read
+ +
+ + + + + +
+
Returns:
+ +
{String} hexadecimal string of file contents
+ +
+ + + + +
+ + +
+ + {String} + readFileUTF8(utf8File) + +
+
+ read file and return file contents as utf-8 string +This function only works in Node.js. + +
+ Defined in: nodeutil-1.0.js. + + +
+ + + + +
+
Parameters:
+ +
+ {String} utf8File + +
+
file name to be read
+ +
+ + + + + +
+
Returns:
+ +
{String} utf-8 string of file contents
+ +
+ + + +
@@ -1482,6 +1753,98 @@

+
+ + +
+ + + saveFile(binFile, rawString) + +
+
+ save raw string to file +This function only works in Node.js. + +
+ Defined in: nodeutil-1.0.js. + + +
+ + + + +
+
Parameters:
+ +
+ {String} binFile + +
+
file name to save contents.
+ +
+ {String} rawString + +
+
string contents to be saved.
+ +
+ + + + + + + + +
+ + +
+ + + saveFileBinByHex(binFile, hexString) + +
+
+ save data represented by hexadecimal string to file +This function only works in Node.js. + +
+ Defined in: nodeutil-1.0.js. + + +
+ + + + +
+
Parameters:
+ +
+ {String} binFile + +
+
file name to save contents.
+ +
+ {String} hexString + +
+
hexadecimal string to be saved.
+ +
+ + + + + + + +
diff --git a/api/symbols/src/base64x-1.1.js.html b/api/symbols/src/base64x-1.1.js.html index 1a4fc4b1..298bc2d7 100644 --- a/api/symbols/src/base64x-1.1.js.html +++ b/api/symbols/src/base64x-1.1.js.html @@ -5,12 +5,12 @@ .STRN {color: #393;} .REGX {color: #339;} .line {border-right: 1px dotted #666; color: #666; font-style: normal;} -
  1 /*! base64x-1.1.5 (c) 2012-2015 Kenji Urushima | kjur.github.com/jsjws/license
+	
  1 /*! base64x-1.1.6 (c) 2012-2015 Kenji Urushima | kjur.github.com/jsjws/license
   2  */
   3 /*
   4  * base64x.js - Base64url and supplementary functions for Tom Wu's base64.js library
   5  *
-  6  * version: 1.1.5 (2015-Sep-13)
+  6  * version: 1.1.6 (2015-Nov-11)
   7  *
   8  * Copyright (c) 2012-2015 Kenji Urushima (kenji.urushima@gmail.com)
   9  *
@@ -28,7 +28,7 @@
  21  * @fileOverview
  22  * @name base64x-1.1.js
  23  * @author Kenji Urushima kenji.urushima@gmail.com
- 24  * @version asn1 1.1.5 (2015-Sep-13)
+ 24  * @version asn1 1.1.6 (2015-Nov-11)
  25  * @since jsrsasign 2.1
  26  * @license <a href="http://kjur.github.io/jsrsasign/license/">MIT License</a>
  27  */
@@ -415,24 +415,57 @@
 408 // ==== others ================================
 409 
 410 /**
-411  * find index of string where two string differs
-412  * @param {String} s1 string to compare
-413  * @param {String} s2 string to compare
-414  * @return {Number} string index of where character differs. Return -1 if same.
-415  * @since jsrsasign 4.9.0 base64x 1.1.5
-416  * @example
-417  * strdiffidx("abcdefg", "abcd4fg") -> 4
-418  * strdiffidx("abcdefg", "abcdefg") -> -1
-419  * strdiffidx("abcdefg", "abcdef") -> 6
-420  * strdiffidx("abcdefgh", "abcdef") -> 6
-421  */
-422 var strdiffidx = function(s1, s2) {
-423     var n = s1.length;
-424     if (s1.length > s2.length) n = s2.length;
-425     for (var i = 0; i < n; i++) {
-426 	if (s1.charCodeAt(i) != s2.charCodeAt(i)) return i;
-427     }
-428     if (s1.length != s2.length) return n;
-429     return -1; // same
-430 };
-431 
\ No newline at end of file +411 * convert string of integer array to hexadecimal string.<br/> +412 * @param {String} s string of integer array +413 * @return {String} hexadecimal string +414 * @since base64x 1.1.6 jsrsasign 5.0.2 +415 * @throws "malformed integer array string: *" for wrong input +416 * @description +417 * This function converts a string of JavaScript integer array to +418 * a hexadecimal string. Each integer value shall be in a range +419 * from 0 to 255 otherwise it raise exception. Input string can +420 * have extra space or newline string so that they will be ignored. +421 * +422 * @example +423 * intarystrtohex(" [123, 34, 101, 34, 58] ") +424 * -> 7b2265223a (i.e. `{"e":` as string) +425 */
+426 function intarystrtohex(s) { +427 s = s.replace(/^\s*\[\s*/, ''); +428 s = s.replace(/\s*\]\s*$/, ''); +429 s = s.replace(/\s*/g, ''); +430 try { +431 var hex = s.split(/,/).map(function(element, index, array) { +432 var i = parseInt(element); +433 if (i < 0 || 255 < i) throw "integer not in range 0-255"; +434 var hI = ("00" + i.toString(16)).slice(-2); +435 return hI; +436 }).join(''); +437 return hex; +438 } catch(ex) { +439 throw "malformed integer array string: " + ex; +440 } +441 } +442 +443 /** +444 * find index of string where two string differs +445 * @param {String} s1 string to compare +446 * @param {String} s2 string to compare +447 * @return {Number} string index of where character differs. Return -1 if same. +448 * @since jsrsasign 4.9.0 base64x 1.1.5 +449 * @example +450 * strdiffidx("abcdefg", "abcd4fg") -> 4 +451 * strdiffidx("abcdefg", "abcdefg") -> -1 +452 * strdiffidx("abcdefg", "abcdef") -> 6 +453 * strdiffidx("abcdefgh", "abcdef") -> 6 +454 */ +455 var strdiffidx = function(s1, s2) { +456 var n = s1.length; +457 if (s1.length > s2.length) n = s2.length; +458 for (var i = 0; i < n; i++) { +459 if (s1.charCodeAt(i) != s2.charCodeAt(i)) return i; +460 } +461 if (s1.length != s2.length) return n; +462 return -1; // same +463 }; +464
\ No newline at end of file diff --git a/api/symbols/src/jws-3.3.js.html b/api/symbols/src/jws-3.3.js.html index 0c0d9a91..4c734f67 100644 --- a/api/symbols/src/jws-3.3.js.html +++ b/api/symbols/src/jws-3.3.js.html @@ -5,12 +5,12 @@ .STRN {color: #393;} .REGX {color: #339;} .line {border-right: 1px dotted #666; color: #666; font-style: normal;} -
  1 /*! jws-3.3.1 (c) 2013-2015 Kenji Urushima | kjur.github.com/jsrsasign/license
+	
  1 /*! jws-3.3.2 (c) 2013-2015 Kenji Urushima | kjur.github.com/jsrsasign/license
   2  */
   3 /*
   4  * jws.js - JSON Web Signature(JWS) and JSON Web Token(JWT) Class
   5  *
-  6  * version: 3.3.1 (2015 Oct 14)
+  6  * version: 3.3.2 (2015 Nov 11)
   7  *
   8  * Copyright (c) 2010-2015 Kenji Urushima (kenji.urushima@gmail.com)
   9  *
@@ -25,7 +25,7 @@
  18  * @fileOverview
  19  * @name jws-3.3.js
  20  * @author Kenji Urushima kenji.urushima@gmail.com
- 21  * @version 3.3.1 (2015-Oct-14)
+ 21  * @version 3.3.2 (2015-Nov-11)
  22  * @since jsjws 1.0, jsrsasign 4.8.0
  23  * @license <a href="http://kjur.github.io/jsrsasign/license/">MIT License</a>
  24  */
@@ -743,145 +743,206 @@
 736 };
 737 
 738 /**
-739  * IntDate class for time representation for JSON Web Token(JWT)
-740  * @class KJUR.jws.IntDate class
-741  * @name KJUR.jws.IntDate
-742  * @since jws 3.0.1
-743  * @description
-744  * Utility class for IntDate which is integer representation of UNIX origin time
-745  * used in JSON Web Token(JWT).
-746  */
-747 KJUR.jws.IntDate = {};
-748 
-749 /**
-750  * get UNIX origin time from by string
-751  * @name get
-752  * @memberOf KJUR.jws.IntDate
-753  * @function
-754  * @static
-755  * @param {String} s string of time representation
-756  * @return {Integer} UNIX origin time in seconds for argument 's'
-757  * @since jws 3.0.1
-758  * @throws "unsupported format: s" when malformed format
-759  * @description
-760  * This method will accept following representation of time.
-761  * <ul>
-762  * <li>now - current time</li>
-763  * <li>now + 1hour - after 1 hour from now</li>
-764  * <li>now + 1day - after 1 day from now</li>
-765  * <li>now + 1month - after 30 days from now</li>
-766  * <li>now + 1year - after 365 days from now</li>
-767  * <li>YYYYmmDDHHMMSSZ - UTC time (ex. 20130828235959Z)</li>
-768  * <li>number - UNIX origin time (seconds from 1970-01-01 00:00:00) (ex. 1377714748)</li>
-769  * </ul>
-770  */
-771 KJUR.jws.IntDate.get = function(s) {
-772     if (s == "now") {
-773 	return KJUR.jws.IntDate.getNow();
-774     } else if (s == "now + 1hour") {
-775 	return KJUR.jws.IntDate.getNow() + 60 * 60;
-776     } else if (s == "now + 1day") {
-777 	return KJUR.jws.IntDate.getNow() + 60 * 60 * 24;
-778     } else if (s == "now + 1month") {
-779 	return KJUR.jws.IntDate.getNow() + 60 * 60 * 24 * 30;
-780     } else if (s == "now + 1year") {
-781 	return KJUR.jws.IntDate.getNow() + 60 * 60 * 24 * 365;
-782     } else if (s.match(/Z$/)) {
-783 	return KJUR.jws.IntDate.getZulu(s);
-784     } else if (s.match(/^[0-9]+$/)) {
-785 	return parseInt(s);
-786     }
-787     throw "unsupported format: " + s;
-788 };
+739  * get RFC 7638 JWK thumbprint from JWK object
+740  * @name getJWKthumbprint
+741  * @memberOf KJUR.jws.JWS
+742  * @function
+743  * @static
+744  * @param {String} o JWK object to be calculated thumbprint
+745  * @return {String} Base64 URL encoded JWK thumbprint value
+746  * @since jsrsasign 5.0.2 jws 3.3.2
+747  * @description
+748  * This method calculates JWK thmubprint for specified JWK object
+749  * as described in 
+750  * <a href="https://tools.ietf.org/html/rfc7638">RFC 7638</a>.
+751  * It supports all type of "kty". (i.e. "RSA", "EC" and "oct"
+752  * (for symmetric key))
+753  * Working sample is 
+754  * <a href="https://kjur.github.io/jsrsasign/sample/tool_jwktp.html">here</a>.
+755  * @example
+756  * jwk = {"kty":"RSA", "n":"0vx...", "e":"AQAB", ...};
+757  * thumbprint = KJUR.jws.JWS.getJWKthumbprint(jwk);
+758  */
+759 KJUR.jws.JWS.getJWKthumbprint = function(o) {
+760     if (o.kty !== "RSA" &&
+761 	o.kty !== "EC" &&
+762 	o.kty !== "oct")
+763 	throw "unsupported algorithm for JWK Thumprint";
+764 
+765     // 1. get canonically ordered json string
+766     var s = '{';
+767     if (o.kty === "RSA") {
+768 	if (typeof o.n != "string" || typeof o.e != "string")
+769 	    throw "wrong n and e value for RSA key";
+770 	s += '"' + 'e' + '":"' + o.e + '",';
+771 	s += '"' + 'kty' + '":"' + o.kty + '",';
+772 	s += '"' + 'n' + '":"' + o.n + '"}';
+773     } else if (o.kty === "EC") {
+774 	if (typeof o.crv != "string" || 
+775 	    typeof o.x != "string" ||
+776 	    typeof o.y != "string")
+777 	    throw "wrong crv, x and y value for EC key";
+778 	s += '"' + 'crv' + '":"' + o.crv + '",';
+779 	s += '"' + 'kty' + '":"' + o.kty + '",';
+780 	s += '"' + 'x' + '":"' + o.x + '",';
+781 	s += '"' + 'y' + '":"' + o.y + '"}';
+782     } else if (o.kty === "oct") {
+783 	if (typeof o.k != "string")
+784 	    throw "wrong k value for oct(symmetric) key";
+785 	s += '"' + 'kty' + '":"' + o.kty + '",';
+786 	s += '"' + 'k' + '":"' + o.k + '"}';
+787     }
+788     //alert(s);
 789 
-790 /**
-791  * get UNIX origin time from Zulu time representation string
-792  * @name getZulu
-793  * @memberOf KJUR.jws.IntDate
-794  * @function
-795  * @static
-796  * @param {String} s string of Zulu time representation (ex. 20151012125959Z)
-797  * @return {Integer} UNIX origin time in seconds for argument 's'
-798  * @since jws 3.0.1
-799  * @throws "unsupported format: s" when malformed format
-800  * @description
-801  * This method provides UNIX origin time from Zulu time.
-802  * @example
-803  * KJUR.jws.IntDate.getZulu("20151012125959Z") => 1478...
-804  */
-805 KJUR.jws.IntDate.getZulu = function(s) {
-806     if (a = s.match(/(\d{4})(\d\d)(\d\d)(\d\d)(\d\d)(\d\d)Z/)) {
-807 	var year = parseInt(RegExp.$1);
-808 	var month = parseInt(RegExp.$2) - 1;
-809 	var day = parseInt(RegExp.$3);
-810 	var hour = parseInt(RegExp.$4);
-811 	var min = parseInt(RegExp.$5);
-812 	var sec = parseInt(RegExp.$6);
-813 	var d = new Date(Date.UTC(year, month, day, hour, min, sec));
-814 	return ~~(d / 1000);
-815     }
-816     throw "unsupported format: " + s;
-817 };
-818 
-819 /**
-820  * get UNIX origin time of current time
-821  * @name getNow
-822  * @memberOf KJUR.jws.IntDate
-823  * @function
-824  * @static
-825  * @return {Integer} UNIX origin time for current time
-826  * @since jws 3.0.1
-827  * @description
-828  * This method provides UNIX origin time for current time
-829  * @example
-830  * KJUR.jws.IntDate.getNow() => 1478...
-831  */
-832 KJUR.jws.IntDate.getNow = function() {
-833     var d = ~~(new Date() / 1000);
-834     return d;
-835 };
-836 
-837 /**
-838  * get UTC time string from UNIX origin time value
-839  * @name intDate2UTCString
-840  * @memberOf KJUR.jws.IntDate
-841  * @function
-842  * @static
-843  * @param {Integer} intDate UNIX origin time value (ex. 1478...)
-844  * @return {String} UTC time string
-845  * @since jws 3.0.1
-846  * @description
-847  * This method provides UTC time string for UNIX origin time value.
-848  * @example
-849  * KJUR.jws.IntDate.intDate2UTCString(1478...) => "2015 Oct ..."
-850  */
-851 KJUR.jws.IntDate.intDate2UTCString = function(intDate) {
-852     var d = new Date(intDate * 1000);
-853     return d.toUTCString();
-854 };
-855 
-856 /**
-857  * get UTC time string from UNIX origin time value
-858  * @name intDate2Zulu
-859  * @memberOf KJUR.jws.IntDate
-860  * @function
-861  * @static
-862  * @param {Integer} intDate UNIX origin time value (ex. 1478...)
-863  * @return {String} Zulu time string
-864  * @since jws 3.0.1
-865  * @description
-866  * This method provides Zulu time string for UNIX origin time value.
-867  * @example
-868  * KJUR.jws.IntDate.intDate2UTCString(1478...) => "20151012...Z"
-869  */
-870 KJUR.jws.IntDate.intDate2Zulu = function(intDate) {
-871     var d = new Date(intDate * 1000);
-872     var year = ("0000" + d.getUTCFullYear()).slice(-4);    
-873     var mon =  ("00" + (d.getUTCMonth() + 1)).slice(-2);    
-874     var day =  ("00" + d.getUTCDate()).slice(-2);    
-875     var hour = ("00" + d.getUTCHours()).slice(-2);    
-876     var min =  ("00" + d.getUTCMinutes()).slice(-2);    
-877     var sec =  ("00" + d.getUTCSeconds()).slice(-2);    
-878     return year + mon + day + hour + min + sec + "Z";
-879 };
-880 
\ No newline at end of file +790
// 2. get thumb print +791 var hJWK = rstrtohex(s); +792 var hash = KJUR.crypto.Util.hashHex(hJWK, "sha256"); +793 var hashB64U = hextob64u(hash); +794 +795 return hashB64U; +796 }; +797 +798 /** +799 * IntDate class for time representation for JSON Web Token(JWT) +800 * @class KJUR.jws.IntDate class +801 * @name KJUR.jws.IntDate +802 * @since jws 3.0.1 +803 * @description +804 * Utility class for IntDate which is integer representation of UNIX origin time +805 * used in JSON Web Token(JWT). +806 */ +807 KJUR.jws.IntDate = {}; +808 +809 /** +810 * get UNIX origin time from by string +811 * @name get +812 * @memberOf KJUR.jws.IntDate +813 * @function +814 * @static +815 * @param {String} s string of time representation +816 * @return {Integer} UNIX origin time in seconds for argument 's' +817 * @since jws 3.0.1 +818 * @throws "unsupported format: s" when malformed format +819 * @description +820 * This method will accept following representation of time. +821 * <ul> +822 * <li>now - current time</li> +823 * <li>now + 1hour - after 1 hour from now</li> +824 * <li>now + 1day - after 1 day from now</li> +825 * <li>now + 1month - after 30 days from now</li> +826 * <li>now + 1year - after 365 days from now</li> +827 * <li>YYYYmmDDHHMMSSZ - UTC time (ex. 20130828235959Z)</li> +828 * <li>number - UNIX origin time (seconds from 1970-01-01 00:00:00) (ex. 1377714748)</li> +829 * </ul> +830 */ +831 KJUR.jws.IntDate.get = function(s) { +832 if (s == "now") { +833 return KJUR.jws.IntDate.getNow(); +834 } else if (s == "now + 1hour") { +835 return KJUR.jws.IntDate.getNow() + 60 * 60; +836 } else if (s == "now + 1day") { +837 return KJUR.jws.IntDate.getNow() + 60 * 60 * 24; +838 } else if (s == "now + 1month") { +839 return KJUR.jws.IntDate.getNow() + 60 * 60 * 24 * 30; +840 } else if (s == "now + 1year") { +841 return KJUR.jws.IntDate.getNow() + 60 * 60 * 24 * 365; +842 } else if (s.match(/Z$/)) { +843 return KJUR.jws.IntDate.getZulu(s); +844 } else if (s.match(/^[0-9]+$/)) { +845 return parseInt(s); +846 } +847 throw "unsupported format: " + s; +848 }; +849 +850 /** +851 * get UNIX origin time from Zulu time representation string +852 * @name getZulu +853 * @memberOf KJUR.jws.IntDate +854 * @function +855 * @static +856 * @param {String} s string of Zulu time representation (ex. 20151012125959Z) +857 * @return {Integer} UNIX origin time in seconds for argument 's' +858 * @since jws 3.0.1 +859 * @throws "unsupported format: s" when malformed format +860 * @description +861 * This method provides UNIX origin time from Zulu time. +862 * @example +863 * KJUR.jws.IntDate.getZulu("20151012125959Z") => 1478... +864 */ +865 KJUR.jws.IntDate.getZulu = function(s) { +866 if (a = s.match(/(\d{4})(\d\d)(\d\d)(\d\d)(\d\d)(\d\d)Z/)) { +867 var year = parseInt(RegExp.$1); +868 var month = parseInt(RegExp.$2) - 1; +869 var day = parseInt(RegExp.$3); +870 var hour = parseInt(RegExp.$4); +871 var min = parseInt(RegExp.$5); +872 var sec = parseInt(RegExp.$6); +873 var d = new Date(Date.UTC(year, month, day, hour, min, sec)); +874 return ~~(d / 1000); +875 } +876 throw "unsupported format: " + s; +877 }; +878 +879 /** +880 * get UNIX origin time of current time +881 * @name getNow +882 * @memberOf KJUR.jws.IntDate +883 * @function +884 * @static +885 * @return {Integer} UNIX origin time for current time +886 * @since jws 3.0.1 +887 * @description +888 * This method provides UNIX origin time for current time +889 * @example +890 * KJUR.jws.IntDate.getNow() => 1478... +891 */ +892 KJUR.jws.IntDate.getNow = function() { +893 var d = ~~(new Date() / 1000); +894 return d; +895 }; +896 +897 /** +898 * get UTC time string from UNIX origin time value +899 * @name intDate2UTCString +900 * @memberOf KJUR.jws.IntDate +901 * @function +902 * @static +903 * @param {Integer} intDate UNIX origin time value (ex. 1478...) +904 * @return {String} UTC time string +905 * @since jws 3.0.1 +906 * @description +907 * This method provides UTC time string for UNIX origin time value. +908 * @example +909 * KJUR.jws.IntDate.intDate2UTCString(1478...) => "2015 Oct ..." +910 */ +911 KJUR.jws.IntDate.intDate2UTCString = function(intDate) { +912 var d = new Date(intDate * 1000); +913 return d.toUTCString(); +914 }; +915 +916 /** +917 * get UTC time string from UNIX origin time value +918 * @name intDate2Zulu +919 * @memberOf KJUR.jws.IntDate +920 * @function +921 * @static +922 * @param {Integer} intDate UNIX origin time value (ex. 1478...) +923 * @return {String} Zulu time string +924 * @since jws 3.0.1 +925 * @description +926 * This method provides Zulu time string for UNIX origin time value. +927 * @example +928 * KJUR.jws.IntDate.intDate2UTCString(1478...) => "20151012...Z" +929 */ +930 KJUR.jws.IntDate.intDate2Zulu = function(intDate) { +931 var d = new Date(intDate * 1000); +932 var year = ("0000" + d.getUTCFullYear()).slice(-4); +933 var mon = ("00" + (d.getUTCMonth() + 1)).slice(-2); +934 var day = ("00" + d.getUTCDate()).slice(-2); +935 var hour = ("00" + d.getUTCHours()).slice(-2); +936 var min = ("00" + d.getUTCMinutes()).slice(-2); +937 var sec = ("00" + d.getUTCSeconds()).slice(-2); +938 return year + mon + day + hour + min + sec + "Z"; +939 }; +940 +941
\ No newline at end of file diff --git a/api/symbols/src/keyutil-1.0.js.html b/api/symbols/src/keyutil-1.0.js.html index 58154408..46cd531a 100644 --- a/api/symbols/src/keyutil-1.0.js.html +++ b/api/symbols/src/keyutil-1.0.js.html @@ -1296,7 +1296,7 @@ 1289 } 1290 1291 // 2.1.2. bare ECC private key by hex values -1292 if (param.curve !== undefined && param.d !== undefined && ) { +1292 if (param.curve !== undefined && param.d !== undefined) { 1293 return new KJUR.crypto.ECDSA({prv: param.d, curve: param.curve}); 1294 } 1295 diff --git a/api/symbols/src/nodeutil-1.0.js.html b/api/symbols/src/nodeutil-1.0.js.html new file mode 100644 index 00000000..4e3b602d --- /dev/null +++ b/api/symbols/src/nodeutil-1.0.js.html @@ -0,0 +1,94 @@ +
  1 /*! nodeutil-1.0.0 (c) 2015 Kenji Urushima | kjur.github.com/jsrsasign/license
+  2  */
+  3 /*
+  4  * nodeutil.js - Utilities for Node
+  5  *
+  6  * version: 1.0.0 (2015 Nov 11)
+  7  *
+  8  * Copyright (c) 2015 Kenji Urushima (kenji.urushima@gmail.com)
+  9  *
+ 10  * This software is licensed under the terms of the MIT License.
+ 11  * http://kjur.github.com/jsrsasign/license/
+ 12  *
+ 13  * The above copyright and license notice shall be 
+ 14  * included in all copies or substantial portions of the Software.
+ 15  */
+ 16 
+ 17 /**
+ 18  * @fileOverview
+ 19  * @name nodeutil-1.0.js
+ 20  * @author Kenji Urushima kenji.urushima@gmail.com
+ 21  * @version 1.0.0 (2015-Nov-11)
+ 22  * @since jsrsasign 5.0.2
+ 23  * @license <a href="http://kjur.github.io/jsrsasign/license/">MIT License</a>
+ 24  */
+ 25 
+ 26 /**
+ 27  * read file and return file contents as utf-8 string
+ 28  * @param {String} utf8File file name to be read
+ 29  * @return {String} utf-8 string of file contents
+ 30  * @description
+ 31  * This function only works in Node.js.
+ 32  */
+ 33 function readFileUTF8(utf8File) {
+ 34     return require('fs').readFileSync(utf8File, 'utf8');
+ 35 }
+ 36 
+ 37 /**
+ 38  * read binary file and return file contents as hexadecimal string
+ 39  * @param {String} binFile file name to be read
+ 40  * @return {String} hexadecimal string of file contents
+ 41  * @description
+ 42  * This function only works in Node.js.
+ 43  */
+ 44 function readFileHexByBin(binFile) {
+ 45     var rs = require('jsrsasign');
+ 46     var fs = require('fs');
+ 47     return rs.rstrtohex(fs.readFileSync(binFile, 'binary'));
+ 48 }
+ 49 
+ 50 /**
+ 51  * read file and return file contents
+ 52  * @param {String} binFile file name to be read
+ 53  * @return {String} raw string of file contents
+ 54  * @description
+ 55  * This function only works in Node.js.
+ 56  */
+ 57 function readFile(binFile) {
+ 58     var fs = require('fs');
+ 59     return fs.readFileSync(binFile, 'binary');
+ 60 }
+ 61 
+ 62 /**
+ 63  * save raw string to file
+ 64  * @param {String} binFile file name to save contents.
+ 65  * @param {String} rawString string contents to be saved.
+ 66  * @description
+ 67  * This function only works in Node.js.
+ 68  */
+ 69 function saveFile(binFile, rawString) {
+ 70     var fs = require('fs');
+ 71     fs.writeFileSync(binFile, rawString, 'binary');
+ 72 }
+ 73 
+ 74 /**
+ 75  * save data represented by hexadecimal string to file
+ 76  * @param {String} binFile file name to save contents.
+ 77  * @param {String} hexString hexadecimal string to be saved.
+ 78  * @description
+ 79  * This function only works in Node.js.
+ 80  */
+ 81 function saveFileBinByHex(binFile, hexString) {
+ 82     var fs = require('fs');
+ 83     var rs = require('jsrsasign');
+ 84     var rawString = rs.hextorstr(hexString);
+ 85     fs.writeFileSync(binFile, rawString, 'binary');
+ 86 }
+ 87 
\ No newline at end of file diff --git a/base64x-1.1.js b/base64x-1.1.js index a1d6c4bb..9cd7827b 100644 --- a/base64x-1.1.js +++ b/base64x-1.1.js @@ -1,9 +1,9 @@ -/*! base64x-1.1.5 (c) 2012-2015 Kenji Urushima | kjur.github.com/jsjws/license +/*! base64x-1.1.6 (c) 2012-2015 Kenji Urushima | kjur.github.com/jsjws/license */ /* * base64x.js - Base64url and supplementary functions for Tom Wu's base64.js library * - * version: 1.1.5 (2015-Sep-13) + * version: 1.1.6 (2015-Nov-11) * * Copyright (c) 2012-2015 Kenji Urushima (kenji.urushima@gmail.com) * @@ -21,7 +21,7 @@ * @fileOverview * @name base64x-1.1.js * @author Kenji Urushima kenji.urushima@gmail.com - * @version asn1 1.1.5 (2015-Sep-13) + * @version asn1 1.1.6 (2015-Nov-11) * @since jsrsasign 2.1 * @license MIT License */ @@ -407,6 +407,39 @@ function newline_toDos(s) { // ==== others ================================ +/** + * convert string of integer array to hexadecimal string.
+ * @param {String} s string of integer array + * @return {String} hexadecimal string + * @since base64x 1.1.6 jsrsasign 5.0.2 + * @throws "malformed integer array string: *" for wrong input + * @description + * This function converts a string of JavaScript integer array to + * a hexadecimal string. Each integer value shall be in a range + * from 0 to 255 otherwise it raise exception. Input string can + * have extra space or newline string so that they will be ignored. + * + * @example + * intarystrtohex(" [123, 34, 101, 34, 58] ") + * -> 7b2265223a (i.e. `{"e":` as string) + */ +function intarystrtohex(s) { + s = s.replace(/^\s*\[\s*/, ''); + s = s.replace(/\s*\]\s*$/, ''); + s = s.replace(/\s*/g, ''); + try { + var hex = s.split(/,/).map(function(element, index, array) { + var i = parseInt(element); + if (i < 0 || 255 < i) throw "integer not in range 0-255"; + var hI = ("00" + i.toString(16)).slice(-2); + return hI; + }).join(''); + return hex; + } catch(ex) { + throw "malformed integer array string: " + ex; + } +} + /** * find index of string where two string differs * @param {String} s1 string to compare diff --git a/base64x-1.1.min.js b/base64x-1.1.min.js index 279bc9d4..0e014cdf 100644 --- a/base64x-1.1.min.js +++ b/base64x-1.1.min.js @@ -1,3 +1,3 @@ -/*! base64x-1.1.5 (c) 2012-2015 Kenji Urushima | kjur.github.com/jsjws/license +/*! base64x-1.1.6 (c) 2012-2015 Kenji Urushima | kjur.github.com/jsjws/license */ -function Base64x(){}function stoBA(d){var b=new Array();for(var c=0;ca.length){d=a.length}for(var b=0;ba.length){d=a.length}for(var b=0;bopensource free pure JavaScript cryptographic library s TUTORIALS | API REFERENCE | DEMOS | +NEW DEMOS | NPM | @@ -61,6 +62,14 @@

FEATURES

NEWS

+
2015-Nov-11: +
+Release 5.0.2 is now available. +RFC 7638 JWK thumbprint +supported. +Some file read/save functions added for Node.js +in nodeutil.js. +
2015-Oct-14:
Release 5.0.0 is now available. diff --git a/jsrsasign-5.0.2-all-min.js b/jsrsasign-5.0.2-all-min.js new file mode 100644 index 00000000..65c4c9c9 --- /dev/null +++ b/jsrsasign-5.0.2-all-min.js @@ -0,0 +1,289 @@ +/* + * jsrsasign 5.0.2 (c) 2010-2015 Kenji Urushima | kjur.github.com/jsrsasign/license + */ + +/* +yahoo-min.js +Copyright (c) 2011, Yahoo! Inc. All rights reserved. +Code licensed under the BSD License: +http://developer.yahoo.com/yui/license.html +version: 2.9.0 +*/ +if(typeof YAHOO=="undefined"||!YAHOO){var YAHOO={};}YAHOO.namespace=function(){var b=arguments,g=null,e,c,f;for(e=0;e":">",'"':""","'":"'","/":"/","`":"`"},d=["toString","valueOf"],e={isArray:function(j){return a.toString.apply(j)===c;},isBoolean:function(j){return typeof j==="boolean";},isFunction:function(j){return(typeof j==="function")||a.toString.apply(j)===h;},isNull:function(j){return j===null;},isNumber:function(j){return typeof j==="number"&&isFinite(j);},isObject:function(j){return(j&&(typeof j==="object"||f.isFunction(j)))||false;},isString:function(j){return typeof j==="string";},isUndefined:function(j){return typeof j==="undefined";},_IEEnumFix:(YAHOO.env.ua.ie)?function(l,k){var j,n,m;for(j=0;j"'\/`]/g,function(k){return g[k];});},extend:function(m,n,l){if(!n||!m){throw new Error("extend failed, please check that "+"all dependencies are included.");}var k=function(){},j;k.prototype=n.prototype;m.prototype=new k();m.prototype.constructor=m;m.superclass=n.prototype;if(n.prototype.constructor==a.constructor){n.prototype.constructor=n;}if(l){for(j in l){if(f.hasOwnProperty(l,j)){m.prototype[j]=l[j];}}f._IEEnumFix(m.prototype,l);}},augmentObject:function(n,m){if(!m||!n){throw new Error("Absorb failed, verify dependencies.");}var j=arguments,l,o,k=j[2];if(k&&k!==true){for(l=2;l0)?f.dump(j[l],p-1):t);}else{r.push(j[l]);}r.push(q);}if(r.length>1){r.pop();}r.push("]");}else{r.push("{");for(l in j){if(f.hasOwnProperty(j,l)){r.push(l+m);if(f.isObject(j[l])){r.push((p>0)?f.dump(j[l],p-1):t);}else{r.push(j[l]);}r.push(q);}}if(r.length>1){r.pop();}r.push("}");}return r.join("");},substitute:function(x,y,E,l){var D,C,B,G,t,u,F=[],p,z=x.length,A="dump",r=" ",q="{",m="}",n,w;for(;;){D=x.lastIndexOf(q,z);if(D<0){break;}C=x.indexOf(m,D);if(D+1>C){break;}p=x.substring(D+1,C);G=p;u=null;B=G.indexOf(r);if(B>-1){u=G.substring(B+1);G=G.substring(0,B);}t=y[G];if(E){t=E(G,t,u);}if(f.isObject(t)){if(f.isArray(t)){t=f.dump(t,parseInt(u,10));}else{u=u||"";n=u.indexOf(A);if(n>-1){u=u.substring(4);}w=t.toString();if(w===i||n>-1){t=f.dump(t,parseInt(u,10));}else{t=w;}}}else{if(!f.isString(t)&&!f.isNumber(t)){t="~-"+F.length+"-~";F[F.length]=p;}}x=x.substring(0,D)+t+x.substring(C+1);if(l===false){z=D-1;}}for(D=F.length-1;D>=0;D=D-1){x=x.replace(new RegExp("~-"+D+"-~"),"{"+F[D]+"}","g");}return x;},trim:function(j){try{return j.replace(/^\s+|\s+$/g,"");}catch(k){return j; +}},merge:function(){var n={},k=arguments,j=k.length,m;for(m=0;m>>2]>>>(24-(r%4)*8))&255;q[(n+r)>>>2]|=o<<(24-((n+r)%4)*8)}}else{for(var r=0;r>>2]=p[r>>>2]}}this.sigBytes+=s;return this},clamp:function(){var o=this.words;var n=this.sigBytes;o[n>>>2]&=4294967295<<(32-(n%4)*8);o.length=e.ceil(n/4)},clone:function(){var n=j.clone.call(this);n.words=this.words.slice(0);return n},random:function(p){var o=[];for(var n=0;n>>2]>>>(24-(n%4)*8))&255;q.push((s>>>4).toString(16));q.push((s&15).toString(16))}return q.join("")},parse:function(p){var n=p.length;var q=[];for(var o=0;o>>3]|=parseInt(p.substr(o,2),16)<<(24-(o%8)*4)}return new l.init(q,n/2)}};var d=m.Latin1={stringify:function(q){var r=q.words;var p=q.sigBytes;var n=[];for(var o=0;o>>2]>>>(24-(o%4)*8))&255;n.push(String.fromCharCode(s))}return n.join("")},parse:function(p){var n=p.length;var q=[];for(var o=0;o>>2]|=(p.charCodeAt(o)&255)<<(24-(o%4)*8)}return new l.init(q,n)}};var c=m.Utf8={stringify:function(n){try{return decodeURIComponent(escape(d.stringify(n)))}catch(o){throw new Error("Malformed UTF-8 data")}},parse:function(n){return d.parse(unescape(encodeURIComponent(n)))}};var i=b.BufferedBlockAlgorithm=j.extend({reset:function(){this._data=new l.init();this._nDataBytes=0},_append:function(n){if(typeof n=="string"){n=c.parse(n)}this._data.concat(n);this._nDataBytes+=n.sigBytes},_process:function(w){var q=this._data;var x=q.words;var n=q.sigBytes;var t=this.blockSize;var v=t*4;var u=n/v;if(w){u=e.ceil(u)}else{u=e.max((u|0)-this._minBufferSize,0)}var s=u*t;var r=e.min(s*4,n);if(s){for(var p=0;pe&&(b=a.finalize(b));b.clamp();for(var f=this._oKey=b.clone(),g=this._iKey=b.clone(),h=f.words,j=g.words,d=0;db;){var d;a:{d=l;for(var w=k.sqrt(d),r=2;r<=w;r++)if(!(d%r)){d=!1;break a}d=!0}d&&(8>b&&(s[b]=u(k.pow(l,0.5))),t[b]=u(k.pow(l,1/3)),b++);l++}var n=[],h=h.SHA256=j.extend({_doReset:function(){this._hash=new v.init(s.slice(0))},_doProcessBlock:function(q,h){for(var a=this._hash.words,c=a[0],d=a[1],b=a[2],k=a[3],f=a[4],g=a[5],j=a[6],l=a[7],e=0;64>e;e++){if(16>e)n[e]= +q[h+e]|0;else{var m=n[e-15],p=n[e-2];n[e]=((m<<25|m>>>7)^(m<<14|m>>>18)^m>>>3)+n[e-7]+((p<<15|p>>>17)^(p<<13|p>>>19)^p>>>10)+n[e-16]}m=l+((f<<26|f>>>6)^(f<<21|f>>>11)^(f<<7|f>>>25))+(f&g^~f&j)+t[e]+n[e];p=((c<<30|c>>>2)^(c<<19|c>>>13)^(c<<10|c>>>22))+(c&d^c&b^d&b);l=j;j=g;g=f;f=k+m|0;k=b;b=d;d=c;c=m+p|0}a[0]=a[0]+c|0;a[1]=a[1]+d|0;a[2]=a[2]+b|0;a[3]=a[3]+k|0;a[4]=a[4]+f|0;a[5]=a[5]+g|0;a[6]=a[6]+j|0;a[7]=a[7]+l|0},_doFinalize:function(){var d=this._data,b=d.words,a=8*this._nDataBytes,c=8*d.sigBytes; +b[c>>>5]|=128<<24-c%32;b[(c+64>>>9<<4)+14]=k.floor(a/4294967296);b[(c+64>>>9<<4)+15]=a;d.sigBytes=4*b.length;this._process();return this._hash},clone:function(){var b=j.clone.call(this);b._hash=this._hash.clone();return b}});g.SHA256=j._createHelper(h);g.HmacSHA256=j._createHmacHelper(h)})(Math); + +/* +CryptoJS v3.1.2 sha224-min.js +code.google.com/p/crypto-js +(c) 2009-2013 by Jeff Mott. All rights reserved. +code.google.com/p/crypto-js/wiki/License +*/ +(function(){var b=CryptoJS,d=b.lib.WordArray,a=b.algo,c=a.SHA256,a=a.SHA224=c.extend({_doReset:function(){this._hash=new d.init([3238371032,914150663,812702999,4144912697,4290775857,1750603025,1694076839,3204075428])},_doFinalize:function(){var a=c._doFinalize.call(this);a.sigBytes-=4;return a}});b.SHA224=c._createHelper(a);b.HmacSHA224=c._createHmacHelper(a)})(); + +/* +CryptoJS v3.1.2 sha512-min.js +code.google.com/p/crypto-js +(c) 2009-2013 by Jeff Mott. All rights reserved. +code.google.com/p/crypto-js/wiki/License +*/ +(function(){function a(){return d.create.apply(d,arguments)}for(var n=CryptoJS,r=n.lib.Hasher,e=n.x64,d=e.Word,T=e.WordArray,e=n.algo,ea=[a(1116352408,3609767458),a(1899447441,602891725),a(3049323471,3964484399),a(3921009573,2173295548),a(961987163,4081628472),a(1508970993,3053834265),a(2453635748,2937671579),a(2870763221,3664609560),a(3624381080,2734883394),a(310598401,1164996542),a(607225278,1323610764),a(1426881987,3590304994),a(1925078388,4068182383),a(2162078206,991336113),a(2614888103,633803317), +a(3248222580,3479774868),a(3835390401,2666613458),a(4022224774,944711139),a(264347078,2341262773),a(604807628,2007800933),a(770255983,1495990901),a(1249150122,1856431235),a(1555081692,3175218132),a(1996064986,2198950837),a(2554220882,3999719339),a(2821834349,766784016),a(2952996808,2566594879),a(3210313671,3203337956),a(3336571891,1034457026),a(3584528711,2466948901),a(113926993,3758326383),a(338241895,168717936),a(666307205,1188179964),a(773529912,1546045734),a(1294757372,1522805485),a(1396182291, +2643833823),a(1695183700,2343527390),a(1986661051,1014477480),a(2177026350,1206759142),a(2456956037,344077627),a(2730485921,1290863460),a(2820302411,3158454273),a(3259730800,3505952657),a(3345764771,106217008),a(3516065817,3606008344),a(3600352804,1432725776),a(4094571909,1467031594),a(275423344,851169720),a(430227734,3100823752),a(506948616,1363258195),a(659060556,3750685593),a(883997877,3785050280),a(958139571,3318307427),a(1322822218,3812723403),a(1537002063,2003034995),a(1747873779,3602036899), +a(1955562222,1575990012),a(2024104815,1125592928),a(2227730452,2716904306),a(2361852424,442776044),a(2428436474,593698344),a(2756734187,3733110249),a(3204031479,2999351573),a(3329325298,3815920427),a(3391569614,3928383900),a(3515267271,566280711),a(3940187606,3454069534),a(4118630271,4000239992),a(116418474,1914138554),a(174292421,2731055270),a(289380356,3203993006),a(460393269,320620315),a(685471733,587496836),a(852142971,1086792851),a(1017036298,365543100),a(1126000580,2618297676),a(1288033470, +3409855158),a(1501505948,4234509866),a(1607167915,987167468),a(1816402316,1246189591)],v=[],w=0;80>w;w++)v[w]=a();e=e.SHA512=r.extend({_doReset:function(){this._hash=new T.init([new d.init(1779033703,4089235720),new d.init(3144134277,2227873595),new d.init(1013904242,4271175723),new d.init(2773480762,1595750129),new d.init(1359893119,2917565137),new d.init(2600822924,725511199),new d.init(528734635,4215389547),new d.init(1541459225,327033209)])},_doProcessBlock:function(a,d){for(var f=this._hash.words, +F=f[0],e=f[1],n=f[2],r=f[3],G=f[4],H=f[5],I=f[6],f=f[7],w=F.high,J=F.low,X=e.high,K=e.low,Y=n.high,L=n.low,Z=r.high,M=r.low,$=G.high,N=G.low,aa=H.high,O=H.low,ba=I.high,P=I.low,ca=f.high,Q=f.low,k=w,g=J,z=X,x=K,A=Y,y=L,U=Z,B=M,l=$,h=N,R=aa,C=O,S=ba,D=P,V=ca,E=Q,m=0;80>m;m++){var s=v[m];if(16>m)var j=s.high=a[d+2*m]|0,b=s.low=a[d+2*m+1]|0;else{var j=v[m-15],b=j.high,p=j.low,j=(b>>>1|p<<31)^(b>>>8|p<<24)^b>>>7,p=(p>>>1|b<<31)^(p>>>8|b<<24)^(p>>>7|b<<25),u=v[m-2],b=u.high,c=u.low,u=(b>>>19|c<<13)^(b<< +3|c>>>29)^b>>>6,c=(c>>>19|b<<13)^(c<<3|b>>>29)^(c>>>6|b<<26),b=v[m-7],W=b.high,t=v[m-16],q=t.high,t=t.low,b=p+b.low,j=j+W+(b>>>0

>>0?1:0),b=b+c,j=j+u+(b>>>0>>0?1:0),b=b+t,j=j+q+(b>>>0>>0?1:0);s.high=j;s.low=b}var W=l&R^~l&S,t=h&C^~h&D,s=k&z^k&A^z&A,T=g&x^g&y^x&y,p=(k>>>28|g<<4)^(k<<30|g>>>2)^(k<<25|g>>>7),u=(g>>>28|k<<4)^(g<<30|k>>>2)^(g<<25|k>>>7),c=ea[m],fa=c.high,da=c.low,c=E+((h>>>14|l<<18)^(h>>>18|l<<14)^(h<<23|l>>>9)),q=V+((l>>>14|h<<18)^(l>>>18|h<<14)^(l<<23|h>>>9))+(c>>>0>>0?1: +0),c=c+t,q=q+W+(c>>>0>>0?1:0),c=c+da,q=q+fa+(c>>>0>>0?1:0),c=c+b,q=q+j+(c>>>0>>0?1:0),b=u+T,s=p+s+(b>>>0>>0?1:0),V=S,E=D,S=R,D=C,R=l,C=h,h=B+c|0,l=U+q+(h>>>0>>0?1:0)|0,U=A,B=y,A=z,y=x,z=k,x=g,g=c+b|0,k=q+s+(g>>>0>>0?1:0)|0}J=F.low=J+g;F.high=w+k+(J>>>0>>0?1:0);K=e.low=K+x;e.high=X+z+(K>>>0>>0?1:0);L=n.low=L+y;n.high=Y+A+(L>>>0>>0?1:0);M=r.low=M+B;r.high=Z+U+(M>>>0>>0?1:0);N=G.low=N+h;G.high=$+l+(N>>>0>>0?1:0);O=H.low=O+C;H.high=aa+R+(O>>>0>>0?1:0);P=I.low=P+D; +I.high=ba+S+(P>>>0>>0?1:0);Q=f.low=Q+E;f.high=ca+V+(Q>>>0>>0?1:0)},_doFinalize:function(){var a=this._data,d=a.words,f=8*this._nDataBytes,e=8*a.sigBytes;d[e>>>5]|=128<<24-e%32;d[(e+128>>>10<<5)+30]=Math.floor(f/4294967296);d[(e+128>>>10<<5)+31]=f;a.sigBytes=4*d.length;this._process();return this._hash.toX32()},clone:function(){var a=r.clone.call(this);a._hash=this._hash.clone();return a},blockSize:32});n.SHA512=r._createHelper(e);n.HmacSHA512=r._createHmacHelper(e)})(); + +/* +CryptoJS v3.1.2 sha384-min.js +code.google.com/p/crypto-js +(c) 2009-2013 by Jeff Mott. All rights reserved. +code.google.com/p/crypto-js/wiki/License +*/ +(function(){var c=CryptoJS,a=c.x64,b=a.Word,e=a.WordArray,a=c.algo,d=a.SHA512,a=a.SHA384=d.extend({_doReset:function(){this._hash=new e.init([new b.init(3418070365,3238371032),new b.init(1654270250,914150663),new b.init(2438529370,812702999),new b.init(355462360,4144912697),new b.init(1731405415,4290775857),new b.init(2394180231,1750603025),new b.init(3675008525,1694076839),new b.init(1203062813,3204075428)])},_doFinalize:function(){var a=d._doFinalize.call(this);a.sigBytes-=16;return a}});c.SHA384= +d._createHelper(a);c.HmacSHA384=d._createHmacHelper(a)})(); + +/* +CryptoJS v3.1.2 md5-min.js +code.google.com/p/crypto-js +(c) 2009-2013 by Jeff Mott. All rights reserved. +code.google.com/p/crypto-js/wiki/License +*/ +(function(E){function h(a,f,g,j,p,h,k){a=a+(f&g|~f&j)+p+k;return(a<>>32-h)+f}function k(a,f,g,j,p,h,k){a=a+(f&j|g&~j)+p+k;return(a<>>32-h)+f}function l(a,f,g,j,h,k,l){a=a+(f^g^j)+h+l;return(a<>>32-k)+f}function n(a,f,g,j,h,k,l){a=a+(g^(f|~j))+h+l;return(a<>>32-k)+f}for(var r=CryptoJS,q=r.lib,F=q.WordArray,s=q.Hasher,q=r.algo,a=[],t=0;64>t;t++)a[t]=4294967296*E.abs(E.sin(t+1))|0;q=q.MD5=s.extend({_doReset:function(){this._hash=new F.init([1732584193,4023233417,2562383102,271733878])}, +_doProcessBlock:function(m,f){for(var g=0;16>g;g++){var j=f+g,p=m[j];m[j]=(p<<8|p>>>24)&16711935|(p<<24|p>>>8)&4278255360}var g=this._hash.words,j=m[f+0],p=m[f+1],q=m[f+2],r=m[f+3],s=m[f+4],t=m[f+5],u=m[f+6],v=m[f+7],w=m[f+8],x=m[f+9],y=m[f+10],z=m[f+11],A=m[f+12],B=m[f+13],C=m[f+14],D=m[f+15],b=g[0],c=g[1],d=g[2],e=g[3],b=h(b,c,d,e,j,7,a[0]),e=h(e,b,c,d,p,12,a[1]),d=h(d,e,b,c,q,17,a[2]),c=h(c,d,e,b,r,22,a[3]),b=h(b,c,d,e,s,7,a[4]),e=h(e,b,c,d,t,12,a[5]),d=h(d,e,b,c,u,17,a[6]),c=h(c,d,e,b,v,22,a[7]), +b=h(b,c,d,e,w,7,a[8]),e=h(e,b,c,d,x,12,a[9]),d=h(d,e,b,c,y,17,a[10]),c=h(c,d,e,b,z,22,a[11]),b=h(b,c,d,e,A,7,a[12]),e=h(e,b,c,d,B,12,a[13]),d=h(d,e,b,c,C,17,a[14]),c=h(c,d,e,b,D,22,a[15]),b=k(b,c,d,e,p,5,a[16]),e=k(e,b,c,d,u,9,a[17]),d=k(d,e,b,c,z,14,a[18]),c=k(c,d,e,b,j,20,a[19]),b=k(b,c,d,e,t,5,a[20]),e=k(e,b,c,d,y,9,a[21]),d=k(d,e,b,c,D,14,a[22]),c=k(c,d,e,b,s,20,a[23]),b=k(b,c,d,e,x,5,a[24]),e=k(e,b,c,d,C,9,a[25]),d=k(d,e,b,c,r,14,a[26]),c=k(c,d,e,b,w,20,a[27]),b=k(b,c,d,e,B,5,a[28]),e=k(e,b, +c,d,q,9,a[29]),d=k(d,e,b,c,v,14,a[30]),c=k(c,d,e,b,A,20,a[31]),b=l(b,c,d,e,t,4,a[32]),e=l(e,b,c,d,w,11,a[33]),d=l(d,e,b,c,z,16,a[34]),c=l(c,d,e,b,C,23,a[35]),b=l(b,c,d,e,p,4,a[36]),e=l(e,b,c,d,s,11,a[37]),d=l(d,e,b,c,v,16,a[38]),c=l(c,d,e,b,y,23,a[39]),b=l(b,c,d,e,B,4,a[40]),e=l(e,b,c,d,j,11,a[41]),d=l(d,e,b,c,r,16,a[42]),c=l(c,d,e,b,u,23,a[43]),b=l(b,c,d,e,x,4,a[44]),e=l(e,b,c,d,A,11,a[45]),d=l(d,e,b,c,D,16,a[46]),c=l(c,d,e,b,q,23,a[47]),b=n(b,c,d,e,j,6,a[48]),e=n(e,b,c,d,v,10,a[49]),d=n(d,e,b,c, +C,15,a[50]),c=n(c,d,e,b,t,21,a[51]),b=n(b,c,d,e,A,6,a[52]),e=n(e,b,c,d,r,10,a[53]),d=n(d,e,b,c,y,15,a[54]),c=n(c,d,e,b,p,21,a[55]),b=n(b,c,d,e,w,6,a[56]),e=n(e,b,c,d,D,10,a[57]),d=n(d,e,b,c,u,15,a[58]),c=n(c,d,e,b,B,21,a[59]),b=n(b,c,d,e,s,6,a[60]),e=n(e,b,c,d,z,10,a[61]),d=n(d,e,b,c,q,15,a[62]),c=n(c,d,e,b,x,21,a[63]);g[0]=g[0]+b|0;g[1]=g[1]+c|0;g[2]=g[2]+d|0;g[3]=g[3]+e|0},_doFinalize:function(){var a=this._data,f=a.words,g=8*this._nDataBytes,j=8*a.sigBytes;f[j>>>5]|=128<<24-j%32;var h=E.floor(g/ +4294967296);f[(j+64>>>9<<4)+15]=(h<<8|h>>>24)&16711935|(h<<24|h>>>8)&4278255360;f[(j+64>>>9<<4)+14]=(g<<8|g>>>24)&16711935|(g<<24|g>>>8)&4278255360;a.sigBytes=4*(f.length+1);this._process();a=this._hash;f=a.words;for(g=0;4>g;g++)j=f[g],f[g]=(j<<8|j>>>24)&16711935|(j<<24|j>>>8)&4278255360;return a},clone:function(){var a=s.clone.call(this);a._hash=this._hash.clone();return a}});r.MD5=s._createHelper(q);r.HmacMD5=s._createHmacHelper(q)})(Math); + +/* +CryptoJS v3.1.2 enc-base64-min.js +code.google.com/p/crypto-js +(c) 2009-2013 by Jeff Mott. All rights reserved. +code.google.com/p/crypto-js/wiki/License +*/ +(function(){var h=CryptoJS,j=h.lib.WordArray;h.enc.Base64={stringify:function(b){var e=b.words,f=b.sigBytes,c=this._map;b.clamp();b=[];for(var a=0;a>>2]>>>24-8*(a%4)&255)<<16|(e[a+1>>>2]>>>24-8*((a+1)%4)&255)<<8|e[a+2>>>2]>>>24-8*((a+2)%4)&255,g=0;4>g&&a+0.75*g>>6*(3-g)&63));if(e=c.charAt(64))for(;b.length%4;)b.push(e);return b.join("")},parse:function(b){var e=b.length,f=this._map,c=f.charAt(64);c&&(c=b.indexOf(c),-1!=c&&(e=c));for(var c=[],a=0,d=0;d< +e;d++)if(d%4){var g=f.indexOf(b.charAt(d-1))<<2*(d%4),h=f.indexOf(b.charAt(d))>>>6-2*(d%4);c[a>>>2]|=(g|h)<<24-8*(a%4);a++}return j.create(c,a)},_map:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="}})(); + +/* +CryptoJS v3.1.2 cipher-core-min.js +code.google.com/p/crypto-js +(c) 2009-2013 by Jeff Mott. All rights reserved. +code.google.com/p/crypto-js/wiki/License +*/ +CryptoJS.lib.Cipher||function(u){var g=CryptoJS,f=g.lib,k=f.Base,l=f.WordArray,q=f.BufferedBlockAlgorithm,r=g.enc.Base64,v=g.algo.EvpKDF,n=f.Cipher=q.extend({cfg:k.extend(),createEncryptor:function(a,b){return this.create(this._ENC_XFORM_MODE,a,b)},createDecryptor:function(a,b){return this.create(this._DEC_XFORM_MODE,a,b)},init:function(a,b,c){this.cfg=this.cfg.extend(c);this._xformMode=a;this._key=b;this.reset()},reset:function(){q.reset.call(this);this._doReset()},process:function(a){this._append(a); +return this._process()},finalize:function(a){a&&this._append(a);return this._doFinalize()},keySize:4,ivSize:4,_ENC_XFORM_MODE:1,_DEC_XFORM_MODE:2,_createHelper:function(a){return{encrypt:function(b,c,d){return("string"==typeof c?s:j).encrypt(a,b,c,d)},decrypt:function(b,c,d){return("string"==typeof c?s:j).decrypt(a,b,c,d)}}}});f.StreamCipher=n.extend({_doFinalize:function(){return this._process(!0)},blockSize:1});var m=g.mode={},t=function(a,b,c){var d=this._iv;d?this._iv=u:d=this._prevBlock;for(var e= +0;e>>2]&255}};f.BlockCipher=n.extend({cfg:n.cfg.extend({mode:m,padding:h}),reset:function(){n.reset.call(this);var a=this.cfg,b=a.iv,a=a.mode;if(this._xformMode==this._ENC_XFORM_MODE)var c=a.createEncryptor;else c=a.createDecryptor,this._minBufferSize=1; +this._mode=c.call(a,this,b&&b.words)},_doProcessBlock:function(a,b){this._mode.processBlock(a,b)},_doFinalize:function(){var a=this.cfg.padding;if(this._xformMode==this._ENC_XFORM_MODE){a.pad(this._data,this.blockSize);var b=this._process(!0)}else b=this._process(!0),a.unpad(b);return b},blockSize:4});var p=f.CipherParams=k.extend({init:function(a){this.mixIn(a)},toString:function(a){return(a||this.formatter).stringify(this)}}),m=(g.format={}).OpenSSL={stringify:function(a){var b=a.ciphertext;a=a.salt; +return(a?l.create([1398893684,1701076831]).concat(a).concat(b):b).toString(r)},parse:function(a){a=r.parse(a);var b=a.words;if(1398893684==b[0]&&1701076831==b[1]){var c=l.create(b.slice(2,4));b.splice(0,4);a.sigBytes-=16}return p.create({ciphertext:a,salt:c})}},j=f.SerializableCipher=k.extend({cfg:k.extend({format:m}),encrypt:function(a,b,c,d){d=this.cfg.extend(d);var e=a.createEncryptor(c,d);b=e.finalize(b);e=e.cfg;return p.create({ciphertext:b,key:c,iv:e.iv,algorithm:a,mode:e.mode,padding:e.padding, +blockSize:a.blockSize,formatter:d.format})},decrypt:function(a,b,c,d){d=this.cfg.extend(d);b=this._parse(b,d.format);return a.createDecryptor(c,d).finalize(b.ciphertext)},_parse:function(a,b){return"string"==typeof a?b.parse(a,this):a}}),g=(g.kdf={}).OpenSSL={execute:function(a,b,c,d){d||(d=l.random(8));a=v.create({keySize:b+c}).compute(a,d);c=l.create(a.words.slice(b),4*c);a.sigBytes=4*b;return p.create({key:a,iv:c,salt:d})}},s=f.PasswordBasedCipher=j.extend({cfg:j.cfg.extend({kdf:g}),encrypt:function(a, +b,c,d){d=this.cfg.extend(d);c=d.kdf.execute(c,a.keySize,a.ivSize);d.iv=c.iv;a=j.encrypt.call(this,a,b,c.key,d);a.mixIn(c);return a},decrypt:function(a,b,c,d){d=this.cfg.extend(d);b=this._parse(b,d.format);c=d.kdf.execute(c,a.keySize,a.ivSize,b.salt);d.iv=c.iv;return j.decrypt.call(this,a,b,c.key,d)}})}(); + +/* +CryptoJS v3.1.2 aes-min.js +code.google.com/p/crypto-js +(c) 2009-2013 by Jeff Mott. All rights reserved. +code.google.com/p/crypto-js/wiki/License +*/ +(function(){for(var q=CryptoJS,x=q.lib.BlockCipher,r=q.algo,j=[],y=[],z=[],A=[],B=[],C=[],s=[],u=[],v=[],w=[],g=[],k=0;256>k;k++)g[k]=128>k?k<<1:k<<1^283;for(var n=0,l=0,k=0;256>k;k++){var f=l^l<<1^l<<2^l<<3^l<<4,f=f>>>8^f&255^99;j[n]=f;y[f]=n;var t=g[n],D=g[t],E=g[D],b=257*g[f]^16843008*f;z[n]=b<<24|b>>>8;A[n]=b<<16|b>>>16;B[n]=b<<8|b>>>24;C[n]=b;b=16843009*E^65537*D^257*t^16843008*n;s[f]=b<<24|b>>>8;u[f]=b<<16|b>>>16;v[f]=b<<8|b>>>24;w[f]=b;n?(n=t^g[g[g[E^t]]],l^=g[g[l]]):n=l=1}var F=[0,1,2,4,8, +16,32,64,128,27,54],r=r.AES=x.extend({_doReset:function(){for(var c=this._key,e=c.words,a=c.sigBytes/4,c=4*((this._nRounds=a+6)+1),b=this._keySchedule=[],h=0;h>>24]<<24|j[d>>>16&255]<<16|j[d>>>8&255]<<8|j[d&255]):(d=d<<8|d>>>24,d=j[d>>>24]<<24|j[d>>>16&255]<<16|j[d>>>8&255]<<8|j[d&255],d^=F[h/a|0]<<24);b[h]=b[h-a]^d}e=this._invKeySchedule=[];for(a=0;aa||4>=h?d:s[j[d>>>24]]^u[j[d>>>16&255]]^v[j[d>>> +8&255]]^w[j[d&255]]},encryptBlock:function(c,e){this._doCryptBlock(c,e,this._keySchedule,z,A,B,C,j)},decryptBlock:function(c,e){var a=c[e+1];c[e+1]=c[e+3];c[e+3]=a;this._doCryptBlock(c,e,this._invKeySchedule,s,u,v,w,y);a=c[e+1];c[e+1]=c[e+3];c[e+3]=a},_doCryptBlock:function(c,e,a,b,h,d,j,m){for(var n=this._nRounds,f=c[e]^a[0],g=c[e+1]^a[1],k=c[e+2]^a[2],p=c[e+3]^a[3],l=4,t=1;t>>24]^h[g>>>16&255]^d[k>>>8&255]^j[p&255]^a[l++],r=b[g>>>24]^h[k>>>16&255]^d[p>>>8&255]^j[f&255]^a[l++],s= +b[k>>>24]^h[p>>>16&255]^d[f>>>8&255]^j[g&255]^a[l++],p=b[p>>>24]^h[f>>>16&255]^d[g>>>8&255]^j[k&255]^a[l++],f=q,g=r,k=s;q=(m[f>>>24]<<24|m[g>>>16&255]<<16|m[k>>>8&255]<<8|m[p&255])^a[l++];r=(m[g>>>24]<<24|m[k>>>16&255]<<16|m[p>>>8&255]<<8|m[f&255])^a[l++];s=(m[k>>>24]<<24|m[p>>>16&255]<<16|m[f>>>8&255]<<8|m[g&255])^a[l++];p=(m[p>>>24]<<24|m[f>>>16&255]<<16|m[g>>>8&255]<<8|m[k&255])^a[l++];c[e]=q;c[e+1]=r;c[e+2]=s;c[e+3]=p},keySize:8});q.AES=x._createHelper(r)})(); + +/* +CryptoJS v3.1.2 tripledes-min.js +code.google.com/p/crypto-js +(c) 2009-2013 by Jeff Mott. All rights reserved. +code.google.com/p/crypto-js/wiki/License +*/ +(function(){function j(b,c){var a=(this._lBlock>>>b^this._rBlock)&c;this._rBlock^=a;this._lBlock^=a<>>b^this._lBlock)&c;this._lBlock^=a;this._rBlock^=a<a;a++){var f=q[a]-1;c[a]=b[f>>>5]>>>31-f%32&1}b=this._subKeys=[];for(f=0;16>f;f++){for(var d=b[f]=[],e=r[f],a=0;24>a;a++)d[a/6|0]|=c[(p[a]-1+e)%28]<<31-a%6,d[4+(a/6|0)]|=c[28+(p[a+24]-1+e)%28]<<31-a%6;d[0]=d[0]<<1|d[0]>>>31;for(a=1;7>a;a++)d[a]>>>= +4*(a-1)+3;d[7]=d[7]<<5|d[7]>>>27}c=this._invSubKeys=[];for(a=0;16>a;a++)c[a]=b[15-a]},encryptBlock:function(b,c){this._doCryptBlock(b,c,this._subKeys)},decryptBlock:function(b,c){this._doCryptBlock(b,c,this._invSubKeys)},_doCryptBlock:function(b,c,a){this._lBlock=b[c];this._rBlock=b[c+1];j.call(this,4,252645135);j.call(this,16,65535);l.call(this,2,858993459);l.call(this,8,16711935);j.call(this,1,1431655765);for(var f=0;16>f;f++){for(var d=a[f],e=this._lBlock,h=this._rBlock,g=0,k=0;8>k;k++)g|=s[k][((h^ +d[k])&t[k])>>>0];this._lBlock=h;this._rBlock=e^g}a=this._lBlock;this._lBlock=this._rBlock;this._rBlock=a;j.call(this,1,1431655765);l.call(this,8,16711935);l.call(this,2,858993459);j.call(this,16,65535);j.call(this,4,252645135);b[c]=this._lBlock;b[c+1]=this._rBlock},keySize:2,ivSize:2,blockSize:2});h.DES=e._createHelper(m);g=g.TripleDES=e.extend({_doReset:function(){var b=this._key.words;this._des1=m.createEncryptor(n.create(b.slice(0,2)));this._des2=m.createEncryptor(n.create(b.slice(2,4)));this._des3= +m.createEncryptor(n.create(b.slice(4,6)))},encryptBlock:function(b,c){this._des1.encryptBlock(b,c);this._des2.decryptBlock(b,c);this._des3.encryptBlock(b,c)},decryptBlock:function(b,c){this._des3.decryptBlock(b,c);this._des2.encryptBlock(b,c);this._des1.decryptBlock(b,c)},keySize:6,ivSize:2,blockSize:2});h.TripleDES=e._createHelper(g)})(); + +/* +CryptoJS v3.1.2 sha1-min.js +code.google.com/p/crypto-js +(c) 2009-2013 by Jeff Mott. All rights reserved. +code.google.com/p/crypto-js/wiki/License +*/ +(function(){var k=CryptoJS,b=k.lib,m=b.WordArray,l=b.Hasher,d=[],b=k.algo.SHA1=l.extend({_doReset:function(){this._hash=new m.init([1732584193,4023233417,2562383102,271733878,3285377520])},_doProcessBlock:function(n,p){for(var a=this._hash.words,e=a[0],f=a[1],h=a[2],j=a[3],b=a[4],c=0;80>c;c++){if(16>c)d[c]=n[p+c]|0;else{var g=d[c-3]^d[c-8]^d[c-14]^d[c-16];d[c]=g<<1|g>>>31}g=(e<<5|e>>>27)+b+d[c];g=20>c?g+((f&h|~f&j)+1518500249):40>c?g+((f^h^j)+1859775393):60>c?g+((f&h|f&j|h&j)-1894007588):g+((f^h^ +j)-899497514);b=j;j=h;h=f<<30|f>>>2;f=e;e=g}a[0]=a[0]+e|0;a[1]=a[1]+f|0;a[2]=a[2]+h|0;a[3]=a[3]+j|0;a[4]=a[4]+b|0},_doFinalize:function(){var b=this._data,d=b.words,a=8*this._nDataBytes,e=8*b.sigBytes;d[e>>>5]|=128<<24-e%32;d[(e+64>>>9<<4)+14]=Math.floor(a/4294967296);d[(e+64>>>9<<4)+15]=a;b.sigBytes=4*d.length;this._process();return this._hash},clone:function(){var b=l.clone.call(this);b._hash=this._hash.clone();return b}});k.SHA1=l._createHelper(b);k.HmacSHA1=l._createHmacHelper(b)})(); + +/* +CryptoJS v3.1.2 ripemd160-min.js +code.google.com/p/crypto-js +(c) 2009-2013 by Jeff Mott. All rights reserved. +code.google.com/p/crypto-js/wiki/License +*/ +/* + +(c) 2012 by Cedric Mesnil. All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + + - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +(function(){var q=CryptoJS,d=q.lib,n=d.WordArray,p=d.Hasher,d=q.algo,x=n.create([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,7,4,13,1,10,6,15,3,12,0,9,5,2,14,11,8,3,10,14,4,9,15,8,1,2,7,0,6,13,11,5,12,1,9,11,10,0,8,12,4,13,3,7,15,14,5,6,2,4,0,5,9,7,12,2,10,14,1,3,8,11,6,15,13]),y=n.create([5,14,7,0,9,2,11,4,13,6,15,8,1,10,3,12,6,11,3,7,0,13,5,10,14,15,8,12,4,9,1,2,15,5,1,3,7,14,6,9,11,8,12,2,10,0,4,13,8,6,4,1,3,11,15,0,5,12,2,13,9,7,10,14,12,15,10,4,1,5,8,7,6,2,13,14,0,3,9,11]),z=n.create([11,14,15,12, +5,8,7,9,11,13,14,15,6,7,9,8,7,6,8,13,11,9,7,15,7,12,15,9,11,7,13,12,11,13,6,7,14,9,13,15,14,8,13,6,5,12,7,5,11,12,14,15,14,15,9,8,9,14,5,6,8,6,5,12,9,15,5,11,6,8,13,12,5,12,13,14,11,8,5,6]),A=n.create([8,9,9,11,13,15,15,5,7,7,8,11,14,14,12,6,9,13,15,7,12,8,9,11,7,7,12,7,6,15,13,11,9,7,15,11,8,6,6,14,12,13,5,14,13,13,7,5,15,5,8,11,14,14,6,14,6,9,12,9,12,5,15,8,8,5,12,9,12,5,14,6,8,13,6,5,15,13,11,11]),B=n.create([0,1518500249,1859775393,2400959708,2840853838]),C=n.create([1352829926,1548603684,1836072691, +2053994217,0]),d=d.RIPEMD160=p.extend({_doReset:function(){this._hash=n.create([1732584193,4023233417,2562383102,271733878,3285377520])},_doProcessBlock:function(e,v){for(var b=0;16>b;b++){var c=v+b,f=e[c];e[c]=(f<<8|f>>>24)&16711935|(f<<24|f>>>8)&4278255360}var c=this._hash.words,f=B.words,d=C.words,n=x.words,q=y.words,p=z.words,w=A.words,t,g,h,j,r,u,k,l,m,s;u=t=c[0];k=g=c[1];l=h=c[2];m=j=c[3];s=r=c[4];for(var a,b=0;80>b;b+=1)a=t+e[v+n[b]]|0,a=16>b?a+((g^h^j)+f[0]):32>b?a+((g&h|~g&j)+f[1]):48>b? +a+(((g|~h)^j)+f[2]):64>b?a+((g&j|h&~j)+f[3]):a+((g^(h|~j))+f[4]),a|=0,a=a<>>32-p[b],a=a+r|0,t=r,r=j,j=h<<10|h>>>22,h=g,g=a,a=u+e[v+q[b]]|0,a=16>b?a+((k^(l|~m))+d[0]):32>b?a+((k&m|l&~m)+d[1]):48>b?a+(((k|~l)^m)+d[2]):64>b?a+((k&l|~k&m)+d[3]):a+((k^l^m)+d[4]),a|=0,a=a<>>32-w[b],a=a+s|0,u=s,s=m,m=l<<10|l>>>22,l=k,k=a;a=c[1]+h+m|0;c[1]=c[2]+j+s|0;c[2]=c[3]+r+u|0;c[3]=c[4]+t+k|0;c[4]=c[0]+g+l|0;c[0]=a},_doFinalize:function(){var e=this._data,d=e.words,b=8*this._nDataBytes,c=8*e.sigBytes; +d[c>>>5]|=128<<24-c%32;d[(c+64>>>9<<4)+14]=(b<<8|b>>>24)&16711935|(b<<24|b>>>8)&4278255360;e.sigBytes=4*(d.length+1);this._process();e=this._hash;d=e.words;for(b=0;5>b;b++)c=d[b],d[b]=(c<<8|c>>>24)&16711935|(c<<24|c>>>8)&4278255360;return e},clone:function(){var d=p.clone.call(this);d._hash=this._hash.clone();return d}});q.RIPEMD160=p._createHelper(d);q.HmacRIPEMD160=p._createHmacHelper(d)})(Math); + +/* +CryptoJS v3.1.2 pbkdf2-min.js +code.google.com/p/crypto-js +(c) 2009-2013 by Jeff Mott. All rights reserved. +code.google.com/p/crypto-js/wiki/License +*/ +(function(){var b=CryptoJS,a=b.lib,d=a.Base,m=a.WordArray,a=b.algo,q=a.HMAC,l=a.PBKDF2=d.extend({cfg:d.extend({keySize:4,hasher:a.SHA1,iterations:1}),init:function(a){this.cfg=this.cfg.extend(a)},compute:function(a,b){for(var c=this.cfg,f=q.create(c.hasher,a),g=m.create(),d=m.create([1]),l=g.words,r=d.words,n=c.keySize,c=c.iterations;l.length>6)+b64map.charAt(e&63)}if(b+1==d.length){e=parseInt(d.substring(b,b+1),16);a+=b64map.charAt(e<<2)}else{if(b+2==d.length){e=parseInt(d.substring(b,b+2),16);a+=b64map.charAt(e>>2)+b64map.charAt((e&3)<<4)}}if(b64pad){while((a.length&3)>0){a+=b64pad}}return a}function b64tohex(f){var d="";var e;var b=0;var c;var a;for(e=0;e>2);c=a&3;b=1}else{if(b==1){d+=int2char((c<<2)|(a>>4));c=a&15;b=2}else{if(b==2){d+=int2char(c);d+=int2char(a>>2);c=a&3;b=3}else{d+=int2char((c<<2)|(a>>4));d+=int2char(a&15);b=0}}}}if(b==1){d+=int2char(c<<2)}return d}function b64toBA(e){var d=b64tohex(e);var c;var b=new Array();for(c=0;2*c=0){var d=a*this[f++]+b[e]+h;h=Math.floor(d/67108864);b[e++]=d&67108863}return h}function am2(f,q,r,e,o,a){var k=q&32767,p=q>>15;while(--a>=0){var d=this[f]&32767;var g=this[f++]>>15;var b=p*d+g*k;d=k*d+((b&32767)<<15)+r[e]+(o&1073741823);o=(d>>>30)+(b>>>15)+p*g+(o>>>30);r[e++]=d&1073741823}return o}function am3(f,q,r,e,o,a){var k=q&16383,p=q>>14;while(--a>=0){var d=this[f]&16383;var g=this[f++]>>14;var b=p*d+g*k;d=k*d+((b&16383)<<14)+r[e]+o;o=(d>>28)+(b>>14)+p*g;r[e++]=d&268435455}return o}if(j_lm&&(navigator.appName=="Microsoft Internet Explorer")){BigInteger.prototype.am=am2;dbits=30}else{if(j_lm&&(navigator.appName!="Netscape")){BigInteger.prototype.am=am1;dbits=26}else{BigInteger.prototype.am=am3;dbits=28}}BigInteger.prototype.DB=dbits;BigInteger.prototype.DM=((1<=0;--a){b[a]=this[a]}b.t=this.t;b.s=this.s}function bnpFromInt(a){this.t=1;this.s=(a<0)?-1:0;if(a>0){this[0]=a}else{if(a<-1){this[0]=a+this.DV}else{this.t=0}}}function nbv(a){var b=nbi();b.fromInt(a);return b}function bnpFromString(h,c){var e;if(c==16){e=4}else{if(c==8){e=3}else{if(c==256){e=8}else{if(c==2){e=1}else{if(c==32){e=5}else{if(c==4){e=2}else{this.fromRadix(h,c);return}}}}}}this.t=0;this.s=0;var g=h.length,d=false,f=0;while(--g>=0){var a=(e==8)?h[g]&255:intAt(h,g);if(a<0){if(h.charAt(g)=="-"){d=true}continue}d=false;if(f==0){this[this.t++]=a}else{if(f+e>this.DB){this[this.t-1]|=(a&((1<<(this.DB-f))-1))<>(this.DB-f))}else{this[this.t-1]|=a<=this.DB){f-=this.DB}}if(e==8&&(h[0]&128)!=0){this.s=-1;if(f>0){this[this.t-1]|=((1<<(this.DB-f))-1)<0&&this[this.t-1]==a){--this.t}}function bnToString(c){if(this.s<0){return"-"+this.negate().toString(c)}var e;if(c==16){e=4}else{if(c==8){e=3}else{if(c==2){e=1}else{if(c==32){e=5}else{if(c==4){e=2}else{return this.toRadix(c)}}}}}var g=(1<0){if(j>j)>0){a=true;h=int2char(l)}while(f>=0){if(j>(j+=this.DB-e)}else{l=(this[f]>>(j-=e))&g;if(j<=0){j+=this.DB;--f}}if(l>0){a=true}if(a){h+=int2char(l)}}}return a?h:"0"}function bnNegate(){var a=nbi();BigInteger.ZERO.subTo(this,a);return a}function bnAbs(){return(this.s<0)?this.negate():this}function bnCompareTo(b){var d=this.s-b.s;if(d!=0){return d}var c=this.t;d=c-b.t;if(d!=0){return(this.s<0)?-d:d}while(--c>=0){if((d=this[c]-b[c])!=0){return d}}return 0}function nbits(a){var c=1,b;if((b=a>>>16)!=0){a=b;c+=16}if((b=a>>8)!=0){a=b;c+=8}if((b=a>>4)!=0){a=b;c+=4}if((b=a>>2)!=0){a=b;c+=2}if((b=a>>1)!=0){a=b;c+=1}return c}function bnBitLength(){if(this.t<=0){return 0}return this.DB*(this.t-1)+nbits(this[this.t-1]^(this.s&this.DM))}function bnpDLShiftTo(c,b){var a;for(a=this.t-1;a>=0;--a){b[a+c]=this[a]}for(a=c-1;a>=0;--a){b[a]=0}b.t=this.t+c;b.s=this.s}function bnpDRShiftTo(c,b){for(var a=c;a=0;--d){e[d+f+1]=(this[d]>>a)|h;h=(this[d]&g)<=0;--d){e[d]=0}e[f]=h;e.t=this.t+f+1;e.s=this.s;e.clamp()}function bnpRShiftTo(g,d){d.s=this.s;var e=Math.floor(g/this.DB);if(e>=this.t){d.t=0;return}var b=g%this.DB;var a=this.DB-b;var f=(1<>b;for(var c=e+1;c>b}if(b>0){d[this.t-e-1]|=(this.s&f)<>=this.DB}if(d.t>=this.DB}g+=this.s}else{g+=this.s;while(e>=this.DB}g-=d.s}f.s=(g<0)?-1:0;if(g<-1){f[e++]=this.DV+g}else{if(g>0){f[e++]=g}}f.t=e;f.clamp()}function bnpMultiplyTo(c,e){var b=this.abs(),f=c.abs();var d=b.t;e.t=d+f.t;while(--d>=0){e[d]=0}for(d=0;d=0){d[b]=0}for(b=0;b=a.DV){d[b+a.t]-=a.DV;d[b+a.t+1]=1}}if(d.t>0){d[d.t-1]+=a.am(b,a[b],d,2*b,0,1)}d.s=0;d.clamp()}function bnpDivRemTo(n,h,g){var w=n.abs();if(w.t<=0){return}var k=this.abs();if(k.t0){w.lShiftTo(v,d);k.lShiftTo(v,g)}else{w.copyTo(d);k.copyTo(g)}var p=d.t;var b=d[p-1];if(b==0){return}var o=b*(1<1)?d[p-2]>>this.F2:0);var A=this.FV/o,z=(1<=0){g[g.t++]=1;g.subTo(f,g)}BigInteger.ONE.dlShiftTo(p,f);f.subTo(d,d);while(d.t=0){var c=(g[--u]==b)?this.DM:Math.floor(g[u]*A+(g[u-1]+x)*z);if((g[u]+=d.am(0,c,g,s,0,p))0){g.rShiftTo(v,g)}if(a<0){BigInteger.ZERO.subTo(g,g)}}function bnMod(b){var c=nbi();this.abs().divRemTo(b,null,c);if(this.s<0&&c.compareTo(BigInteger.ZERO)>0){b.subTo(c,c)}return c}function Classic(a){this.m=a}function cConvert(a){if(a.s<0||a.compareTo(this.m)>=0){return a.mod(this.m)}else{return a}}function cRevert(a){return a}function cReduce(a){a.divRemTo(this.m,null,a)}function cMulTo(a,c,b){a.multiplyTo(c,b);this.reduce(b)}function cSqrTo(a,b){a.squareTo(b);this.reduce(b)}Classic.prototype.convert=cConvert;Classic.prototype.revert=cRevert;Classic.prototype.reduce=cReduce;Classic.prototype.mulTo=cMulTo;Classic.prototype.sqrTo=cSqrTo;function bnpInvDigit(){if(this.t<1){return 0}var a=this[0];if((a&1)==0){return 0}var b=a&3;b=(b*(2-(a&15)*b))&15;b=(b*(2-(a&255)*b))&255;b=(b*(2-(((a&65535)*b)&65535)))&65535;b=(b*(2-a*b%this.DV))%this.DV;return(b>0)?this.DV-b:-b}function Montgomery(a){this.m=a;this.mp=a.invDigit();this.mpl=this.mp&32767;this.mph=this.mp>>15;this.um=(1<<(a.DB-15))-1;this.mt2=2*a.t}function montConvert(a){var b=nbi();a.abs().dlShiftTo(this.m.t,b);b.divRemTo(this.m,null,b);if(a.s<0&&b.compareTo(BigInteger.ZERO)>0){this.m.subTo(b,b)}return b}function montRevert(a){var b=nbi();a.copyTo(b);this.reduce(b);return b}function montReduce(a){while(a.t<=this.mt2){a[a.t++]=0}for(var c=0;c>15)*this.mpl)&this.um)<<15))&a.DM;b=c+this.m.t;a[b]+=this.m.am(0,d,a,c,0,this.m.t);while(a[b]>=a.DV){a[b]-=a.DV;a[++b]++}}a.clamp();a.drShiftTo(this.m.t,a);if(a.compareTo(this.m)>=0){a.subTo(this.m,a)}}function montSqrTo(a,b){a.squareTo(b);this.reduce(b)}function montMulTo(a,c,b){a.multiplyTo(c,b);this.reduce(b)}Montgomery.prototype.convert=montConvert;Montgomery.prototype.revert=montRevert;Montgomery.prototype.reduce=montReduce;Montgomery.prototype.mulTo=montMulTo;Montgomery.prototype.sqrTo=montSqrTo;function bnpIsEven(){return((this.t>0)?(this[0]&1):this.s)==0}function bnpExp(h,j){if(h>4294967295||h<1){return BigInteger.ONE}var f=nbi(),a=nbi(),d=j.convert(this),c=nbits(h)-1;d.copyTo(f);while(--c>=0){j.sqrTo(f,a);if((h&(1<0){j.mulTo(a,d,f)}else{var b=f;f=a;a=b}}return j.revert(f)}function bnModPowInt(b,a){var c;if(b<256||a.isEven()){c=new Classic(a)}else{c=new Montgomery(a)}return this.exp(b,c)}BigInteger.prototype.copyTo=bnpCopyTo;BigInteger.prototype.fromInt=bnpFromInt;BigInteger.prototype.fromString=bnpFromString;BigInteger.prototype.clamp=bnpClamp;BigInteger.prototype.dlShiftTo=bnpDLShiftTo;BigInteger.prototype.drShiftTo=bnpDRShiftTo;BigInteger.prototype.lShiftTo=bnpLShiftTo;BigInteger.prototype.rShiftTo=bnpRShiftTo;BigInteger.prototype.subTo=bnpSubTo;BigInteger.prototype.multiplyTo=bnpMultiplyTo;BigInteger.prototype.squareTo=bnpSquareTo;BigInteger.prototype.divRemTo=bnpDivRemTo;BigInteger.prototype.invDigit=bnpInvDigit;BigInteger.prototype.isEven=bnpIsEven;BigInteger.prototype.exp=bnpExp;BigInteger.prototype.toString=bnToString;BigInteger.prototype.negate=bnNegate;BigInteger.prototype.abs=bnAbs;BigInteger.prototype.compareTo=bnCompareTo;BigInteger.prototype.bitLength=bnBitLength;BigInteger.prototype.mod=bnMod;BigInteger.prototype.modPowInt=bnModPowInt;BigInteger.ZERO=nbv(0);BigInteger.ONE=nbv(1); +/*! (c) Tom Wu | http://www-cs-students.stanford.edu/~tjw/jsbn/ + */ +function bnClone(){var a=nbi();this.copyTo(a);return a}function bnIntValue(){if(this.s<0){if(this.t==1){return this[0]-this.DV}else{if(this.t==0){return -1}}}else{if(this.t==1){return this[0]}else{if(this.t==0){return 0}}}return((this[1]&((1<<(32-this.DB))-1))<>24}function bnShortValue(){return(this.t==0)?this.s:(this[0]<<16)>>16}function bnpChunkSize(a){return Math.floor(Math.LN2*this.DB/Math.log(a))}function bnSigNum(){if(this.s<0){return -1}else{if(this.t<=0||(this.t==1&&this[0]<=0)){return 0}else{return 1}}}function bnpToRadix(c){if(c==null){c=10}if(this.signum()==0||c<2||c>36){return"0"}var f=this.chunkSize(c);var e=Math.pow(c,f);var i=nbv(e),j=nbi(),h=nbi(),g="";this.divRemTo(i,j,h);while(j.signum()>0){g=(e+h.intValue()).toString(c).substr(1)+g;j.divRemTo(i,j,h)}return h.intValue().toString(c)+g}function bnpFromRadix(m,h){this.fromInt(0);if(h==null){h=10}var f=this.chunkSize(h);var g=Math.pow(h,f),e=false,a=0,l=0;for(var c=0;c=f){this.dMultiply(g);this.dAddOffset(l,0);a=0;l=0}}if(a>0){this.dMultiply(Math.pow(h,a));this.dAddOffset(l,0)}if(e){BigInteger.ZERO.subTo(this,this)}}function bnpFromNumber(f,e,h){if("number"==typeof e){if(f<2){this.fromInt(1)}else{this.fromNumber(f,h);if(!this.testBit(f-1)){this.bitwiseTo(BigInteger.ONE.shiftLeft(f-1),op_or,this)}if(this.isEven()){this.dAddOffset(1,0)}while(!this.isProbablePrime(e)){this.dAddOffset(2,0);if(this.bitLength()>f){this.subTo(BigInteger.ONE.shiftLeft(f-1),this)}}}}else{var d=new Array(),g=f&7;d.length=(f>>3)+1;e.nextBytes(d);if(g>0){d[0]&=((1<0){if(e>e)!=(this.s&this.DM)>>e){c[a++]=f|(this.s<<(this.DB-e))}while(b>=0){if(e<8){f=(this[b]&((1<>(e+=this.DB-8)}else{f=(this[b]>>(e-=8))&255;if(e<=0){e+=this.DB;--b}}if((f&128)!=0){f|=-256}if(a==0&&(this.s&128)!=(f&128)){++a}if(a>0||f!=this.s){c[a++]=f}}}return c}function bnEquals(b){return(this.compareTo(b)==0)}function bnMin(b){return(this.compareTo(b)<0)?this:b}function bnMax(b){return(this.compareTo(b)>0)?this:b}function bnpBitwiseTo(c,h,e){var d,g,b=Math.min(c.t,this.t);for(d=0;d>=16;b+=16}if((a&255)==0){a>>=8;b+=8}if((a&15)==0){a>>=4;b+=4}if((a&3)==0){a>>=2;b+=2}if((a&1)==0){++b}return b}function bnGetLowestSetBit(){for(var a=0;a=this.t){return(this.s!=0)}return((this[a]&(1<<(b%this.DB)))!=0)}function bnpChangeBit(c,b){var a=BigInteger.ONE.shiftLeft(c);this.bitwiseTo(a,b,a);return a}function bnSetBit(a){return this.changeBit(a,op_or)}function bnClearBit(a){return this.changeBit(a,op_andnot)}function bnFlipBit(a){return this.changeBit(a,op_xor)}function bnpAddTo(d,f){var e=0,g=0,b=Math.min(d.t,this.t);while(e>=this.DB}if(d.t>=this.DB}g+=this.s}else{g+=this.s;while(e>=this.DB}g+=d.s}f.s=(g<0)?-1:0;if(g>0){f[e++]=g}else{if(g<-1){f[e++]=this.DV+g}}f.t=e;f.clamp()}function bnAdd(b){var c=nbi();this.addTo(b,c);return c}function bnSubtract(b){var c=nbi();this.subTo(b,c);return c}function bnMultiply(b){var c=nbi();this.multiplyTo(b,c);return c}function bnSquare(){var a=nbi();this.squareTo(a);return a}function bnDivide(b){var c=nbi();this.divRemTo(b,c,null);return c}function bnRemainder(b){var c=nbi();this.divRemTo(b,null,c);return c}function bnDivideAndRemainder(b){var d=nbi(),c=nbi();this.divRemTo(b,d,c);return new Array(d,c)}function bnpDMultiply(a){this[this.t]=this.am(0,a-1,this,0,0,this.t);++this.t;this.clamp()}function bnpDAddOffset(b,a){if(b==0){return}while(this.t<=a){this[this.t++]=0}this[a]+=b;while(this[a]>=this.DV){this[a]-=this.DV;if(++a>=this.t){this[this.t++]=0}++this[a]}}function NullExp(){}function nNop(a){return a}function nMulTo(a,c,b){a.multiplyTo(c,b)}function nSqrTo(a,b){a.squareTo(b)}NullExp.prototype.convert=nNop;NullExp.prototype.revert=nNop;NullExp.prototype.mulTo=nMulTo;NullExp.prototype.sqrTo=nSqrTo;function bnPow(a){return this.exp(a,new NullExp())}function bnpMultiplyLowerTo(b,f,e){var d=Math.min(this.t+b.t,f);e.s=0;e.t=d;while(d>0){e[--d]=0}var c;for(c=e.t-this.t;d=0){d[c]=0}for(c=Math.max(e-this.t,0);c2*this.m.t){return a.mod(this.m)}else{if(a.compareTo(this.m)<0){return a}else{var b=nbi();a.copyTo(b);this.reduce(b);return b}}}function barrettRevert(a){return a}function barrettReduce(a){a.drShiftTo(this.m.t-1,this.r2);if(a.t>this.m.t+1){a.t=this.m.t+1;a.clamp()}this.mu.multiplyUpperTo(this.r2,this.m.t+1,this.q3);this.m.multiplyLowerTo(this.q3,this.m.t+1,this.r2);while(a.compareTo(this.r2)<0){a.dAddOffset(1,this.m.t+1)}a.subTo(this.r2,a);while(a.compareTo(this.m)>=0){a.subTo(this.m,a)}}function barrettSqrTo(a,b){a.squareTo(b);this.reduce(b)}function barrettMulTo(a,c,b){a.multiplyTo(c,b);this.reduce(b)}Barrett.prototype.convert=barrettConvert;Barrett.prototype.revert=barrettRevert;Barrett.prototype.reduce=barrettReduce;Barrett.prototype.mulTo=barrettMulTo;Barrett.prototype.sqrTo=barrettSqrTo;function bnModPow(q,f){var o=q.bitLength(),h,b=nbv(1),v;if(o<=0){return b}else{if(o<18){h=1}else{if(o<48){h=3}else{if(o<144){h=4}else{if(o<768){h=5}else{h=6}}}}}if(o<8){v=new Classic(f)}else{if(f.isEven()){v=new Barrett(f)}else{v=new Montgomery(f)}}var p=new Array(),d=3,s=h-1,a=(1<1){var A=nbi();v.sqrTo(p[1],A);while(d<=a){p[d]=nbi();v.mulTo(A,p[d-2],p[d]);d+=2}}var l=q.t-1,x,u=true,c=nbi(),y;o=nbits(q[l])-1;while(l>=0){if(o>=s){x=(q[l]>>(o-s))&a}else{x=(q[l]&((1<<(o+1))-1))<<(s-o);if(l>0){x|=q[l-1]>>(this.DB+o-s)}}d=h;while((x&1)==0){x>>=1;--d}if((o-=d)<0){o+=this.DB;--l}if(u){p[x].copyTo(b);u=false}else{while(d>1){v.sqrTo(b,c);v.sqrTo(c,b);d-=2}if(d>0){v.sqrTo(b,c)}else{y=b;b=c;c=y}v.mulTo(c,p[x],b)}while(l>=0&&(q[l]&(1<0){b.rShiftTo(f,b);h.rShiftTo(f,h)}while(b.signum()>0){if((d=b.getLowestSetBit())>0){b.rShiftTo(d,b)}if((d=h.getLowestSetBit())>0){h.rShiftTo(d,h)}if(b.compareTo(h)>=0){b.subTo(h,b);b.rShiftTo(1,b)}else{h.subTo(b,h);h.rShiftTo(1,h)}}if(f>0){h.lShiftTo(f,h)}return h}function bnpModInt(e){if(e<=0){return 0}var c=this.DV%e,b=(this.s<0)?e-1:0;if(this.t>0){if(c==0){b=this[0]%e}else{for(var a=this.t-1;a>=0;--a){b=(c*b+this[a])%e}}}return b}function bnModInverse(f){var j=f.isEven();if((this.isEven()&&j)||f.signum()==0){return BigInteger.ZERO}var i=f.clone(),h=this.clone();var g=nbv(1),e=nbv(0),l=nbv(0),k=nbv(1);while(i.signum()!=0){while(i.isEven()){i.rShiftTo(1,i);if(j){if(!g.isEven()||!e.isEven()){g.addTo(this,g);e.subTo(f,e)}g.rShiftTo(1,g)}else{if(!e.isEven()){e.subTo(f,e)}}e.rShiftTo(1,e)}while(h.isEven()){h.rShiftTo(1,h);if(j){if(!l.isEven()||!k.isEven()){l.addTo(this,l);k.subTo(f,k)}l.rShiftTo(1,l)}else{if(!k.isEven()){k.subTo(f,k)}}k.rShiftTo(1,k)}if(i.compareTo(h)>=0){i.subTo(h,i);if(j){g.subTo(l,g)}e.subTo(k,e)}else{h.subTo(i,h);if(j){l.subTo(g,l)}k.subTo(e,k)}}if(h.compareTo(BigInteger.ONE)!=0){return BigInteger.ZERO}if(k.compareTo(f)>=0){return k.subtract(f)}if(k.signum()<0){k.addTo(f,k)}else{return k}if(k.signum()<0){return k.add(f)}else{return k}}var lowprimes=[2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,109,113,127,131,137,139,149,151,157,163,167,173,179,181,191,193,197,199,211,223,227,229,233,239,241,251,257,263,269,271,277,281,283,293,307,311,313,317,331,337,347,349,353,359,367,373,379,383,389,397,401,409,419,421,431,433,439,443,449,457,461,463,467,479,487,491,499,503,509,521,523,541,547,557,563,569,571,577,587,593,599,601,607,613,617,619,631,641,643,647,653,659,661,673,677,683,691,701,709,719,727,733,739,743,751,757,761,769,773,787,797,809,811,821,823,827,829,839,853,857,859,863,877,881,883,887,907,911,919,929,937,941,947,953,967,971,977,983,991,997];var lplim=(1<<26)/lowprimes[lowprimes.length-1];function bnIsProbablePrime(e){var d,b=this.abs();if(b.t==1&&b[0]<=lowprimes[lowprimes.length-1]){for(d=0;d>1;if(f>lowprimes.length){f=lowprimes.length}var b=nbi();for(var e=0;e>8)&255;rng_pool[rng_pptr++]^=(a>>16)&255;rng_pool[rng_pptr++]^=(a>>24)&255;if(rng_pptr>=rng_psize){rng_pptr-=rng_psize}}function rng_seed_time(){rng_seed_int(new Date().getTime())}if(rng_pool==null){rng_pool=new Array();rng_pptr=0;var t;if(navigator.appName=="Netscape"&&navigator.appVersion<"5"&&window.crypto){var z=window.crypto.random(32);for(t=0;t>>8;rng_pool[rng_pptr++]=t&255}rng_pptr=0;rng_seed_time()}function rng_get_byte(){if(rng_state==null){rng_seed_time();rng_state=prng_newstate();rng_state.init(rng_pool);for(rng_pptr=0;rng_pptr=0&&h>0){var f=e.charCodeAt(d--);if(f<128){g[--h]=f}else{if((f>127)&&(f<2048)){g[--h]=(f&63)|128;g[--h]=(f>>6)|192}else{g[--h]=(f&63)|128;g[--h]=((f>>6)&63)|128;g[--h]=(f>>12)|224}}}g[--h]=0;var b=new SecureRandom();var a=new Array();while(h>2){a[0]=0;while(a[0]==0){b.nextBytes(a)}g[--h]=a[0]}g[--h]=2;g[--h]=0;return new BigInteger(g)}function oaep_mgf1_arr(c,a,e){var b="",d=0;while(b.length>24,(d&16711680)>>16,(d&65280)>>8,d&255])));d+=1}return b}var SHA1_SIZE=20;function oaep_pad(l,a,c){if(l.length+2*SHA1_SIZE+2>a){throw"Message too long for RSA"}var h="",d;for(d=0;d0&&a.length>0){this.n=parseBigInt(b,16);this.e=parseInt(a,16)}else{alert("Invalid RSA public key")}}}function RSADoPublic(a){return a.modPowInt(this.e,this.n)}function RSAEncrypt(d){var a=pkcs1pad2(d,(this.n.bitLength()+7)>>3);if(a==null){return null}var e=this.doPublic(a);if(e==null){return null}var b=e.toString(16);if((b.length&1)==0){return b}else{return"0"+b}}function RSAEncryptOAEP(e,d){var a=oaep_pad(e,(this.n.bitLength()+7)>>3,d);if(a==null){return null}var f=this.doPublic(a);if(f==null){return null}var b=f.toString(16);if((b.length&1)==0){return b}else{return"0"+b}}RSAKey.prototype.doPublic=RSADoPublic;RSAKey.prototype.setPublic=RSASetPublic;RSAKey.prototype.encrypt=RSAEncrypt;RSAKey.prototype.encryptOAEP=RSAEncryptOAEP;RSAKey.prototype.type="RSA"; +/*! (c) Tom Wu | http://www-cs-students.stanford.edu/~tjw/jsbn/ + */ +function pkcs1unpad2(g,j){var a=g.toByteArray();var f=0;while(f=a.length){return null}}var e="";while(++f191)&&(h<224)){e+=String.fromCharCode(((h&31)<<6)|(a[f+1]&63));++f}else{e+=String.fromCharCode(((h&15)<<12)|((a[f+1]&63)<<6)|(a[f+2]&63));f+=2}}}return e}function oaep_mgf1_str(c,a,e){var b="",d=0;while(b.length>24,(d&16711680)>>16,(d&65280)>>8,d&255]));d+=1}return b}var SHA1_SIZE=20;function oaep_unpad(l,b,e){l=l.toByteArray();var f;for(f=0;f0&&a.length>0){this.n=parseBigInt(c,16);this.e=parseInt(a,16);this.d=parseBigInt(b,16)}else{alert("Invalid RSA private key")}}}function RSASetPrivateEx(g,d,e,c,b,a,h,f){this.isPrivate=true;if(g==null){throw"RSASetPrivateEx N == null"}if(d==null){throw"RSASetPrivateEx E == null"}if(g.length==0){throw"RSASetPrivateEx N.length == 0"}if(d.length==0){throw"RSASetPrivateEx E.length == 0"}if(g!=null&&d!=null&&g.length>0&&d.length>0){this.n=parseBigInt(g,16);this.e=parseInt(d,16);this.d=parseBigInt(e,16);this.p=parseBigInt(c,16);this.q=parseBigInt(b,16);this.dmp1=parseBigInt(a,16);this.dmq1=parseBigInt(h,16);this.coeff=parseBigInt(f,16)}else{alert("Invalid RSA private key in RSASetPrivateEx")}}function RSAGenerate(b,i){var a=new SecureRandom();var f=b>>1;this.e=parseInt(i,16);var c=new BigInteger(i,16);for(;;){for(;;){this.p=new BigInteger(b-f,1,a);if(this.p.subtract(BigInteger.ONE).gcd(c).compareTo(BigInteger.ONE)==0&&this.p.isProbablePrime(10)){break}}for(;;){this.q=new BigInteger(f,1,a);if(this.q.subtract(BigInteger.ONE).gcd(c).compareTo(BigInteger.ONE)==0&&this.q.isProbablePrime(10)){break}}if(this.p.compareTo(this.q)<=0){var h=this.p;this.p=this.q;this.q=h}var g=this.p.subtract(BigInteger.ONE);var d=this.q.subtract(BigInteger.ONE);var e=g.multiply(d);if(e.gcd(c).compareTo(BigInteger.ONE)==0){this.n=this.p.multiply(this.q);this.d=c.modInverse(e);this.dmp1=this.d.mod(g);this.dmq1=this.d.mod(d);this.coeff=this.q.modInverse(this.p);break}}}function RSADoPrivate(a){if(this.p==null||this.q==null){return a.modPow(this.d,this.n)}var c=a.mod(this.p).modPow(this.dmp1,this.p);var b=a.mod(this.q).modPow(this.dmq1,this.q);while(c.compareTo(b)<0){c=c.add(this.p)}return c.subtract(b).multiply(this.coeff).mod(this.p).multiply(this.q).add(b)}function RSADecrypt(b){var d=parseBigInt(b,16);var a=this.doPrivate(d);if(a==null){return null}return pkcs1unpad2(a,(this.n.bitLength()+7)>>3)}function RSADecryptOAEP(d,b){var e=parseBigInt(d,16);var a=this.doPrivate(e);if(a==null){return null}return oaep_unpad(a,(this.n.bitLength()+7)>>3,b)}RSAKey.prototype.doPrivate=RSADoPrivate;RSAKey.prototype.setPrivate=RSASetPrivate;RSAKey.prototype.setPrivateEx=RSASetPrivateEx;RSAKey.prototype.generate=RSAGenerate;RSAKey.prototype.decrypt=RSADecrypt;RSAKey.prototype.decryptOAEP=RSADecryptOAEP; +/*! (c) Tom Wu | http://www-cs-students.stanford.edu/~tjw/jsbn/ + */ +function ECFieldElementFp(b,a){this.x=a;this.q=b}function feFpEquals(a){if(a==this){return true}return(this.q.equals(a.q)&&this.x.equals(a.x))}function feFpToBigInteger(){return this.x}function feFpNegate(){return new ECFieldElementFp(this.q,this.x.negate().mod(this.q))}function feFpAdd(a){return new ECFieldElementFp(this.q,this.x.add(a.toBigInteger()).mod(this.q))}function feFpSubtract(a){return new ECFieldElementFp(this.q,this.x.subtract(a.toBigInteger()).mod(this.q))}function feFpMultiply(a){return new ECFieldElementFp(this.q,this.x.multiply(a.toBigInteger()).mod(this.q))}function feFpSquare(){return new ECFieldElementFp(this.q,this.x.square().mod(this.q))}function feFpDivide(a){return new ECFieldElementFp(this.q,this.x.multiply(a.toBigInteger().modInverse(this.q)).mod(this.q))}ECFieldElementFp.prototype.equals=feFpEquals;ECFieldElementFp.prototype.toBigInteger=feFpToBigInteger;ECFieldElementFp.prototype.negate=feFpNegate;ECFieldElementFp.prototype.add=feFpAdd;ECFieldElementFp.prototype.subtract=feFpSubtract;ECFieldElementFp.prototype.multiply=feFpMultiply;ECFieldElementFp.prototype.square=feFpSquare;ECFieldElementFp.prototype.divide=feFpDivide;function ECPointFp(c,a,d,b){this.curve=c;this.x=a;this.y=d;if(b==null){this.z=BigInteger.ONE}else{this.z=b}this.zinv=null}function pointFpGetX(){if(this.zinv==null){this.zinv=this.z.modInverse(this.curve.q)}return this.curve.fromBigInteger(this.x.toBigInteger().multiply(this.zinv).mod(this.curve.q))}function pointFpGetY(){if(this.zinv==null){this.zinv=this.z.modInverse(this.curve.q)}return this.curve.fromBigInteger(this.y.toBigInteger().multiply(this.zinv).mod(this.curve.q))}function pointFpEquals(a){if(a==this){return true}if(this.isInfinity()){return a.isInfinity()}if(a.isInfinity()){return this.isInfinity()}var c,b;c=a.y.toBigInteger().multiply(this.z).subtract(this.y.toBigInteger().multiply(a.z)).mod(this.curve.q);if(!c.equals(BigInteger.ZERO)){return false}b=a.x.toBigInteger().multiply(this.z).subtract(this.x.toBigInteger().multiply(a.z)).mod(this.curve.q);return b.equals(BigInteger.ZERO)}function pointFpIsInfinity(){if((this.x==null)&&(this.y==null)){return true}return this.z.equals(BigInteger.ZERO)&&!this.y.toBigInteger().equals(BigInteger.ZERO)}function pointFpNegate(){return new ECPointFp(this.curve,this.x,this.y.negate(),this.z)}function pointFpAdd(l){if(this.isInfinity()){return l}if(l.isInfinity()){return this}var p=l.y.toBigInteger().multiply(this.z).subtract(this.y.toBigInteger().multiply(l.z)).mod(this.curve.q);var o=l.x.toBigInteger().multiply(this.z).subtract(this.x.toBigInteger().multiply(l.z)).mod(this.curve.q);if(BigInteger.ZERO.equals(o)){if(BigInteger.ZERO.equals(p)){return this.twice()}return this.curve.getInfinity()}var j=new BigInteger("3");var e=this.x.toBigInteger();var n=this.y.toBigInteger();var c=l.x.toBigInteger();var k=l.y.toBigInteger();var m=o.square();var i=m.multiply(o);var d=e.multiply(m);var g=p.square().multiply(this.z);var a=g.subtract(d.shiftLeft(1)).multiply(l.z).subtract(i).multiply(o).mod(this.curve.q);var h=d.multiply(j).multiply(p).subtract(n.multiply(i)).subtract(g.multiply(p)).multiply(l.z).add(p.multiply(i)).mod(this.curve.q);var f=i.multiply(this.z).multiply(l.z).mod(this.curve.q);return new ECPointFp(this.curve,this.curve.fromBigInteger(a),this.curve.fromBigInteger(h),f)}function pointFpTwice(){if(this.isInfinity()){return this}if(this.y.toBigInteger().signum()==0){return this.curve.getInfinity()}var g=new BigInteger("3");var c=this.x.toBigInteger();var h=this.y.toBigInteger();var e=h.multiply(this.z);var j=e.multiply(h).mod(this.curve.q);var i=this.curve.a.toBigInteger();var k=c.square().multiply(g);if(!BigInteger.ZERO.equals(i)){k=k.add(this.z.square().multiply(i))}k=k.mod(this.curve.q);var b=k.square().subtract(c.shiftLeft(3).multiply(j)).shiftLeft(1).multiply(e).mod(this.curve.q);var f=k.multiply(g).multiply(c).subtract(j.shiftLeft(1)).shiftLeft(2).multiply(j).subtract(k.square().multiply(k)).mod(this.curve.q);var d=e.square().multiply(e).shiftLeft(3).mod(this.curve.q);return new ECPointFp(this.curve,this.curve.fromBigInteger(b),this.curve.fromBigInteger(f),d)}function pointFpMultiply(b){if(this.isInfinity()){return this}if(b.signum()==0){return this.curve.getInfinity()}var g=b;var f=g.multiply(new BigInteger("3"));var l=this.negate();var d=this;var c;for(c=f.bitLength()-2;c>0;--c){d=d.twice();var a=f.testBit(c);var j=g.testBit(c);if(a!=j){d=d.add(a?this:l)}}return d}function pointFpMultiplyTwo(c,a,b){var d;if(c.bitLength()>b.bitLength()){d=c.bitLength()-1}else{d=b.bitLength()-1}var f=this.curve.getInfinity();var e=this.add(a);while(d>=0){f=f.twice();if(c.testBit(d)){if(b.testBit(d)){f=f.add(e)}else{f=f.add(this)}}else{if(b.testBit(d)){f=f.add(a)}}--d}return f}ECPointFp.prototype.getX=pointFpGetX;ECPointFp.prototype.getY=pointFpGetY;ECPointFp.prototype.equals=pointFpEquals;ECPointFp.prototype.isInfinity=pointFpIsInfinity;ECPointFp.prototype.negate=pointFpNegate;ECPointFp.prototype.add=pointFpAdd;ECPointFp.prototype.twice=pointFpTwice;ECPointFp.prototype.multiply=pointFpMultiply;ECPointFp.prototype.multiplyTwo=pointFpMultiplyTwo;function ECCurveFp(e,d,c){this.q=e;this.a=this.fromBigInteger(d);this.b=this.fromBigInteger(c);this.infinity=new ECPointFp(this,null,null)}function curveFpGetQ(){return this.q}function curveFpGetA(){return this.a}function curveFpGetB(){return this.b}function curveFpEquals(a){if(a==this){return true}return(this.q.equals(a.q)&&this.a.equals(a.a)&&this.b.equals(a.b))}function curveFpGetInfinity(){return this.infinity}function curveFpFromBigInteger(a){return new ECFieldElementFp(this.q,a)}function curveFpDecodePointHex(d){switch(parseInt(d.substr(0,2),16)){case 0:return this.infinity;case 2:case 3:return null;case 4:case 6:case 7:var a=(d.length-2)/2;var c=d.substr(2,a);var b=d.substr(a+2,a);return new ECPointFp(this,this.fromBigInteger(new BigInteger(c,16)),this.fromBigInteger(new BigInteger(b,16)));default:return null}}ECCurveFp.prototype.getQ=curveFpGetQ;ECCurveFp.prototype.getA=curveFpGetA;ECCurveFp.prototype.getB=curveFpGetB;ECCurveFp.prototype.equals=curveFpEquals;ECCurveFp.prototype.getInfinity=curveFpGetInfinity;ECCurveFp.prototype.fromBigInteger=curveFpFromBigInteger;ECCurveFp.prototype.decodePointHex=curveFpDecodePointHex; +/*! (c) Stefan Thomas | https://github.com/bitcoinjs/bitcoinjs-lib + */ +ECFieldElementFp.prototype.getByteLength=function(){return Math.floor((this.toBigInteger().bitLength()+7)/8)};ECPointFp.prototype.getEncoded=function(c){var d=function(h,f){var g=h.toByteArrayUnsigned();if(fg.length){g.unshift(0)}}return g};var a=this.getX().toBigInteger();var e=this.getY().toBigInteger();var b=d(a,32);if(c){if(e.isEven()){b.unshift(2)}else{b.unshift(3)}}else{b.unshift(4);b=b.concat(d(e,32))}return b};ECPointFp.decodeFrom=function(g,c){var f=c[0];var e=c.length-1;var d=c.slice(1,1+e/2);var b=c.slice(1+e/2,1+e);d.unshift(0);b.unshift(0);var a=new BigInteger(d);var h=new BigInteger(b);return new ECPointFp(g,g.fromBigInteger(a),g.fromBigInteger(h))};ECPointFp.decodeFromHex=function(g,c){var f=c.substr(0,2);var e=c.length-2;var d=c.substr(2,e/2);var b=c.substr(2+e/2,e/2);var a=new BigInteger(d,16);var h=new BigInteger(b,16);return new ECPointFp(g,g.fromBigInteger(a),g.fromBigInteger(h))};ECPointFp.prototype.add2D=function(c){if(this.isInfinity()){return c}if(c.isInfinity()){return this}if(this.x.equals(c.x)){if(this.y.equals(c.y)){return this.twice()}return this.curve.getInfinity()}var g=c.x.subtract(this.x);var e=c.y.subtract(this.y);var a=e.divide(g);var d=a.square().subtract(this.x).subtract(c.x);var f=a.multiply(this.x.subtract(d)).subtract(this.y);return new ECPointFp(this.curve,d,f)};ECPointFp.prototype.twice2D=function(){if(this.isInfinity()){return this}if(this.y.toBigInteger().signum()==0){return this.curve.getInfinity()}var b=this.curve.fromBigInteger(BigInteger.valueOf(2));var e=this.curve.fromBigInteger(BigInteger.valueOf(3));var a=this.x.square().multiply(e).add(this.curve.a).divide(this.y.multiply(b));var c=a.square().subtract(this.x.multiply(b));var d=a.multiply(this.x.subtract(c)).subtract(this.y);return new ECPointFp(this.curve,c,d)};ECPointFp.prototype.multiply2D=function(b){if(this.isInfinity()){return this}if(b.signum()==0){return this.curve.getInfinity()}var g=b;var f=g.multiply(new BigInteger("3"));var l=this.negate();var d=this;var c;for(c=f.bitLength()-2;c>0;--c){d=d.twice();var a=f.testBit(c);var j=g.testBit(c);if(a!=j){d=d.add2D(a?this:l)}}return d};ECPointFp.prototype.isOnCurve=function(){var d=this.getX().toBigInteger();var i=this.getY().toBigInteger();var f=this.curve.getA().toBigInteger();var c=this.curve.getB().toBigInteger();var h=this.curve.getQ();var e=i.multiply(i).mod(h);var g=d.multiply(d).multiply(d).add(f.multiply(d)).add(c).mod(h);return e.equals(g)};ECPointFp.prototype.toString=function(){return"("+this.getX().toBigInteger().toString()+","+this.getY().toBigInteger().toString()+")"};ECPointFp.prototype.validate=function(){var c=this.curve.getQ();if(this.isInfinity()){throw new Error("Point is at infinity.")}var a=this.getX().toBigInteger();var b=this.getY().toBigInteger();if(a.compareTo(BigInteger.ONE)<0||a.compareTo(c.subtract(BigInteger.ONE))>0){throw new Error("x coordinate out of bounds")}if(b.compareTo(BigInteger.ONE)<0||b.compareTo(c.subtract(BigInteger.ONE))>0){throw new Error("y coordinate out of bounds")}if(!this.isOnCurve()){throw new Error("Point is not on the curve.")}if(this.multiply(c).isInfinity()){throw new Error("Point is not a scalar multiple of G.")}return true}; +/*! asn1-1.0.8.js (c) 2013-2015 Kenji Urushima | kjur.github.com/jsrsasign/license + */ +if(typeof KJUR=="undefined"||!KJUR){KJUR={}}if(typeof KJUR.asn1=="undefined"||!KJUR.asn1){KJUR.asn1={}}KJUR.asn1.ASN1Util=new function(){this.integerToByteHex=function(a){var b=a.toString(16);if((b.length%2)==1){b="0"+b}return b};this.bigIntToMinTwosComplementsHex=function(j){var f=j.toString(16);if(f.substr(0,1)!="-"){if(f.length%2==1){f="0"+f}else{if(!f.match(/^[0-7]/)){f="00"+f}}}else{var a=f.substr(1);var e=a.length;if(e%2==1){e+=1}else{if(!f.match(/^[0-7]/)){e+=2}}var g="";for(var d=0;d15){throw"ASN.1 length too long to represent by 8x: n = "+i.toString(16)}var f=128+g;return f.toString(16)+h}};this.getEncodedHex=function(){if(this.hTLV==null||this.isModified){this.hV=this.getFreshValueHex();this.hL=this.getLengthHexFromValue();this.hTLV=this.hT+this.hL+this.hV;this.isModified=false}return this.hTLV};this.getValueHex=function(){this.getEncodedHex();return this.hV};this.getFreshValueHex=function(){return""}};KJUR.asn1.DERAbstractString=function(c){KJUR.asn1.DERAbstractString.superclass.constructor.call(this);var b=null;var a=null;this.getString=function(){return this.s};this.setString=function(d){this.hTLV=null;this.isModified=true;this.s=d;this.hV=stohex(this.s)};this.setStringHex=function(d){this.hTLV=null;this.isModified=true;this.s=null;this.hV=d};this.getFreshValueHex=function(){return this.hV};if(typeof c!="undefined"){if(typeof c=="string"){this.setString(c)}else{if(typeof c.str!="undefined"){this.setString(c.str)}else{if(typeof c.hex!="undefined"){this.setStringHex(c.hex)}}}}};YAHOO.lang.extend(KJUR.asn1.DERAbstractString,KJUR.asn1.ASN1Object);KJUR.asn1.DERAbstractTime=function(c){KJUR.asn1.DERAbstractTime.superclass.constructor.call(this);var b=null;var a=null;this.localDateToUTC=function(f){utc=f.getTime()+(f.getTimezoneOffset()*60000);var e=new Date(utc);return e};this.formatDate=function(m,o,e){var g=this.zeroPadding;var n=this.localDateToUTC(m);var p=String(n.getFullYear());if(o=="utc"){p=p.substr(2,2)}var l=g(String(n.getMonth()+1),2);var q=g(String(n.getDate()),2);var h=g(String(n.getHours()),2);var i=g(String(n.getMinutes()),2);var j=g(String(n.getSeconds()),2);var r=p+l+q+h+i+j;if(e===true){var f=n.getMilliseconds();if(f!=0){var k=g(String(f),3);k=k.replace(/[0]+$/,"");r=r+"."+k}}return r+"Z"};this.zeroPadding=function(e,d){if(e.length>=d){return e}return new Array(d-e.length+1).join("0")+e};this.getString=function(){return this.s};this.setString=function(d){this.hTLV=null;this.isModified=true;this.s=d;this.hV=stohex(d)};this.setByDateValue=function(h,j,e,d,f,g){var i=new Date(Date.UTC(h,j-1,e,d,f,g,0));this.setByDate(i)};this.getFreshValueHex=function(){return this.hV}};YAHOO.lang.extend(KJUR.asn1.DERAbstractTime,KJUR.asn1.ASN1Object);KJUR.asn1.DERAbstractStructured=function(b){KJUR.asn1.DERAbstractString.superclass.constructor.call(this);var a=null;this.setByASN1ObjectArray=function(c){this.hTLV=null;this.isModified=true;this.asn1Array=c};this.appendASN1Object=function(c){this.hTLV=null;this.isModified=true;this.asn1Array.push(c)};this.asn1Array=new Array();if(typeof b!="undefined"){if(typeof b.array!="undefined"){this.asn1Array=b.array}}};YAHOO.lang.extend(KJUR.asn1.DERAbstractStructured,KJUR.asn1.ASN1Object);KJUR.asn1.DERBoolean=function(){KJUR.asn1.DERBoolean.superclass.constructor.call(this);this.hT="01";this.hTLV="0101ff"};YAHOO.lang.extend(KJUR.asn1.DERBoolean,KJUR.asn1.ASN1Object);KJUR.asn1.DERInteger=function(a){KJUR.asn1.DERInteger.superclass.constructor.call(this);this.hT="02";this.setByBigInteger=function(b){this.hTLV=null;this.isModified=true;this.hV=KJUR.asn1.ASN1Util.bigIntToMinTwosComplementsHex(b)};this.setByInteger=function(c){var b=new BigInteger(String(c),10);this.setByBigInteger(b)};this.setValueHex=function(b){this.hV=b};this.getFreshValueHex=function(){return this.hV};if(typeof a!="undefined"){if(typeof a.bigint!="undefined"){this.setByBigInteger(a.bigint)}else{if(typeof a["int"]!="undefined"){this.setByInteger(a["int"])}else{if(typeof a=="number"){this.setByInteger(a)}else{if(typeof a.hex!="undefined"){this.setValueHex(a.hex)}}}}}};YAHOO.lang.extend(KJUR.asn1.DERInteger,KJUR.asn1.ASN1Object);KJUR.asn1.DERBitString=function(a){KJUR.asn1.DERBitString.superclass.constructor.call(this);this.hT="03";this.setHexValueIncludingUnusedBits=function(b){this.hTLV=null;this.isModified=true;this.hV=b};this.setUnusedBitsAndHexValue=function(b,d){if(b<0||7=(b*2))){break}if(d>=200){break}c.push(e);g=e;d++}return c};this.getNthChildIndex_AtObj=function(d,b,e){var c=this.getPosArrayOfChildren_AtObj(d,b);return c[e]};this.getDecendantIndexByNthList=function(e,d,c){if(c.length==0){return d}var f=c.shift();var b=this.getPosArrayOfChildren_AtObj(e,d);return this.getDecendantIndexByNthList(e,b[f],c)};this.getDecendantHexTLVByNthList=function(d,c,b){var a=this.getDecendantIndexByNthList(d,c,b);return this.getHexOfTLV_AtObj(d,a)};this.getDecendantHexVByNthList=function(d,c,b){var a=this.getDecendantIndexByNthList(d,c,b);return this.getHexOfV_AtObj(d,a)}};ASN1HEX.getVbyList=function(d,c,b,e){var a=this.getDecendantIndexByNthList(d,c,b);if(a===undefined){throw"can't find nthList object"}if(e!==undefined){if(d.substr(a,2)!=e){throw"checking tag doesn't match: "+d.substr(a,2)+"!="+e}}return this.getHexOfV_AtObj(d,a)};ASN1HEX.hextooidstr=function(e){var h=function(b,a){if(b.length>=a){return b}return new Array(a-b.length+1).join("0")+b};var l=[];var o=e.substr(0,2);var f=parseInt(o,16);l[0]=new String(Math.floor(f/40));l[1]=new String(f%40);var m=e.substr(2);var k=[];for(var g=0;g0){n=n+"."+j.join(".")}return n};ASN1HEX.dump=function(e,c,k,g){var o=function(w,i){if(w.length<=i*2){return w}else{var v=w.substr(0,i)+"..(total "+w.length/2+"bytes).."+w.substr(w.length-i,i);return v}};if(c===undefined){c={ommit_long_octet:32}}if(k===undefined){k=0}if(g===undefined){g=""}var r=c.ommit_long_octet;if(e.substr(k,2)=="01"){var h=ASN1HEX.getHexOfV_AtObj(e,k);if(h=="00"){return g+"BOOLEAN FALSE\n"}else{return g+"BOOLEAN TRUE\n"}}if(e.substr(k,2)=="02"){var h=ASN1HEX.getHexOfV_AtObj(e,k);return g+"INTEGER "+o(h,r)+"\n"}if(e.substr(k,2)=="03"){var h=ASN1HEX.getHexOfV_AtObj(e,k);return g+"BITSTRING "+o(h,r)+"\n"}if(e.substr(k,2)=="04"){var h=ASN1HEX.getHexOfV_AtObj(e,k);if(ASN1HEX.isASN1HEX(h)){var j=g+"OCTETSTRING, encapsulates\n";j=j+ASN1HEX.dump(h,c,0,g+" ");return j}else{return g+"OCTETSTRING "+o(h,r)+"\n"}}if(e.substr(k,2)=="05"){return g+"NULL\n"}if(e.substr(k,2)=="06"){var l=ASN1HEX.getHexOfV_AtObj(e,k);var a=KJUR.asn1.ASN1Util.oidHexToInt(l);var n=KJUR.asn1.x509.OID.oid2name(a);var b=a.replace(/\./g," ");if(n!=""){return g+"ObjectIdentifier "+n+" ("+b+")\n"}else{return g+"ObjectIdentifier ("+b+")\n"}}if(e.substr(k,2)=="0c"){return g+"UTF8String '"+hextoutf8(ASN1HEX.getHexOfV_AtObj(e,k))+"'\n"}if(e.substr(k,2)=="13"){return g+"PrintableString '"+hextoutf8(ASN1HEX.getHexOfV_AtObj(e,k))+"'\n"}if(e.substr(k,2)=="14"){return g+"TeletexString '"+hextoutf8(ASN1HEX.getHexOfV_AtObj(e,k))+"'\n"}if(e.substr(k,2)=="16"){return g+"IA5String '"+hextoutf8(ASN1HEX.getHexOfV_AtObj(e,k))+"'\n"}if(e.substr(k,2)=="17"){return g+"UTCTime "+hextoutf8(ASN1HEX.getHexOfV_AtObj(e,k))+"\n"}if(e.substr(k,2)=="18"){return g+"GeneralizedTime "+hextoutf8(ASN1HEX.getHexOfV_AtObj(e,k))+"\n"}if(e.substr(k,2)=="30"){if(e.substr(k,4)=="3000"){return g+"SEQUENCE {}\n"}var j=g+"SEQUENCE\n";var d=ASN1HEX.getPosArrayOfChildren_AtObj(e,k);var f=c;if((d.length==2||d.length==3)&&e.substr(d[0],2)=="06"&&e.substr(d[d.length-1],2)=="04"){var t=ASN1HEX.getHexOfV_AtObj(e,d[0]);var a=KJUR.asn1.ASN1Util.oidHexToInt(t);var n=KJUR.asn1.x509.OID.oid2name(a);var p=JSON.parse(JSON.stringify(c));p.x509ExtName=n;f=p}for(var q=0;q0){var d=new KJUR.asn1.DERSequence({array:this.extensionsArray});var b=new KJUR.asn1.DERTaggedObject({explicit:true,tag:"a3",obj:d});this.asn1Array.push(b)}var e=new KJUR.asn1.DERSequence({array:this.asn1Array});this.hTLV=e.getEncodedHex();this.isModified=false;return this.hTLV};this._initialize()};YAHOO.lang.extend(KJUR.asn1.x509.TBSCertificate,KJUR.asn1.ASN1Object);KJUR.asn1.x509.Extension=function(b){KJUR.asn1.x509.Extension.superclass.constructor.call(this);var a=null;this.getEncodedHex=function(){var f=new KJUR.asn1.DERObjectIdentifier({oid:this.oid});var e=new KJUR.asn1.DEROctetString({hex:this.getExtnValueHex()});var d=new Array();d.push(f);if(this.critical){d.push(new KJUR.asn1.DERBoolean())}d.push(e);var c=new KJUR.asn1.DERSequence({array:d});return c.getEncodedHex()};this.critical=false;if(typeof b!="undefined"){if(typeof b.critical!="undefined"){this.critical=b.critical}}};YAHOO.lang.extend(KJUR.asn1.x509.Extension,KJUR.asn1.ASN1Object);KJUR.asn1.x509.KeyUsage=function(a){KJUR.asn1.x509.KeyUsage.superclass.constructor.call(this,a);this.getExtnValueHex=function(){return this.asn1ExtnValue.getEncodedHex()};this.oid="2.5.29.15";if(typeof a!="undefined"){if(typeof a.bin!="undefined"){this.asn1ExtnValue=new KJUR.asn1.DERBitString(a)}}};YAHOO.lang.extend(KJUR.asn1.x509.KeyUsage,KJUR.asn1.x509.Extension);KJUR.asn1.x509.BasicConstraints=function(c){KJUR.asn1.x509.BasicConstraints.superclass.constructor.call(this,c);var a=false;var b=-1;this.getExtnValueHex=function(){var e=new Array();if(this.cA){e.push(new KJUR.asn1.DERBoolean())}if(this.pathLen>-1){e.push(new KJUR.asn1.DERInteger({"int":this.pathLen}))}var d=new KJUR.asn1.DERSequence({array:e});this.asn1ExtnValue=d;return this.asn1ExtnValue.getEncodedHex()};this.oid="2.5.29.19";this.cA=false;this.pathLen=-1;if(typeof c!="undefined"){if(typeof c.cA!="undefined"){this.cA=c.cA}if(typeof c.pathLen!="undefined"){this.pathLen=c.pathLen}}};YAHOO.lang.extend(KJUR.asn1.x509.BasicConstraints,KJUR.asn1.x509.Extension);KJUR.asn1.x509.CRLDistributionPoints=function(a){KJUR.asn1.x509.CRLDistributionPoints.superclass.constructor.call(this,a);this.getExtnValueHex=function(){return this.asn1ExtnValue.getEncodedHex()};this.setByDPArray=function(b){this.asn1ExtnValue=new KJUR.asn1.DERSequence({array:b})};this.setByOneURI=function(e){var b=new KJUR.asn1.x509.GeneralNames([{uri:e}]);var d=new KJUR.asn1.x509.DistributionPointName(b);var c=new KJUR.asn1.x509.DistributionPoint({dpobj:d});this.setByDPArray([c])};this.oid="2.5.29.31";if(typeof a!="undefined"){if(typeof a.array!="undefined"){this.setByDPArray(a.array)}else{if(typeof a.uri!="undefined"){this.setByOneURI(a.uri)}}}};YAHOO.lang.extend(KJUR.asn1.x509.CRLDistributionPoints,KJUR.asn1.x509.Extension);KJUR.asn1.x509.ExtKeyUsage=function(a){KJUR.asn1.x509.ExtKeyUsage.superclass.constructor.call(this,a);this.setPurposeArray=function(b){this.asn1ExtnValue=new KJUR.asn1.DERSequence();for(var c=0;c0){var c=new KJUR.asn1.DERSequence({array:this.aRevokedCert});this.asn1Array.push(c)}var d=new KJUR.asn1.DERSequence({array:this.asn1Array});this.hTLV=d.getEncodedHex();this.isModified=false;return this.hTLV};this._initialize=function(){this.asn1Version=null;this.asn1SignatureAlg=null;this.asn1Issuer=null;this.asn1ThisUpdate=null;this.asn1NextUpdate=null;this.aRevokedCert=new Array()};this._initialize()};YAHOO.lang.extend(KJUR.asn1.x509.TBSCertList,KJUR.asn1.ASN1Object);KJUR.asn1.x509.CRLEntry=function(c){KJUR.asn1.x509.CRLEntry.superclass.constructor.call(this);var b=null;var a=null;this.setCertSerial=function(d){this.sn=new KJUR.asn1.DERInteger(d)};this.setRevocationDate=function(d){this.time=new KJUR.asn1.x509.Time(d)};this.getEncodedHex=function(){var d=new KJUR.asn1.DERSequence({array:[this.sn,this.time]});this.TLV=d.getEncodedHex();return this.TLV};if(typeof c!="undefined"){if(typeof c.time!="undefined"){this.setRevocationDate(c.time)}if(typeof c.sn!="undefined"){this.setCertSerial(c.sn)}}};YAHOO.lang.extend(KJUR.asn1.x509.CRLEntry,KJUR.asn1.ASN1Object);KJUR.asn1.x509.X500Name=function(b){KJUR.asn1.x509.X500Name.superclass.constructor.call(this);this.asn1Array=new Array();this.setByString=function(c){var d=c.split("/");d.shift();for(var e=0;e0){h=new a.DERTaggedObject({obj:this.dUnsignedAttrs,tag:"a1",explicit:false})}var g=[this.dCMSVersion,this.dSignerIdentifier,this.dDigestAlgorithm,e,this.dSigAlg,this.dSig,];if(h!=null){g.push(h)}var f=new a.DERSequence({array:g});this.hTLV=f.getEncodedHex();return this.hTLV}};YAHOO.lang.extend(KJUR.asn1.cms.SignerInfo,KJUR.asn1.ASN1Object);KJUR.asn1.cms.EncapsulatedContentInfo=function(c){KJUR.asn1.cms.EncapsulatedContentInfo.superclass.constructor.call(this);var a=KJUR.asn1;var b=KJUR.asn1.cms;var d=KJUR.asn1.x509;this.dEContentType=new a.DERObjectIdentifier({name:"data"});this.dEContent=null;this.isDetached=false;this.eContentValueHex=null;this.setContentType=function(e){if(e.match(/^[0-2][.][0-9.]+$/)){this.dEContentType=new a.DERObjectIdentifier({oid:e})}else{this.dEContentType=new a.DERObjectIdentifier({name:e})}};this.setContentValue=function(e){if(typeof e!="undefined"){if(typeof e.hex=="string"){this.eContentValueHex=e.hex}else{if(typeof e.str=="string"){this.eContentValueHex=utf8tohex(e.str)}}}};this.setContentValueHex=function(e){this.eContentValueHex=e};this.setContentValueStr=function(e){this.eContentValueHex=utf8tohex(e)};this.getEncodedHex=function(){if(typeof this.eContentValueHex!="string"){throw"eContentValue not yet set"}var g=new a.DEROctetString({hex:this.eContentValueHex});this.dEContent=new a.DERTaggedObject({obj:g,tag:"a0",explicit:true});var e=[this.dEContentType];if(!this.isDetached){e.push(this.dEContent)}var f=new a.DERSequence({array:e});this.hTLV=f.getEncodedHex();return this.hTLV}};YAHOO.lang.extend(KJUR.asn1.cms.EncapsulatedContentInfo,KJUR.asn1.ASN1Object);KJUR.asn1.cms.ContentInfo=function(c){KJUR.asn1.cms.ContentInfo.superclass.constructor.call(this);var a=KJUR.asn1;var b=KJUR.asn1.cms;var d=KJUR.asn1.x509;this.dContentType=null;this.dContent=null;this.setContentType=function(e){if(typeof e=="string"){this.dContentType=d.OID.name2obj(e)}};this.getEncodedHex=function(){var f=new a.DERTaggedObject({obj:this.dContent,tag:"a0",explicit:true});var e=new a.DERSequence({array:[this.dContentType,f]});this.hTLV=e.getEncodedHex();return this.hTLV};if(typeof c!="undefined"){if(c.type){this.setContentType(c.type)}if(c.obj&&c.obj instanceof a.ASN1Object){this.dContent=c.obj}}};YAHOO.lang.extend(KJUR.asn1.cms.ContentInfo,KJUR.asn1.ASN1Object);KJUR.asn1.cms.SignedData=function(c){KJUR.asn1.cms.SignedData.superclass.constructor.call(this);var a=KJUR.asn1;var b=KJUR.asn1.cms;var d=KJUR.asn1.x509;this.dCMSVersion=new a.DERInteger({"int":1});this.dDigestAlgs=null;this.digestAlgNameList=[];this.dEncapContentInfo=new b.EncapsulatedContentInfo();this.dCerts=null;this.certificateList=[];this.crlList=[];this.signerInfoList=[new b.SignerInfo()];this.addCertificatesByPEM=function(e){var f=KEYUTIL.getHexFromPEM(e);var g=new a.ASN1Object();g.hTLV=f;this.certificateList.push(g)};this.getEncodedHex=function(){if(typeof this.hTLV=="string"){return this.hTLV}if(this.dDigestAlgs==null){var k=[];for(var j=0;j0){var l=new a.DERSet({array:this.certificateList});this.dCerts=new a.DERTaggedObject({obj:l,tag:"a0",explicit:false})}}if(this.dCerts!=null){e.push(this.dCerts)}var g=new a.DERSet({array:this.signerInfoList});e.push(g);var f=new a.DERSequence({array:e});this.hTLV=f.getEncodedHex();return this.hTLV};this.getContentInfo=function(){this.getEncodedHex();var e=new b.ContentInfo({type:"signed-data",obj:this});return e};this.getContentInfoEncodedHex=function(){var e=this.getContentInfo();var f=e.getEncodedHex();return f};this.getPEM=function(){var e=this.getContentInfoEncodedHex();var f=a.ASN1Util.getPEMStringFromHex(e,"CMS");return f}};YAHOO.lang.extend(KJUR.asn1.cms.SignedData,KJUR.asn1.ASN1Object);KJUR.asn1.cms.CMSUtil=new function(){};KJUR.asn1.cms.CMSUtil.newSignedData=function(a){var h=KJUR.asn1.cms;var g=KJUR.asn1.cades;var f=new h.SignedData();f.dEncapContentInfo.setContentValue(a.content);if(typeof a.certs=="object"){for(var b=0;ba.length){d=a.length}for(var b=0;bd){throw"key is too short for SigAlg: keylen="+j+","+a}var b="0001";var k="00"+c;var g="";var l=d-b.length-k.length;for(var f=0;f=0;--p){q=q.twice2D();q.z=BigInteger.ONE;if(o.testBit(p)){if(n.testBit(p)){q=q.add2D(t)}else{q=q.add2D(s)}}else{if(n.testBit(p)){q=q.add2D(r)}}}return q}this.getBigRandom=function(i){return new BigInteger(i.bitLength(),a).mod(i.subtract(BigInteger.ONE)).add(BigInteger.ONE)};this.setNamedCurve=function(i){this.ecparams=KJUR.crypto.ECParameterDB.getByName(i);this.prvKeyHex=null;this.pubKeyHex=null;this.curveName=i};this.setPrivateKeyHex=function(i){this.isPrivate=true;this.prvKeyHex=i};this.setPublicKeyHex=function(i){this.isPublic=true;this.pubKeyHex=i};this.generateKeyPairHex=function(){var k=this.ecparams.n;var n=this.getBigRandom(k);var l=this.ecparams.G.multiply(n);var q=l.getX().toBigInteger();var o=l.getY().toBigInteger();var i=this.ecparams.keylen/4;var m=("0000000000"+n.toString(16)).slice(-i);var r=("0000000000"+q.toString(16)).slice(-i);var p=("0000000000"+o.toString(16)).slice(-i);var j="04"+r+p;this.setPrivateKeyHex(m);this.setPublicKeyHex(j);return{ecprvhex:m,ecpubhex:j}};this.signWithMessageHash=function(i){return this.signHex(i,this.prvKeyHex)};this.signHex=function(o,j){var t=new BigInteger(j,16);var l=this.ecparams.n;var q=new BigInteger(o,16);do{var m=this.getBigRandom(l);var u=this.ecparams.G;var p=u.multiply(m);var i=p.getX().toBigInteger().mod(l)}while(i.compareTo(BigInteger.ZERO)<=0);var v=m.modInverse(l).multiply(q.add(t.multiply(i))).mod(l);return KJUR.crypto.ECDSA.biRSSigToASN1Sig(i,v)};this.sign=function(m,u){var q=u;var j=this.ecparams.n;var p=BigInteger.fromByteArrayUnsigned(m);do{var l=this.getBigRandom(j);var t=this.ecparams.G;var o=t.multiply(l);var i=o.getX().toBigInteger().mod(j)}while(i.compareTo(BigInteger.ZERO)<=0);var v=l.modInverse(j).multiply(p.add(q.multiply(i))).mod(j);return this.serializeSig(i,v)};this.verifyWithMessageHash=function(j,i){return this.verifyHex(j,i,this.pubKeyHex)};this.verifyHex=function(m,i,p){var l,j;var o=KJUR.crypto.ECDSA.parseSigHex(i);l=o.r;j=o.s;var k;k=ECPointFp.decodeFromHex(this.ecparams.curve,p);var n=new BigInteger(m,16);return this.verifyRaw(n,l,j,k)};this.verify=function(o,p,j){var l,i;if(Bitcoin.Util.isArray(p)){var n=this.parseSig(p);l=n.r;i=n.s}else{if("object"===typeof p&&p.r&&p.s){l=p.r;i=p.s}else{throw"Invalid value for signature"}}var k;if(j instanceof ECPointFp){k=j}else{if(Bitcoin.Util.isArray(j)){k=ECPointFp.decodeFrom(this.ecparams.curve,j)}else{throw"Invalid format for pubkey value, must be byte array or ECPointFp"}}var m=BigInteger.fromByteArrayUnsigned(o);return this.verifyRaw(m,l,i,k)};this.verifyRaw=function(o,i,w,m){var l=this.ecparams.n;var u=this.ecparams.G;if(i.compareTo(BigInteger.ONE)<0||i.compareTo(l)>=0){return false}if(w.compareTo(BigInteger.ONE)<0||w.compareTo(l)>=0){return false}var p=w.modInverse(l);var k=o.multiply(p).mod(l);var j=i.multiply(p).mod(l);var q=u.multiply(k).add(m.multiply(j));var t=q.getX().toBigInteger().mod(l);return t.equals(i)};this.serializeSig=function(k,j){var l=k.toByteArraySigned();var i=j.toByteArraySigned();var m=[];m.push(2);m.push(l.length);m=m.concat(l);m.push(2);m.push(i.length);m=m.concat(i);m.unshift(m.length);m.unshift(48);return m};this.parseSig=function(n){var m;if(n[0]!=48){throw new Error("Signature not a valid DERSequence")}m=2;if(n[m]!=2){throw new Error("First element in signature must be a DERInteger")}var l=n.slice(m+2,m+2+n[m+1]);m+=2+n[m+1];if(n[m]!=2){throw new Error("Second element in signature must be a DERInteger")}var i=n.slice(m+2,m+2+n[m+1]);m+=2+n[m+1];var k=BigInteger.fromByteArrayUnsigned(l);var j=BigInteger.fromByteArrayUnsigned(i);return{r:k,s:j}};this.parseSigCompact=function(m){if(m.length!==65){throw"Signature has the wrong length"}var j=m[0]-27;if(j<0||j>7){throw"Invalid signature type"}var o=this.ecparams.n;var l=BigInteger.fromByteArrayUnsigned(m.slice(1,33)).mod(o);var k=BigInteger.fromByteArrayUnsigned(m.slice(33,65)).mod(o);return{r:l,s:k,i:j}};if(h!==undefined){if(h.curve!==undefined){this.curveName=h.curve}}if(this.curveName===undefined){this.curveName=e}this.setNamedCurve(this.curveName);if(h!==undefined){if(h.prv!==undefined){this.setPrivateKeyHex(h.prv)}if(h.pub!==undefined){this.setPublicKeyHex(h.pub)}}};KJUR.crypto.ECDSA.parseSigHex=function(a){var b=KJUR.crypto.ECDSA.parseSigHexInHexRS(a);var d=new BigInteger(b.r,16);var c=new BigInteger(b.s,16);return{r:d,s:c}};KJUR.crypto.ECDSA.parseSigHexInHexRS=function(c){if(c.substr(0,2)!="30"){throw"signature is not a ASN.1 sequence"}var b=ASN1HEX.getPosArrayOfChildren_AtObj(c,0);if(b.length!=2){throw"number of signature ASN.1 sequence elements seem wrong"}var g=b[0];var f=b[1];if(c.substr(g,2)!="02"){throw"1st item of sequene of signature is not ASN.1 integer"}if(c.substr(f,2)!="02"){throw"2nd item of sequene of signature is not ASN.1 integer"}var e=ASN1HEX.getHexOfV_AtObj(c,g);var d=ASN1HEX.getHexOfV_AtObj(c,f);return{r:e,s:d}};KJUR.crypto.ECDSA.asn1SigToConcatSig=function(c){var d=KJUR.crypto.ECDSA.parseSigHexInHexRS(c);var b=d.r;var a=d.s;if(b.substr(0,2)=="00"&&(((b.length/2)*8)%(16*8))==8){b=b.substr(2)}if(a.substr(0,2)=="00"&&(((a.length/2)*8)%(16*8))==8){a=a.substr(2)}if((((b.length/2)*8)%(16*8))!=0){throw"unknown ECDSA sig r length error"}if((((a.length/2)*8)%(16*8))!=0){throw"unknown ECDSA sig s length error"}return b+a};KJUR.crypto.ECDSA.concatSigToASN1Sig=function(a){if((((a.length/2)*8)%(16*8))!=0){throw"unknown ECDSA concatinated r-s sig length error"}var c=a.substr(0,a.length/2);var b=a.substr(a.length/2);return KJUR.crypto.ECDSA.hexRSSigToASN1Sig(c,b)};KJUR.crypto.ECDSA.hexRSSigToASN1Sig=function(b,a){var d=new BigInteger(b,16);var c=new BigInteger(a,16);return KJUR.crypto.ECDSA.biRSSigToASN1Sig(d,c)};KJUR.crypto.ECDSA.biRSSigToASN1Sig=function(e,c){var b=new KJUR.asn1.DERInteger({bigint:e});var a=new KJUR.asn1.DERInteger({bigint:c});var d=new KJUR.asn1.DERSequence({array:[b,a]});return d.getEncodedHex()}; +/*! ecparam-1.0.0.js (c) 2013 Kenji Urushima | kjur.github.com/jsrsasign/license + */ +if(typeof KJUR=="undefined"||!KJUR){KJUR={}}if(typeof KJUR.crypto=="undefined"||!KJUR.crypto){KJUR.crypto={}}KJUR.crypto.ECParameterDB=new function(){var b={};var c={};function a(d){return new BigInteger(d,16)}this.getByName=function(e){var d=e;if(typeof c[d]!="undefined"){d=c[e]}if(typeof b[d]!="undefined"){return b[d]}throw"unregistered EC curve name: "+d};this.regist=function(A,l,o,g,m,e,j,f,k,u,d,x){b[A]={};var s=a(o);var z=a(g);var y=a(m);var t=a(e);var w=a(j);var r=new ECCurveFp(s,z,y);var q=r.decodePointHex("04"+f+k);b[A]["name"]=A;b[A]["keylen"]=l;b[A]["curve"]=r;b[A]["G"]=q;b[A]["n"]=t;b[A]["h"]=w;b[A]["oid"]=d;b[A]["info"]=x;for(var v=0;v0||K.compareTo(u)>0||BigInteger.ZERO.compareTo(J)>0||J.compareTo(u)>0){throw"invalid DSA signature"}var I=J.modInverse(u);var A=D.multiply(I).mod(u);var v=K.multiply(I).mod(u);var F=G.modPow(A,z).multiply(H.modPow(v,z)).mod(z).mod(u);return F.compareTo(K)==0};this.parseASN1Signature=function(u){try{var y=new BigInteger(ASN1HEX.getVbyList(u,0,[0],"02"),16);var v=new BigInteger(ASN1HEX.getVbyList(u,0,[1],"02"),16);return[y,v]}catch(w){throw"malformed DSA signature"}};function d(E,w,B,v,u,C){var z=KJUR.crypto.Util.hashString(w,E.toLowerCase());var z=z.substr(0,u.bitLength()/4);var A=new BigInteger(z,16);var y=n(BigInteger.ONE.add(BigInteger.ONE),u.subtract(BigInteger.ONE));var F=(B.modPow(y,v)).mod(u);var D=(y.modInverse(u).multiply(A.add(C.multiply(F)))).mod(u);var G=new Array();G[0]=F;G[1]=D;return G}function r(v){var u=openpgp.config.config.prefer_hash_algorithm;switch(Math.round(v.bitLength()/8)){case 20:if(u!=2&&u>11&&u!=10&&u<8){return 2}return u;case 28:if(u>11&&u<8){return 11}return u;case 32:if(u>10&&u<8){return 8}return u;default:util.print_debug("DSA select hash algorithm: returning null for an unknown length of q");return null}}this.select_hash_algorithm=r;function m(I,K,J,B,z,u,F,G){var C=KJUR.crypto.Util.hashString(B,I.toLowerCase());var C=C.substr(0,u.bitLength()/4);var D=new BigInteger(C,16);if(BigInteger.ZERO.compareTo(K)>0||K.compareTo(u)>0||BigInteger.ZERO.compareTo(J)>0||J.compareTo(u)>0){util.print_error("invalid DSA Signature");return null}var H=J.modInverse(u);var A=D.multiply(H).mod(u);var v=K.multiply(H).mod(u);var E=F.modPow(A,z).multiply(G.modPow(v,z)).mod(z).mod(u);return E.compareTo(K)==0}function a(z){var A=new BigInteger(z,primeCenterie);var y=j(q,512);var u=t(p,q,z);var v;do{v=new BigInteger(q.bitCount(),rand)}while(x.compareTo(BigInteger.ZERO)!=1&&x.compareTo(q)!=-1);var w=g.modPow(x,p);return{x:v,q:A,p:y,g:u,y:w}}function j(y,z,w){if(z%64!=0){return false}var u;var v;do{u=w(bitcount,true);v=u.subtract(BigInteger.ONE);u=u.subtract(v.remainder(y))}while(!u.isProbablePrime(primeCenterie)||u.bitLength()!=l);return u}function t(B,z,A,w){var u=B.subtract(BigInteger.ONE);var y=u.divide(z);var v;do{v=w(A)}while(v.compareTo(u)!=-1&&v.compareTo(BigInteger.ONE)!=1);return v.modPow(y,B)}function o(w,y,u){var v;do{v=u(y,false)}while(v.compareTo(w)!=-1&&v.compareTo(BigInteger.ZERO)!=1);return v}function i(v,w){k=o(v);var u=g.modPow(k,w).mod(v);return u}function h(B,w,y,v,z,u){var A=B(v);s=(w.modInverse(z).multiply(A.add(u.multiply(y)))).mod(z);return s}this.sign=d;this.verify=m;function n(w,u){if(u.compareTo(w)<=0){return}var v=u.subtract(w);var y=e(v.bitLength());while(y>v){y=e(v.bitLength())}return w.add(y)}function e(w){if(w<0){return null}var u=Math.floor((w+7)/8);var v=c(u);if(w%8>0){v=String.fromCharCode((Math.pow(2,w%8)-1)&v.charCodeAt(0))+v.substring(1)}return new BigInteger(f(v),16)}function c(w){var u="";for(var v=0;v=s*2){break}}var x={};x.keyhex=v.substr(0,g[o]["keylen"]*2);x.ivhex=v.substr(g[o]["keylen"]*2,g[o]["ivlen"]*2);return x};var a=function(n,t,p,u){var q=CryptoJS.enc.Base64.parse(n);var o=CryptoJS.enc.Hex.stringify(q);var s=g[t]["proc"];var r=s(o,p,u);return r};var f=function(n,q,o,s){var p=g[q]["eproc"];var r=p(n,o,s);return r};return{version:"1.0.5",getHexFromPEM:function(o,r){var p=o;if(p.indexOf("BEGIN "+r)==-1){throw"can't find PEM header: "+r}p=p.replace("-----BEGIN "+r+"-----","");p=p.replace("-----END "+r+"-----","");var q=p.replace(/\s+/g,"");var n=b64tohex(q);return n},getDecryptedKeyHexByKeyIV:function(o,r,q,p){var n=b(r);return n(o,q,p)},parsePKCS5PEM:function(n){return l(n)},getKeyAndUnusedIvByPasscodeAndIvsalt:function(o,n,p){return h(o,n,p)},decryptKeyB64:function(n,p,o,q){return a(n,p,o,q)},getDecryptedKeyHex:function(w,v){var o=l(w);var r=o.type;var p=o.cipher;var n=o.ivsalt;var q=o.data;var u=h(p,v,n);var t=u.keyhex;var s=a(q,p,t,n);return s},getRSAKeyFromEncryptedPKCS5PEM:function(p,o){var q=this.getDecryptedKeyHex(p,o);var n=new RSAKey();n.readPrivateKeyFromASN1HexString(q);return n},getEryptedPKCS5PEMFromPrvKeyHex:function(q,x,r,p){var n="";if(typeof r=="undefined"||r==null){r="AES-256-CBC"}if(typeof g[r]=="undefined"){throw"PKCS5PKEY unsupported algorithm: "+r}if(typeof p=="undefined"||p==null){var t=g[r]["ivlen"];var s=k(t);p=s.toUpperCase()}var w=h(r,x,p);var v=w.keyhex;var u=f(q,r,v,p);var o=u.replace(/(.{64})/g,"$1\r\n");var n="-----BEGIN RSA PRIVATE KEY-----\r\n";n+="Proc-Type: 4,ENCRYPTED\r\n";n+="DEK-Info: "+r+","+p+"\r\n";n+="\r\n";n+=o;n+="\r\n-----END RSA PRIVATE KEY-----\r\n";return n},getEryptedPKCS5PEMFromRSAKey:function(C,D,o,s){var A=new KJUR.asn1.DERInteger({"int":0});var v=new KJUR.asn1.DERInteger({bigint:C.n});var z=new KJUR.asn1.DERInteger({"int":C.e});var B=new KJUR.asn1.DERInteger({bigint:C.d});var t=new KJUR.asn1.DERInteger({bigint:C.p});var r=new KJUR.asn1.DERInteger({bigint:C.q});var y=new KJUR.asn1.DERInteger({bigint:C.dmp1});var u=new KJUR.asn1.DERInteger({bigint:C.dmq1});var x=new KJUR.asn1.DERInteger({bigint:C.coeff});var E=new KJUR.asn1.DERSequence({array:[A,v,z,B,t,r,y,u,x]});var w=E.getEncodedHex();return this.getEryptedPKCS5PEMFromPrvKeyHex(w,D,o,s)},newEncryptedPKCS5PEM:function(n,o,r,s){if(typeof o=="undefined"||o==null){o=1024}if(typeof r=="undefined"||r==null){r="10001"}var p=new RSAKey();p.generate(o,r);var q=null;if(typeof s=="undefined"||s==null){q=this.getEncryptedPKCS5PEMFromRSAKey(pkey,n)}else{q=this.getEncryptedPKCS5PEMFromRSAKey(pkey,n,s)}return q},getRSAKeyFromPlainPKCS8PEM:function(p){if(p.match(/ENCRYPTED/)){throw"pem shall be not ENCRYPTED"}var o=this.getHexFromPEM(p,"PRIVATE KEY");var n=this.getRSAKeyFromPlainPKCS8Hex(o);return n},getRSAKeyFromPlainPKCS8Hex:function(q){var p=ASN1HEX.getPosArrayOfChildren_AtObj(q,0);if(p.length!=3){throw"outer DERSequence shall have 3 elements: "+p.length}var o=ASN1HEX.getHexOfTLV_AtObj(q,p[1]);if(o!="300d06092a864886f70d0101010500"){throw"PKCS8 AlgorithmIdentifier is not rsaEnc: "+o}var o=ASN1HEX.getHexOfTLV_AtObj(q,p[1]);var r=ASN1HEX.getHexOfTLV_AtObj(q,p[2]);var s=ASN1HEX.getHexOfV_AtObj(r,0);var n=new RSAKey();n.readPrivateKeyFromASN1HexString(s);return n},parseHexOfEncryptedPKCS8:function(u){var q={};var p=ASN1HEX.getPosArrayOfChildren_AtObj(u,0);if(p.length!=2){throw"malformed format: SEQUENCE(0).items != 2: "+p.length}q.ciphertext=ASN1HEX.getHexOfV_AtObj(u,p[1]);var w=ASN1HEX.getPosArrayOfChildren_AtObj(u,p[0]);if(w.length!=2){throw"malformed format: SEQUENCE(0.0).items != 2: "+w.length}if(ASN1HEX.getHexOfV_AtObj(u,w[0])!="2a864886f70d01050d"){throw"this only supports pkcs5PBES2"}var n=ASN1HEX.getPosArrayOfChildren_AtObj(u,w[1]);if(w.length!=2){throw"malformed format: SEQUENCE(0.0.1).items != 2: "+n.length}var o=ASN1HEX.getPosArrayOfChildren_AtObj(u,n[1]);if(o.length!=2){throw"malformed format: SEQUENCE(0.0.1.1).items != 2: "+o.length}if(ASN1HEX.getHexOfV_AtObj(u,o[0])!="2a864886f70d0307"){throw"this only supports TripleDES"}q.encryptionSchemeAlg="TripleDES";q.encryptionSchemeIV=ASN1HEX.getHexOfV_AtObj(u,o[1]);var r=ASN1HEX.getPosArrayOfChildren_AtObj(u,n[0]);if(r.length!=2){throw"malformed format: SEQUENCE(0.0.1.0).items != 2: "+r.length}if(ASN1HEX.getHexOfV_AtObj(u,r[0])!="2a864886f70d01050c"){throw"this only supports pkcs5PBKDF2"}var v=ASN1HEX.getPosArrayOfChildren_AtObj(u,r[1]);if(v.length<2){throw"malformed format: SEQUENCE(0.0.1.0.1).items < 2: "+v.length}q.pbkdf2Salt=ASN1HEX.getHexOfV_AtObj(u,v[0]);var s=ASN1HEX.getHexOfV_AtObj(u,v[1]);try{q.pbkdf2Iter=parseInt(s,16)}catch(t){throw"malformed format pbkdf2Iter: "+s}return q},getPBKDF2KeyHexFromParam:function(s,n){var r=CryptoJS.enc.Hex.parse(s.pbkdf2Salt);var o=s.pbkdf2Iter;var q=CryptoJS.PBKDF2(n,r,{keySize:192/32,iterations:o});var p=CryptoJS.enc.Hex.stringify(q);return p},getPlainPKCS8HexFromEncryptedPKCS8PEM:function(v,w){var p=this.getHexFromPEM(v,"ENCRYPTED PRIVATE KEY");var n=this.parseHexOfEncryptedPKCS8(p);var s=PKCS5PKEY.getPBKDF2KeyHexFromParam(n,w);var t={};t.ciphertext=CryptoJS.enc.Hex.parse(n.ciphertext);var r=CryptoJS.enc.Hex.parse(s);var q=CryptoJS.enc.Hex.parse(n.encryptionSchemeIV);var u=CryptoJS.TripleDES.decrypt(t,r,{iv:q});var o=CryptoJS.enc.Hex.stringify(u);return o},getRSAKeyFromEncryptedPKCS8PEM:function(q,p){var o=this.getPlainPKCS8HexFromEncryptedPKCS8PEM(q,p);var n=this.getRSAKeyFromPlainPKCS8Hex(o);return n},getKeyFromEncryptedPKCS8PEM:function(q,o){var n=this.getPlainPKCS8HexFromEncryptedPKCS8PEM(q,o);var p=this.getKeyFromPlainPrivatePKCS8Hex(n);return p},parsePlainPrivatePKCS8Hex:function(q){var o={};o.algparam=null;if(q.substr(0,2)!="30"){throw"malformed plain PKCS8 private key(code:001)"}var p=ASN1HEX.getPosArrayOfChildren_AtObj(q,0);if(p.length!=3){throw"malformed plain PKCS8 private key(code:002)"}if(q.substr(p[1],2)!="30"){throw"malformed PKCS8 private key(code:003)"}var n=ASN1HEX.getPosArrayOfChildren_AtObj(q,p[1]);if(n.length!=2){throw"malformed PKCS8 private key(code:004)"}if(q.substr(n[0],2)!="06"){throw"malformed PKCS8 private key(code:005)"}o.algoid=ASN1HEX.getHexOfV_AtObj(q,n[0]);if(q.substr(n[1],2)=="06"){o.algparam=ASN1HEX.getHexOfV_AtObj(q,n[1])}if(q.substr(p[2],2)!="04"){throw"malformed PKCS8 private key(code:006)"}o.keyidx=ASN1HEX.getStartPosOfV_AtObj(q,p[2]);return o},getKeyFromPlainPrivatePKCS8PEM:function(o){var n=this.getHexFromPEM(o,"PRIVATE KEY");var p=this.getKeyFromPlainPrivatePKCS8Hex(n);return p},getKeyFromPlainPrivatePKCS8Hex:function(n){var p=this.parsePlainPrivatePKCS8Hex(n);if(p.algoid=="2a864886f70d010101"){this.parsePrivateRawRSAKeyHexAtObj(n,p);var o=p.key;var q=new RSAKey();q.setPrivateEx(o.n,o.e,o.d,o.p,o.q,o.dp,o.dq,o.co);return q}else{if(p.algoid=="2a8648ce3d0201"){this.parsePrivateRawECKeyHexAtObj(n,p);if(KJUR.crypto.OID.oidhex2name[p.algparam]===undefined){throw"KJUR.crypto.OID.oidhex2name undefined: "+p.algparam}var r=KJUR.crypto.OID.oidhex2name[p.algparam];var q=new KJUR.crypto.ECDSA({curve:r,prv:p.key});return q}else{throw"unsupported private key algorithm"}}},getRSAKeyFromPublicPKCS8PEM:function(o){var p=this.getHexFromPEM(o,"PUBLIC KEY");var n=this.getRSAKeyFromPublicPKCS8Hex(p);return n},getKeyFromPublicPKCS8PEM:function(o){var p=this.getHexFromPEM(o,"PUBLIC KEY");var n=this.getKeyFromPublicPKCS8Hex(p);return n},getKeyFromPublicPKCS8Hex:function(o){var n=this.parsePublicPKCS8Hex(o);if(n.algoid=="2a864886f70d010101"){var r=this.parsePublicRawRSAKeyHex(n.key);var p=new RSAKey();p.setPublic(r.n,r.e);return p}else{if(n.algoid=="2a8648ce3d0201"){if(KJUR.crypto.OID.oidhex2name[n.algparam]===undefined){throw"KJUR.crypto.OID.oidhex2name undefined: "+n.algparam}var q=KJUR.crypto.OID.oidhex2name[n.algparam];var p=new KJUR.crypto.ECDSA({curve:q,pub:n.key});return p}else{throw"unsupported public key algorithm"}}},parsePublicRawRSAKeyHex:function(p){var n={};if(p.substr(0,2)!="30"){throw"malformed RSA key(code:001)"}var o=ASN1HEX.getPosArrayOfChildren_AtObj(p,0);if(o.length!=2){throw"malformed RSA key(code:002)"}if(p.substr(o[0],2)!="02"){throw"malformed RSA key(code:003)"}n.n=ASN1HEX.getHexOfV_AtObj(p,o[0]);if(p.substr(o[1],2)!="02"){throw"malformed RSA key(code:004)"}n.e=ASN1HEX.getHexOfV_AtObj(p,o[1]);return n},parsePrivateRawRSAKeyHexAtObj:function(o,q){var p=q.keyidx;if(o.substr(p,2)!="30"){throw"malformed RSA private key(code:001)"}var n=ASN1HEX.getPosArrayOfChildren_AtObj(o,p);if(n.length!=9){throw"malformed RSA private key(code:002)"}q.key={};q.key.n=ASN1HEX.getHexOfV_AtObj(o,n[1]);q.key.e=ASN1HEX.getHexOfV_AtObj(o,n[2]);q.key.d=ASN1HEX.getHexOfV_AtObj(o,n[3]);q.key.p=ASN1HEX.getHexOfV_AtObj(o,n[4]);q.key.q=ASN1HEX.getHexOfV_AtObj(o,n[5]);q.key.dp=ASN1HEX.getHexOfV_AtObj(o,n[6]);q.key.dq=ASN1HEX.getHexOfV_AtObj(o,n[7]);q.key.co=ASN1HEX.getHexOfV_AtObj(o,n[8])},parsePrivateRawECKeyHexAtObj:function(o,q){var p=q.keyidx;if(o.substr(p,2)!="30"){throw"malformed ECC private key(code:001)"}var n=ASN1HEX.getPosArrayOfChildren_AtObj(o,p);if(n.length!=3){throw"malformed ECC private key(code:002)"}if(o.substr(n[1],2)!="04"){throw"malformed ECC private key(code:003)"}q.key=ASN1HEX.getHexOfV_AtObj(o,n[1])},parsePublicPKCS8Hex:function(q){var o={};o.algparam=null;var p=ASN1HEX.getPosArrayOfChildren_AtObj(q,0);if(p.length!=2){throw"outer DERSequence shall have 2 elements: "+p.length}var r=p[0];if(q.substr(r,2)!="30"){throw"malformed PKCS8 public key(code:001)"}var n=ASN1HEX.getPosArrayOfChildren_AtObj(q,r);if(n.length!=2){throw"malformed PKCS8 public key(code:002)"}if(q.substr(n[0],2)!="06"){throw"malformed PKCS8 public key(code:003)"}o.algoid=ASN1HEX.getHexOfV_AtObj(q,n[0]);if(q.substr(n[1],2)=="06"){o.algparam=ASN1HEX.getHexOfV_AtObj(q,n[1])}if(q.substr(p[1],2)!="03"){throw"malformed PKCS8 public key(code:004)"}o.key=ASN1HEX.getHexOfV_AtObj(q,p[1]).substr(2);return o},getRSAKeyFromPublicPKCS8Hex:function(r){var q=ASN1HEX.getPosArrayOfChildren_AtObj(r,0);if(q.length!=2){throw"outer DERSequence shall have 2 elements: "+q.length}var p=ASN1HEX.getHexOfTLV_AtObj(r,q[0]);if(p!="300d06092a864886f70d0101010500"){throw"PKCS8 AlgorithmId is not rsaEncryption"}if(r.substr(q[1],2)!="03"){throw"PKCS8 Public Key is not BITSTRING encapslated."}var t=ASN1HEX.getStartPosOfV_AtObj(r,q[1])+2;if(r.substr(t,2)!="30"){throw"PKCS8 Public Key is not SEQUENCE."}var n=ASN1HEX.getPosArrayOfChildren_AtObj(r,t);if(n.length!=2){throw"inner DERSequence shall have 2 elements: "+n.length}if(r.substr(n[0],2)!="02"){throw"N is not ASN.1 INTEGER"}if(r.substr(n[1],2)!="02"){throw"E is not ASN.1 INTEGER"}var u=ASN1HEX.getHexOfV_AtObj(r,n[0]);var s=ASN1HEX.getHexOfV_AtObj(r,n[1]);var o=new RSAKey();o.setPublic(u,s);return o},}}(); +/*! keyutil-1.0.12.js (c) 2013-2015 Kenji Urushima | kjur.github.com/jsrsasign/license + */ +var KEYUTIL=function(){var d=function(p,r,q){return k(CryptoJS.AES,p,r,q)};var e=function(p,r,q){return k(CryptoJS.TripleDES,p,r,q)};var a=function(p,r,q){return k(CryptoJS.DES,p,r,q)};var k=function(s,x,u,q){var r=CryptoJS.enc.Hex.parse(x);var w=CryptoJS.enc.Hex.parse(u);var p=CryptoJS.enc.Hex.parse(q);var t={};t.key=w;t.iv=p;t.ciphertext=r;var v=s.decrypt(t,w,{iv:p});return CryptoJS.enc.Hex.stringify(v)};var l=function(p,r,q){return g(CryptoJS.AES,p,r,q)};var o=function(p,r,q){return g(CryptoJS.TripleDES,p,r,q)};var f=function(p,r,q){return g(CryptoJS.DES,p,r,q)};var g=function(t,y,v,q){var s=CryptoJS.enc.Hex.parse(y);var x=CryptoJS.enc.Hex.parse(v);var p=CryptoJS.enc.Hex.parse(q);var w=t.encrypt(s,x,{iv:p});var r=CryptoJS.enc.Hex.parse(w.toString());var u=CryptoJS.enc.Base64.stringify(r);return u};var i={"AES-256-CBC":{proc:d,eproc:l,keylen:32,ivlen:16},"AES-192-CBC":{proc:d,eproc:l,keylen:24,ivlen:16},"AES-128-CBC":{proc:d,eproc:l,keylen:16,ivlen:16},"DES-EDE3-CBC":{proc:e,eproc:o,keylen:24,ivlen:8},"DES-CBC":{proc:a,eproc:f,keylen:8,ivlen:8}};var c=function(p){return i[p]["proc"]};var m=function(p){var r=CryptoJS.lib.WordArray.random(p);var q=CryptoJS.enc.Hex.stringify(r);return q};var n=function(t){var u={};if(t.match(new RegExp("DEK-Info: ([^,]+),([0-9A-Fa-f]+)","m"))){u.cipher=RegExp.$1;u.ivsalt=RegExp.$2}if(t.match(new RegExp("-----BEGIN ([A-Z]+) PRIVATE KEY-----"))){u.type=RegExp.$1}var r=-1;var v=0;if(t.indexOf("\r\n\r\n")!=-1){r=t.indexOf("\r\n\r\n");v=2}if(t.indexOf("\n\n")!=-1){r=t.indexOf("\n\n");v=1}var q=t.indexOf("-----END");if(r!=-1&&q!=-1){var p=t.substring(r+v*2,q-v);p=p.replace(/\s+/g,"");u.data=p}return u};var j=function(q,y,p){var v=p.substring(0,16);var t=CryptoJS.enc.Hex.parse(v);var r=CryptoJS.enc.Utf8.parse(y);var u=i[q]["keylen"]+i[q]["ivlen"];var x="";var w=null;for(;;){var s=CryptoJS.algo.MD5.create();if(w!=null){s.update(w)}s.update(r);s.update(t);w=s.finalize();x=x+CryptoJS.enc.Hex.stringify(w);if(x.length>=u*2){break}}var z={};z.keyhex=x.substr(0,i[q]["keylen"]*2);z.ivhex=x.substr(i[q]["keylen"]*2,i[q]["ivlen"]*2);return z};var b=function(p,v,r,w){var s=CryptoJS.enc.Base64.parse(p);var q=CryptoJS.enc.Hex.stringify(s);var u=i[v]["proc"];var t=u(q,r,w);return t};var h=function(p,s,q,u){var r=i[s]["eproc"];var t=r(p,q,u);return t};return{version:"1.0.0",getHexFromPEM:function(q,u){var r=q;if(r.indexOf("-----BEGIN ")==-1){throw"can't find PEM header: "+u}if(typeof u=="string"&&u!=""){r=r.replace("-----BEGIN "+u+"-----","");r=r.replace("-----END "+u+"-----","")}else{r=r.replace(/-----BEGIN [^-]+-----/,"");r=r.replace(/-----END [^-]+-----/,"")}var t=r.replace(/\s+/g,"");var p=b64tohex(t);return p},getDecryptedKeyHexByKeyIV:function(q,t,s,r){var p=c(t);return p(q,s,r)},parsePKCS5PEM:function(p){return n(p)},getKeyAndUnusedIvByPasscodeAndIvsalt:function(q,p,r){return j(q,p,r)},decryptKeyB64:function(p,r,q,s){return b(p,r,q,s)},getDecryptedKeyHex:function(y,x){var q=n(y);var t=q.type;var r=q.cipher;var p=q.ivsalt;var s=q.data;var w=j(r,x,p);var v=w.keyhex;var u=b(s,r,v,p);return u},getRSAKeyFromEncryptedPKCS5PEM:function(r,q){var s=this.getDecryptedKeyHex(r,q);var p=new RSAKey();p.readPrivateKeyFromASN1HexString(s);return p},getEncryptedPKCS5PEMFromPrvKeyHex:function(x,s,A,t,r){var p="";if(typeof t=="undefined"||t==null){t="AES-256-CBC"}if(typeof i[t]=="undefined"){throw"KEYUTIL unsupported algorithm: "+t}if(typeof r=="undefined"||r==null){var v=i[t]["ivlen"];var u=m(v);r=u.toUpperCase()}var z=j(t,A,r);var y=z.keyhex;var w=h(s,t,y,r);var q=w.replace(/(.{64})/g,"$1\r\n");var p="-----BEGIN "+x+" PRIVATE KEY-----\r\n";p+="Proc-Type: 4,ENCRYPTED\r\n";p+="DEK-Info: "+t+","+r+"\r\n";p+="\r\n";p+=q;p+="\r\n-----END "+x+" PRIVATE KEY-----\r\n";return p},getEncryptedPKCS5PEMFromRSAKey:function(D,E,r,t){var B=new KJUR.asn1.DERInteger({"int":0});var w=new KJUR.asn1.DERInteger({bigint:D.n});var A=new KJUR.asn1.DERInteger({"int":D.e});var C=new KJUR.asn1.DERInteger({bigint:D.d});var u=new KJUR.asn1.DERInteger({bigint:D.p});var s=new KJUR.asn1.DERInteger({bigint:D.q});var z=new KJUR.asn1.DERInteger({bigint:D.dmp1});var v=new KJUR.asn1.DERInteger({bigint:D.dmq1});var y=new KJUR.asn1.DERInteger({bigint:D.coeff});var F=new KJUR.asn1.DERSequence({array:[B,w,A,C,u,s,z,v,y]});var x=F.getEncodedHex();return this.getEncryptedPKCS5PEMFromPrvKeyHex("RSA",x,E,r,t)},newEncryptedPKCS5PEM:function(p,q,t,u){if(typeof q=="undefined"||q==null){q=1024}if(typeof t=="undefined"||t==null){t="10001"}var r=new RSAKey();r.generate(q,t);var s=null;if(typeof u=="undefined"||u==null){s=this.getEncryptedPKCS5PEMFromRSAKey(r,p)}else{s=this.getEncryptedPKCS5PEMFromRSAKey(r,p,u)}return s},getRSAKeyFromPlainPKCS8PEM:function(r){if(r.match(/ENCRYPTED/)){throw"pem shall be not ENCRYPTED"}var q=this.getHexFromPEM(r,"PRIVATE KEY");var p=this.getRSAKeyFromPlainPKCS8Hex(q);return p},getRSAKeyFromPlainPKCS8Hex:function(s){var r=ASN1HEX.getPosArrayOfChildren_AtObj(s,0);if(r.length!=3){throw"outer DERSequence shall have 3 elements: "+r.length}var q=ASN1HEX.getHexOfTLV_AtObj(s,r[1]);if(q!="300d06092a864886f70d0101010500"){throw"PKCS8 AlgorithmIdentifier is not rsaEnc: "+q}var q=ASN1HEX.getHexOfTLV_AtObj(s,r[1]);var t=ASN1HEX.getHexOfTLV_AtObj(s,r[2]);var u=ASN1HEX.getHexOfV_AtObj(t,0);var p=new RSAKey();p.readPrivateKeyFromASN1HexString(u);return p},parseHexOfEncryptedPKCS8:function(w){var s={};var r=ASN1HEX.getPosArrayOfChildren_AtObj(w,0);if(r.length!=2){throw"malformed format: SEQUENCE(0).items != 2: "+r.length}s.ciphertext=ASN1HEX.getHexOfV_AtObj(w,r[1]);var y=ASN1HEX.getPosArrayOfChildren_AtObj(w,r[0]);if(y.length!=2){throw"malformed format: SEQUENCE(0.0).items != 2: "+y.length}if(ASN1HEX.getHexOfV_AtObj(w,y[0])!="2a864886f70d01050d"){throw"this only supports pkcs5PBES2"}var p=ASN1HEX.getPosArrayOfChildren_AtObj(w,y[1]);if(y.length!=2){throw"malformed format: SEQUENCE(0.0.1).items != 2: "+p.length}var q=ASN1HEX.getPosArrayOfChildren_AtObj(w,p[1]);if(q.length!=2){throw"malformed format: SEQUENCE(0.0.1.1).items != 2: "+q.length}if(ASN1HEX.getHexOfV_AtObj(w,q[0])!="2a864886f70d0307"){throw"this only supports TripleDES"}s.encryptionSchemeAlg="TripleDES";s.encryptionSchemeIV=ASN1HEX.getHexOfV_AtObj(w,q[1]);var t=ASN1HEX.getPosArrayOfChildren_AtObj(w,p[0]);if(t.length!=2){throw"malformed format: SEQUENCE(0.0.1.0).items != 2: "+t.length}if(ASN1HEX.getHexOfV_AtObj(w,t[0])!="2a864886f70d01050c"){throw"this only supports pkcs5PBKDF2"}var x=ASN1HEX.getPosArrayOfChildren_AtObj(w,t[1]);if(x.length<2){throw"malformed format: SEQUENCE(0.0.1.0.1).items < 2: "+x.length}s.pbkdf2Salt=ASN1HEX.getHexOfV_AtObj(w,x[0]);var u=ASN1HEX.getHexOfV_AtObj(w,x[1]);try{s.pbkdf2Iter=parseInt(u,16)}catch(v){throw"malformed format pbkdf2Iter: "+u}return s},getPBKDF2KeyHexFromParam:function(u,p){var t=CryptoJS.enc.Hex.parse(u.pbkdf2Salt);var q=u.pbkdf2Iter;var s=CryptoJS.PBKDF2(p,t,{keySize:192/32,iterations:q});var r=CryptoJS.enc.Hex.stringify(s);return r},getPlainPKCS8HexFromEncryptedPKCS8PEM:function(x,y){var r=this.getHexFromPEM(x,"ENCRYPTED PRIVATE KEY");var p=this.parseHexOfEncryptedPKCS8(r);var u=KEYUTIL.getPBKDF2KeyHexFromParam(p,y);var v={};v.ciphertext=CryptoJS.enc.Hex.parse(p.ciphertext);var t=CryptoJS.enc.Hex.parse(u);var s=CryptoJS.enc.Hex.parse(p.encryptionSchemeIV);var w=CryptoJS.TripleDES.decrypt(v,t,{iv:s});var q=CryptoJS.enc.Hex.stringify(w);return q},getRSAKeyFromEncryptedPKCS8PEM:function(s,r){var q=this.getPlainPKCS8HexFromEncryptedPKCS8PEM(s,r);var p=this.getRSAKeyFromPlainPKCS8Hex(q);return p},getKeyFromEncryptedPKCS8PEM:function(s,q){var p=this.getPlainPKCS8HexFromEncryptedPKCS8PEM(s,q);var r=this.getKeyFromPlainPrivatePKCS8Hex(p);return r},parsePlainPrivatePKCS8Hex:function(s){var q={};q.algparam=null;if(s.substr(0,2)!="30"){throw"malformed plain PKCS8 private key(code:001)"}var r=ASN1HEX.getPosArrayOfChildren_AtObj(s,0);if(r.length!=3){throw"malformed plain PKCS8 private key(code:002)"}if(s.substr(r[1],2)!="30"){throw"malformed PKCS8 private key(code:003)"}var p=ASN1HEX.getPosArrayOfChildren_AtObj(s,r[1]);if(p.length!=2){throw"malformed PKCS8 private key(code:004)"}if(s.substr(p[0],2)!="06"){throw"malformed PKCS8 private key(code:005)"}q.algoid=ASN1HEX.getHexOfV_AtObj(s,p[0]);if(s.substr(p[1],2)=="06"){q.algparam=ASN1HEX.getHexOfV_AtObj(s,p[1])}if(s.substr(r[2],2)!="04"){throw"malformed PKCS8 private key(code:006)"}q.keyidx=ASN1HEX.getStartPosOfV_AtObj(s,r[2]);return q},getKeyFromPlainPrivatePKCS8PEM:function(q){var p=this.getHexFromPEM(q,"PRIVATE KEY");var r=this.getKeyFromPlainPrivatePKCS8Hex(p);return r},getKeyFromPlainPrivatePKCS8Hex:function(p){var w=this.parsePlainPrivatePKCS8Hex(p);if(w.algoid=="2a864886f70d010101"){this.parsePrivateRawRSAKeyHexAtObj(p,w);var u=w.key;var z=new RSAKey();z.setPrivateEx(u.n,u.e,u.d,u.p,u.q,u.dp,u.dq,u.co);return z}else{if(w.algoid=="2a8648ce3d0201"){this.parsePrivateRawECKeyHexAtObj(p,w);if(KJUR.crypto.OID.oidhex2name[w.algparam]===undefined){throw"KJUR.crypto.OID.oidhex2name undefined: "+w.algparam}var v=KJUR.crypto.OID.oidhex2name[w.algparam];var z=new KJUR.crypto.ECDSA({curve:v});z.setPublicKeyHex(w.pubkey);z.setPrivateKeyHex(w.key);z.isPublic=false;return z}else{if(w.algoid=="2a8648ce380401"){var t=ASN1HEX.getVbyList(p,0,[1,1,0],"02");var s=ASN1HEX.getVbyList(p,0,[1,1,1],"02");var y=ASN1HEX.getVbyList(p,0,[1,1,2],"02");var B=ASN1HEX.getVbyList(p,0,[2,0],"02");var r=new BigInteger(t,16);var q=new BigInteger(s,16);var x=new BigInteger(y,16);var A=new BigInteger(B,16);var z=new KJUR.crypto.DSA();z.setPrivate(r,q,x,null,A);return z}else{throw"unsupported private key algorithm"}}}},getRSAKeyFromPublicPKCS8PEM:function(q){var r=this.getHexFromPEM(q,"PUBLIC KEY");var p=this.getRSAKeyFromPublicPKCS8Hex(r);return p},getKeyFromPublicPKCS8PEM:function(q){var r=this.getHexFromPEM(q,"PUBLIC KEY");var p=this.getKeyFromPublicPKCS8Hex(r);return p},getKeyFromPublicPKCS8Hex:function(q){var p=this.parsePublicPKCS8Hex(q);if(p.algoid=="2a864886f70d010101"){var u=this.parsePublicRawRSAKeyHex(p.key);var r=new RSAKey();r.setPublic(u.n,u.e);return r}else{if(p.algoid=="2a8648ce3d0201"){if(KJUR.crypto.OID.oidhex2name[p.algparam]===undefined){throw"KJUR.crypto.OID.oidhex2name undefined: "+p.algparam}var s=KJUR.crypto.OID.oidhex2name[p.algparam];var r=new KJUR.crypto.ECDSA({curve:s,pub:p.key});return r}else{if(p.algoid=="2a8648ce380401"){var t=p.algparam;var v=ASN1HEX.getHexOfV_AtObj(p.key,0);var r=new KJUR.crypto.DSA();r.setPublic(new BigInteger(t.p,16),new BigInteger(t.q,16),new BigInteger(t.g,16),new BigInteger(v,16));return r}else{throw"unsupported public key algorithm"}}}},parsePublicRawRSAKeyHex:function(r){var p={};if(r.substr(0,2)!="30"){throw"malformed RSA key(code:001)"}var q=ASN1HEX.getPosArrayOfChildren_AtObj(r,0);if(q.length!=2){throw"malformed RSA key(code:002)"}if(r.substr(q[0],2)!="02"){throw"malformed RSA key(code:003)"}p.n=ASN1HEX.getHexOfV_AtObj(r,q[0]);if(r.substr(q[1],2)!="02"){throw"malformed RSA key(code:004)"}p.e=ASN1HEX.getHexOfV_AtObj(r,q[1]);return p},parsePrivateRawRSAKeyHexAtObj:function(q,s){var r=s.keyidx;if(q.substr(r,2)!="30"){throw"malformed RSA private key(code:001)"}var p=ASN1HEX.getPosArrayOfChildren_AtObj(q,r);if(p.length!=9){throw"malformed RSA private key(code:002)"}s.key={};s.key.n=ASN1HEX.getHexOfV_AtObj(q,p[1]);s.key.e=ASN1HEX.getHexOfV_AtObj(q,p[2]);s.key.d=ASN1HEX.getHexOfV_AtObj(q,p[3]);s.key.p=ASN1HEX.getHexOfV_AtObj(q,p[4]);s.key.q=ASN1HEX.getHexOfV_AtObj(q,p[5]);s.key.dp=ASN1HEX.getHexOfV_AtObj(q,p[6]);s.key.dq=ASN1HEX.getHexOfV_AtObj(q,p[7]);s.key.co=ASN1HEX.getHexOfV_AtObj(q,p[8])},parsePrivateRawECKeyHexAtObj:function(p,t){var q=t.keyidx;var r=ASN1HEX.getVbyList(p,q,[1],"04");var s=ASN1HEX.getVbyList(p,q,[2,0],"03").substr(2);t.key=r;t.pubkey=s},parsePublicPKCS8Hex:function(s){var q={};q.algparam=null;var r=ASN1HEX.getPosArrayOfChildren_AtObj(s,0);if(r.length!=2){throw"outer DERSequence shall have 2 elements: "+r.length}var t=r[0];if(s.substr(t,2)!="30"){throw"malformed PKCS8 public key(code:001)"}var p=ASN1HEX.getPosArrayOfChildren_AtObj(s,t);if(p.length!=2){throw"malformed PKCS8 public key(code:002)"}if(s.substr(p[0],2)!="06"){throw"malformed PKCS8 public key(code:003)"}q.algoid=ASN1HEX.getHexOfV_AtObj(s,p[0]);if(s.substr(p[1],2)=="06"){q.algparam=ASN1HEX.getHexOfV_AtObj(s,p[1])}else{if(s.substr(p[1],2)=="30"){q.algparam={};q.algparam.p=ASN1HEX.getVbyList(s,p[1],[0],"02");q.algparam.q=ASN1HEX.getVbyList(s,p[1],[1],"02");q.algparam.g=ASN1HEX.getVbyList(s,p[1],[2],"02")}}if(s.substr(r[1],2)!="03"){throw"malformed PKCS8 public key(code:004)"}q.key=ASN1HEX.getHexOfV_AtObj(s,r[1]).substr(2);return q},getRSAKeyFromPublicPKCS8Hex:function(t){var s=ASN1HEX.getPosArrayOfChildren_AtObj(t,0);if(s.length!=2){throw"outer DERSequence shall have 2 elements: "+s.length}var r=ASN1HEX.getHexOfTLV_AtObj(t,s[0]);if(r!="300d06092a864886f70d0101010500"){throw"PKCS8 AlgorithmId is not rsaEncryption"}if(t.substr(s[1],2)!="03"){throw"PKCS8 Public Key is not BITSTRING encapslated."}var v=ASN1HEX.getStartPosOfV_AtObj(t,s[1])+2;if(t.substr(v,2)!="30"){throw"PKCS8 Public Key is not SEQUENCE."}var p=ASN1HEX.getPosArrayOfChildren_AtObj(t,v);if(p.length!=2){throw"inner DERSequence shall have 2 elements: "+p.length}if(t.substr(p[0],2)!="02"){throw"N is not ASN.1 INTEGER"}if(t.substr(p[1],2)!="02"){throw"E is not ASN.1 INTEGER"}var w=ASN1HEX.getHexOfV_AtObj(t,p[0]);var u=ASN1HEX.getHexOfV_AtObj(t,p[1]);var q=new RSAKey();q.setPublic(w,u);return q},}}();KEYUTIL.getKey=function(f,e,h){if(typeof RSAKey!="undefined"&&f instanceof RSAKey){return f}if(typeof KJUR.crypto.ECDSA!="undefined"&&f instanceof KJUR.crypto.ECDSA){return f}if(typeof KJUR.crypto.DSA!="undefined"&&f instanceof KJUR.crypto.DSA){return f}if(f.curve!==undefined&&f.xy!==undefined&&f.d===undefined){return new KJUR.crypto.ECDSA({pub:f.xy,curve:f.curve})}if(f.curve!==undefined&&f.d!==undefined){return new KJUR.crypto.ECDSA({prv:f.d,curve:f.curve})}if(f.kty===undefined&&f.n!==undefined&&f.e!==undefined&&f.d===undefined){var w=new RSAKey();w.setPublic(f.n,f.e);return w}if(f.kty===undefined&&f.n!==undefined&&f.e!==undefined&&f.d!==undefined&&f.p!==undefined&&f.q!==undefined&&f.dp!==undefined&&f.dq!==undefined&&f.co!==undefined&&f.qi===undefined){var w=new RSAKey();w.setPrivateEx(f.n,f.e,f.d,f.p,f.q,f.dp,f.dq,f.co);return w}if(f.kty===undefined&&f.n!==undefined&&f.e!==undefined&&f.d!==undefined&&f.p===undefined){var w=new RSAKey();w.setPrivate(f.n,f.e,f.d);return w}if(f.p!==undefined&&f.q!==undefined&&f.g!==undefined&&f.y!==undefined&&f.x===undefined){var w=new KJUR.crypto.DSA();w.setPublic(f.p,f.q,f.g,f.y);return w}if(f.p!==undefined&&f.q!==undefined&&f.g!==undefined&&f.y!==undefined&&f.x!==undefined){var w=new KJUR.crypto.DSA();w.setPrivate(f.p,f.q,f.g,f.y,f.x);return w}if(f.kty==="RSA"&&f.n!==undefined&&f.e!==undefined&&f.d===undefined){var w=new RSAKey();w.setPublic(b64utohex(f.n),b64utohex(f.e));return w}if(f.kty==="RSA"&&f.n!==undefined&&f.e!==undefined&&f.d!==undefined&&f.p!==undefined&&f.q!==undefined&&f.dp!==undefined&&f.dq!==undefined&&f.qi!==undefined){var w=new RSAKey();w.setPrivateEx(b64utohex(f.n),b64utohex(f.e),b64utohex(f.d),b64utohex(f.p),b64utohex(f.q),b64utohex(f.dp),b64utohex(f.dq),b64utohex(f.qi));return w}if(f.kty==="RSA"&&f.n!==undefined&&f.e!==undefined&&f.d!==undefined){var w=new RSAKey();w.setPrivate(b64utohex(f.n),b64utohex(f.e),b64utohex(f.d));return w}if(f.kty==="EC"&&f.crv!==undefined&&f.x!==undefined&&f.y!==undefined&&f.d===undefined){var d=new KJUR.crypto.ECDSA({curve:f.crv});var l=d.ecparams.keylen/4;var r=("0000000000"+b64utohex(f.x)).slice(-l);var n=("0000000000"+b64utohex(f.y)).slice(-l);var m="04"+r+n;d.setPublicKeyHex(m);return d}if(f.kty==="EC"&&f.crv!==undefined&&f.x!==undefined&&f.y!==undefined&&f.d!==undefined){var d=new KJUR.crypto.ECDSA({curve:f.crv});var l=d.ecparams.keylen/4;var a=("0000000000"+b64utohex(f.d)).slice(-l);d.setPrivateKeyHex(a);return d}if(f.indexOf("-END CERTIFICATE-",0)!=-1||f.indexOf("-END X509 CERTIFICATE-",0)!=-1||f.indexOf("-END TRUSTED CERTIFICATE-",0)!=-1){return X509.getPublicKeyFromCertPEM(f)}if(h==="pkcs8pub"){return KEYUTIL.getKeyFromPublicPKCS8Hex(f)}if(f.indexOf("-END PUBLIC KEY-")!=-1){return KEYUTIL.getKeyFromPublicPKCS8PEM(f)}if(h==="pkcs5prv"){var w=new RSAKey();w.readPrivateKeyFromASN1HexString(f);return w}if(h==="pkcs5prv"){var w=new RSAKey();w.readPrivateKeyFromASN1HexString(f);return w}if(f.indexOf("-END RSA PRIVATE KEY-")!=-1&&f.indexOf("4,ENCRYPTED")==-1){var i=KEYUTIL.getHexFromPEM(f,"RSA PRIVATE KEY");return KEYUTIL.getKey(i,null,"pkcs5prv")}if(f.indexOf("-END DSA PRIVATE KEY-")!=-1&&f.indexOf("4,ENCRYPTED")==-1){var u=this.getHexFromPEM(f,"DSA PRIVATE KEY");var t=ASN1HEX.getVbyList(u,0,[1],"02");var s=ASN1HEX.getVbyList(u,0,[2],"02");var v=ASN1HEX.getVbyList(u,0,[3],"02");var j=ASN1HEX.getVbyList(u,0,[4],"02");var k=ASN1HEX.getVbyList(u,0,[5],"02");var w=new KJUR.crypto.DSA();w.setPrivate(new BigInteger(t,16),new BigInteger(s,16),new BigInteger(v,16),new BigInteger(j,16),new BigInteger(k,16));return w}if(f.indexOf("-END PRIVATE KEY-")!=-1){return KEYUTIL.getKeyFromPlainPrivatePKCS8PEM(f)}if(f.indexOf("-END RSA PRIVATE KEY-")!=-1&&f.indexOf("4,ENCRYPTED")!=-1){return KEYUTIL.getRSAKeyFromEncryptedPKCS5PEM(f,e)}if(f.indexOf("-END EC PRIVATE KEY-")!=-1&&f.indexOf("4,ENCRYPTED")!=-1){var u=KEYUTIL.getDecryptedKeyHex(f,e);var w=ASN1HEX.getVbyList(u,0,[1],"04");var c=ASN1HEX.getVbyList(u,0,[2,0],"06");var o=ASN1HEX.getVbyList(u,0,[3,0],"03").substr(2);var b="";if(KJUR.crypto.OID.oidhex2name[c]!==undefined){b=KJUR.crypto.OID.oidhex2name[c]}else{throw"undefined OID(hex) in KJUR.crypto.OID: "+c}var d=new KJUR.crypto.ECDSA({name:b});d.setPublicKeyHex(o);d.setPrivateKeyHex(w);d.isPublic=false;return d}if(f.indexOf("-END DSA PRIVATE KEY-")!=-1&&f.indexOf("4,ENCRYPTED")!=-1){var u=KEYUTIL.getDecryptedKeyHex(f,e);var t=ASN1HEX.getVbyList(u,0,[1],"02");var s=ASN1HEX.getVbyList(u,0,[2],"02");var v=ASN1HEX.getVbyList(u,0,[3],"02");var j=ASN1HEX.getVbyList(u,0,[4],"02");var k=ASN1HEX.getVbyList(u,0,[5],"02");var w=new KJUR.crypto.DSA();w.setPrivate(new BigInteger(t,16),new BigInteger(s,16),new BigInteger(v,16),new BigInteger(j,16),new BigInteger(k,16));return w}if(f.indexOf("-END ENCRYPTED PRIVATE KEY-")!=-1){return KEYUTIL.getKeyFromEncryptedPKCS8PEM(f,e)}throw"not supported argument"};KEYUTIL.generateKeypair=function(a,c){if(a=="RSA"){var b=c;var h=new RSAKey();h.generate(b,"10001");h.isPrivate=true;h.isPublic=true;var f=new RSAKey();var e=h.n.toString(16);var i=h.e.toString(16);f.setPublic(e,i);f.isPrivate=false;f.isPublic=true;var k={};k.prvKeyObj=h;k.pubKeyObj=f;return k}else{if(a=="EC"){var d=c;var g=new KJUR.crypto.ECDSA({curve:d});var j=g.generateKeyPairHex();var h=new KJUR.crypto.ECDSA({curve:d});h.setPrivateKeyHex(j.ecprvhex);h.isPrivate=true;h.isPublic=false;var f=new KJUR.crypto.ECDSA({curve:d});f.setPublicKeyHex(j.ecpubhex);f.isPrivate=false;f.isPublic=true;var k={};k.prvKeyObj=h;k.pubKeyObj=f;return k}else{throw"unknown algorithm: "+a}}};KEYUTIL.getPEM=function(a,r,o,g,j){var v=KJUR.asn1;var u=KJUR.crypto;function p(s){var w=KJUR.asn1.ASN1Util.newObject({seq:[{"int":0},{"int":{bigint:s.n}},{"int":s.e},{"int":{bigint:s.d}},{"int":{bigint:s.p}},{"int":{bigint:s.q}},{"int":{bigint:s.dmp1}},{"int":{bigint:s.dmq1}},{"int":{bigint:s.coeff}}]});return w}function q(w){var s=KJUR.asn1.ASN1Util.newObject({seq:[{"int":1},{octstr:{hex:w.prvKeyHex}},{tag:["a0",true,{oid:{name:w.curveName}}]},{tag:["a1",true,{bitstr:{hex:"00"+w.pubKeyHex}}]}]});return s}function n(s){var w=KJUR.asn1.ASN1Util.newObject({seq:[{"int":0},{"int":{bigint:s.p}},{"int":{bigint:s.q}},{"int":{bigint:s.g}},{"int":{bigint:s.y}},{"int":{bigint:s.x}}]});return w}if(((typeof RSAKey!="undefined"&&a instanceof RSAKey)||(typeof u.DSA!="undefined"&&a instanceof u.DSA)||(typeof u.ECDSA!="undefined"&&a instanceof u.ECDSA))&&a.isPublic==true&&(r===undefined||r=="PKCS8PUB")){var t=new KJUR.asn1.x509.SubjectPublicKeyInfo(a);var m=t.getEncodedHex();return v.ASN1Util.getPEMStringFromHex(m,"PUBLIC KEY")}if(r=="PKCS1PRV"&&typeof RSAKey!="undefined"&&a instanceof RSAKey&&(o===undefined||o==null)&&a.isPrivate==true){var t=p(a);var m=t.getEncodedHex();return v.ASN1Util.getPEMStringFromHex(m,"RSA PRIVATE KEY")}if(r=="PKCS1PRV"&&typeof RSAKey!="undefined"&&a instanceof KJUR.crypto.ECDSA&&(o===undefined||o==null)&&a.isPrivate==true){var f=new KJUR.asn1.DERObjectIdentifier({name:a.curveName});var l=f.getEncodedHex();var e=q(a);var k=e.getEncodedHex();var i="";i+=v.ASN1Util.getPEMStringFromHex(l,"EC PARAMETERS");i+=v.ASN1Util.getPEMStringFromHex(k,"EC PRIVATE KEY");return i}if(r=="PKCS1PRV"&&typeof KJUR.crypto.DSA!="undefined"&&a instanceof KJUR.crypto.DSA&&(o===undefined||o==null)&&a.isPrivate==true){var t=n(a);var m=t.getEncodedHex();return v.ASN1Util.getPEMStringFromHex(m,"DSA PRIVATE KEY")}if(r=="PKCS5PRV"&&typeof RSAKey!="undefined"&&a instanceof RSAKey&&(o!==undefined&&o!=null)&&a.isPrivate==true){var t=p(a);var m=t.getEncodedHex();if(g===undefined){g="DES-EDE3-CBC"}return this.getEncryptedPKCS5PEMFromPrvKeyHex("RSA",m,o,g)}if(r=="PKCS5PRV"&&typeof KJUR.crypto.ECDSA!="undefined"&&a instanceof KJUR.crypto.ECDSA&&(o!==undefined&&o!=null)&&a.isPrivate==true){var t=q(a);var m=t.getEncodedHex();if(g===undefined){g="DES-EDE3-CBC"}return this.getEncryptedPKCS5PEMFromPrvKeyHex("EC",m,o,g)}if(r=="PKCS5PRV"&&typeof KJUR.crypto.DSA!="undefined"&&a instanceof KJUR.crypto.DSA&&(o!==undefined&&o!=null)&&a.isPrivate==true){var t=n(a);var m=t.getEncodedHex();if(g===undefined){g="DES-EDE3-CBC"}return this.getEncryptedPKCS5PEMFromPrvKeyHex("DSA",m,o,g)}var h=function(w,s){var y=b(w,s);var x=new KJUR.asn1.ASN1Util.newObject({seq:[{seq:[{oid:{name:"pkcs5PBES2"}},{seq:[{seq:[{oid:{name:"pkcs5PBKDF2"}},{seq:[{octstr:{hex:y.pbkdf2Salt}},{"int":y.pbkdf2Iter}]}]},{seq:[{oid:{name:"des-EDE3-CBC"}},{octstr:{hex:y.encryptionSchemeIV}}]}]}]},{octstr:{hex:y.ciphertext}}]});return x.getEncodedHex()};var b=function(D,E){var x=100;var C=CryptoJS.lib.WordArray.random(8);var B="DES-EDE3-CBC";var s=CryptoJS.lib.WordArray.random(8);var y=CryptoJS.PBKDF2(E,C,{keySize:192/32,iterations:x});var z=CryptoJS.enc.Hex.parse(D);var A=CryptoJS.TripleDES.encrypt(z,y,{iv:s})+"";var w={};w.ciphertext=A;w.pbkdf2Salt=CryptoJS.enc.Hex.stringify(C);w.pbkdf2Iter=x;w.encryptionSchemeAlg=B;w.encryptionSchemeIV=CryptoJS.enc.Hex.stringify(s);return w};if(r=="PKCS8PRV"&&typeof RSAKey!="undefined"&&a instanceof RSAKey&&a.isPrivate==true){var d=p(a);var c=d.getEncodedHex();var t=KJUR.asn1.ASN1Util.newObject({seq:[{"int":0},{seq:[{oid:{name:"rsaEncryption"}},{"null":true}]},{octstr:{hex:c}}]});var m=t.getEncodedHex();if(o===undefined||o==null){return v.ASN1Util.getPEMStringFromHex(m,"PRIVATE KEY")}else{var k=h(m,o);return v.ASN1Util.getPEMStringFromHex(k,"ENCRYPTED PRIVATE KEY")}}if(r=="PKCS8PRV"&&typeof KJUR.crypto.ECDSA!="undefined"&&a instanceof KJUR.crypto.ECDSA&&a.isPrivate==true){var d=new KJUR.asn1.ASN1Util.newObject({seq:[{"int":1},{octstr:{hex:a.prvKeyHex}},{tag:["a1",true,{bitstr:{hex:"00"+a.pubKeyHex}}]}]});var c=d.getEncodedHex();var t=KJUR.asn1.ASN1Util.newObject({seq:[{"int":0},{seq:[{oid:{name:"ecPublicKey"}},{oid:{name:a.curveName}}]},{octstr:{hex:c}}]});var m=t.getEncodedHex();if(o===undefined||o==null){return v.ASN1Util.getPEMStringFromHex(m,"PRIVATE KEY")}else{var k=h(m,o);return v.ASN1Util.getPEMStringFromHex(k,"ENCRYPTED PRIVATE KEY")}}if(r=="PKCS8PRV"&&typeof KJUR.crypto.DSA!="undefined"&&a instanceof KJUR.crypto.DSA&&a.isPrivate==true){var d=new KJUR.asn1.DERInteger({bigint:a.x});var c=d.getEncodedHex();var t=KJUR.asn1.ASN1Util.newObject({seq:[{"int":0},{seq:[{oid:{name:"dsa"}},{seq:[{"int":{bigint:a.p}},{"int":{bigint:a.q}},{"int":{bigint:a.g}}]}]},{octstr:{hex:c}}]});var m=t.getEncodedHex();if(o===undefined||o==null){return v.ASN1Util.getPEMStringFromHex(m,"PRIVATE KEY")}else{var k=h(m,o);return v.ASN1Util.getPEMStringFromHex(k,"ENCRYPTED PRIVATE KEY")}}throw"unsupported object nor format"};KEYUTIL.getKeyFromCSRPEM=function(b){var a=KEYUTIL.getHexFromPEM(b,"CERTIFICATE REQUEST");var c=KEYUTIL.getKeyFromCSRHex(a);return c};KEYUTIL.getKeyFromCSRHex=function(a){var c=KEYUTIL.parseCSRHex(a);var b=KEYUTIL.getKey(c.p8pubkeyhex,null,"pkcs8pub");return b};KEYUTIL.parseCSRHex=function(c){var b={};var e=c;if(e.substr(0,2)!="30"){throw"malformed CSR(code:001)"}var d=ASN1HEX.getPosArrayOfChildren_AtObj(e,0);if(d.length<1){throw"malformed CSR(code:002)"}if(e.substr(d[0],2)!="30"){throw"malformed CSR(code:003)"}var a=ASN1HEX.getPosArrayOfChildren_AtObj(e,d[0]);if(a.length<3){throw"malformed CSR(code:004)"}b.p8pubkeyhex=ASN1HEX.getHexOfTLV_AtObj(e,a[2]);return b}; +/*! rsapem-1.1.js (c) 2012 Kenji Urushima | kjur.github.com/jsrsasign/license + */ +function _rsapem_pemToBase64(b){var a=b;a=a.replace("-----BEGIN RSA PRIVATE KEY-----","");a=a.replace("-----END RSA PRIVATE KEY-----","");a=a.replace(/[ \n]+/g,"");return a}function _rsapem_getPosArrayOfChildrenFromHex(d){var j=new Array();var k=ASN1HEX.getStartPosOfV_AtObj(d,0);var f=ASN1HEX.getPosOfNextSibling_AtObj(d,k);var h=ASN1HEX.getPosOfNextSibling_AtObj(d,f);var b=ASN1HEX.getPosOfNextSibling_AtObj(d,h);var l=ASN1HEX.getPosOfNextSibling_AtObj(d,b);var e=ASN1HEX.getPosOfNextSibling_AtObj(d,l);var g=ASN1HEX.getPosOfNextSibling_AtObj(d,e);var c=ASN1HEX.getPosOfNextSibling_AtObj(d,g);var i=ASN1HEX.getPosOfNextSibling_AtObj(d,c);j.push(k,f,h,b,l,e,g,c,i);return j}function _rsapem_getHexValueArrayOfChildrenFromHex(i){var o=_rsapem_getPosArrayOfChildrenFromHex(i);var r=ASN1HEX.getHexOfV_AtObj(i,o[0]);var f=ASN1HEX.getHexOfV_AtObj(i,o[1]);var j=ASN1HEX.getHexOfV_AtObj(i,o[2]);var k=ASN1HEX.getHexOfV_AtObj(i,o[3]);var c=ASN1HEX.getHexOfV_AtObj(i,o[4]);var b=ASN1HEX.getHexOfV_AtObj(i,o[5]);var h=ASN1HEX.getHexOfV_AtObj(i,o[6]);var g=ASN1HEX.getHexOfV_AtObj(i,o[7]);var l=ASN1HEX.getHexOfV_AtObj(i,o[8]);var m=new Array();m.push(r,f,j,k,c,b,h,g,l);return m}function _rsapem_readPrivateKeyFromASN1HexString(c){var b=_rsapem_getHexValueArrayOfChildrenFromHex(c);this.setPrivateEx(b[1],b[2],b[3],b[4],b[5],b[6],b[7],b[8])}function _rsapem_readPrivateKeyFromPEMString(e){var c=_rsapem_pemToBase64(e);var d=b64tohex(c);var b=_rsapem_getHexValueArrayOfChildrenFromHex(d);this.setPrivateEx(b[1],b[2],b[3],b[4],b[5],b[6],b[7],b[8])}RSAKey.prototype.readPrivateKeyFromPEMString=_rsapem_readPrivateKeyFromPEMString;RSAKey.prototype.readPrivateKeyFromASN1HexString=_rsapem_readPrivateKeyFromASN1HexString; +/*! rsasign-1.2.7.js (c) 2012 Kenji Urushima | kjur.github.com/jsrsasign/license + */ +var _RE_HEXDECONLY=new RegExp("");_RE_HEXDECONLY.compile("[^0-9a-f]","gi");function _rsasign_getHexPaddedDigestInfoForString(d,e,a){var b=function(f){return KJUR.crypto.Util.hashString(f,a)};var c=b(d);return KJUR.crypto.Util.getPaddedDigestInfoHex(c,a,e)}function _zeroPaddingOfSignature(e,d){var c="";var a=d/4-e.length;for(var b=0;b>24,(d&16711680)>>16,(d&65280)>>8,d&255]))));d+=1}return b}function _rsasign_signStringPSS(e,a,d){var c=function(f){return KJUR.crypto.Util.hashHex(f,a)};var b=c(rstrtohex(e));if(d===undefined){d=-1}return this.signWithMessageHashPSS(b,a,d)}function _rsasign_signWithMessageHashPSS(l,a,k){var b=hextorstr(l);var g=b.length;var m=this.n.bitLength()-1;var c=Math.ceil(m/8);var d;var o=function(i){return KJUR.crypto.Util.hashHex(i,a)};if(k===-1||k===undefined){k=g}else{if(k===-2){k=c-g-2}else{if(k<-2){throw"invalid salt length"}}}if(c<(g+k+2)){throw"data too long"}var f="";if(k>0){f=new Array(k);new SecureRandom().nextBytes(f);f=String.fromCharCode.apply(String,f)}var n=hextorstr(o(rstrtohex("\x00\x00\x00\x00\x00\x00\x00\x00"+b+f)));var j=[];for(d=0;d>(8*c-m))&255;q[0]&=~p;for(d=0;dthis.n.bitLength()){return 0}var i=this.doPublic(b);var e=i.toString(16).replace(/^1f+00/,"");var g=_rsasign_getAlgNameAndHashFromHexDisgestInfo(e);if(g.length==0){return false}var d=g[0];var h=g[1];var a=function(k){return KJUR.crypto.Util.hashString(k,d)};var c=a(f);return(h==c)}function _rsasign_verifyWithMessageHash(e,a){a=a.replace(_RE_HEXDECONLY,"");a=a.replace(/[ \n]+/g,"");var b=parseBigInt(a,16);if(b.bitLength()>this.n.bitLength()){return 0}var h=this.doPublic(b);var g=h.toString(16).replace(/^1f+00/,"");var c=_rsasign_getAlgNameAndHashFromHexDisgestInfo(g);if(c.length==0){return false}var d=c[0];var f=c[1];return(f==e)}function _rsasign_verifyStringPSS(c,b,a,f){var e=function(g){return KJUR.crypto.Util.hashHex(g,a)};var d=e(rstrtohex(c));if(f===undefined){f=-1}return this.verifyWithMessageHashPSS(d,b,a,f)}function _rsasign_verifyWithMessageHashPSS(f,s,l,c){var k=new BigInteger(s,16);if(k.bitLength()>this.n.bitLength()){return false}var r=function(i){return KJUR.crypto.Util.hashHex(i,l)};var j=hextorstr(f);var h=j.length;var g=this.n.bitLength()-1;var m=Math.ceil(g/8);var q;if(c===-1||c===undefined){c=h}else{if(c===-2){c=m-h-2}else{if(c<-2){throw"invalid salt length"}}}if(m<(h+c+2)){throw"data too long"}var a=this.doPublic(k).toByteArray();for(q=0;q>(8*m-g))&255;if((d.charCodeAt(0)&p)!==0){throw"bits beyond keysize not zero"}var n=pss_mgf1_str(e,d.length,r);var o=[];for(q=0;q=0;){delete D[n[A]]}}}return q.call(C,B,D)};x=s({"":x},"")}return x}})(); +/*! jws-3.3.2 (c) 2013-2015 Kenji Urushima | kjur.github.com/jsrsasign/license + */ +if(typeof KJUR=="undefined"||!KJUR){KJUR={}}if(typeof KJUR.jws=="undefined"||!KJUR.jws){KJUR.jws={}}KJUR.jws.JWS=function(){var b=KJUR.jws.JWS;this.parseJWS=function(f,h){if((this.parsedJWS!==undefined)&&(h||(this.parsedJWS.sigvalH!==undefined))){return}if(f.match(/^([^.]+)\.([^.]+)\.([^.]+)$/)==null){throw"JWS signature is not a form of 'Head.Payload.SigValue'."}var i=RegExp.$1;var d=RegExp.$2;var j=RegExp.$3;var l=i+"."+d;this.parsedJWS={};this.parsedJWS.headB64U=i;this.parsedJWS.payloadB64U=d;this.parsedJWS.sigvalB64U=j;this.parsedJWS.si=l;if(!h){var g=b64utohex(j);var e=parseBigInt(g,16);this.parsedJWS.sigvalH=g;this.parsedJWS.sigvalBI=e}var c=b64utoutf8(i);var k=b64utoutf8(d);this.parsedJWS.headS=c;this.parsedJWS.payloadS=k;if(!b.isSafeJSONString(c,this.parsedJWS,"headP")){throw"malformed JSON string for JWS Head: "+c}}};KJUR.jws.JWS.sign=function(b,j,d,n,m){var l=KJUR.jws.JWS;var r,f,k;if(typeof j!="string"&&typeof j!="object"){throw"spHeader must be JSON string or object: "+j}if(typeof j=="object"){f=j;r=JSON.stringify(f)}if(typeof j=="string"){r=j;if(!l.isSafeJSONString(r)){throw"JWS Head is not safe JSON string: "+r}f=l.readSafeJSONString(r)}k=d;if(typeof d=="object"){k=JSON.stringify(d)}if((b==""||b==null)&&f.alg!==undefined){b=f.alg}if((b!=""&&b!=null)&&f.alg===undefined){f.alg=b;r=JSON.stringify(f)}if(b!==f.alg){throw"alg and sHeader.alg doesn't match: "+b+"!="+f.alg}var e=null;if(l.jwsalg2sigalg[b]===undefined){throw"unsupported alg name: "+b}else{e=l.jwsalg2sigalg[b]}var c=utf8tob64u(r);var h=utf8tob64u(k);var p=c+"."+h;var o="";if(e.substr(0,4)=="Hmac"){if(n===undefined){throw"mac key shall be specified for HS* alg"}var i=new KJUR.crypto.Mac({alg:e,prov:"cryptojs",pass:n});i.updateString(p);o=i.doFinal()}else{if(e.indexOf("withECDSA")!=-1){var q=new KJUR.crypto.Signature({alg:e});q.init(n,m);q.updateString(p);hASN1Sig=q.sign();o=KJUR.crypto.ECDSA.asn1SigToConcatSig(hASN1Sig)}else{if(e!="none"){var q=new KJUR.crypto.Signature({alg:e});q.init(n,m);q.updateString(p);o=q.sign()}}}var g=hextob64u(o);return p+"."+g};KJUR.jws.JWS.verify=function(p,t,j){var m=KJUR.jws.JWS;var q=p.split(".");var d=q[0];var l=q[1];var b=d+"."+l;var r=b64utohex(q[2]);var i=m.readSafeJSONString(b64utoutf8(q[0]));var h=null;var s=null;if(i.alg===undefined){throw"algorithm not specified in header"}else{h=i.alg;s=h.substr(0,2)}if(j!=null&&Object.prototype.toString.call(j)==="[object Array]"&&j.length>0){var c=":"+j.join(":")+":";if(c.indexOf(":"+h+":")==-1){throw"algorithm '"+h+"' not accepted in the list"}}if(h!="none"&&t===null){throw"key shall be specified to verify."}if(typeof t=="string"&&t.indexOf("-----BEGIN ")!=-1){t=KEYUTIL.getKey(t)}if(s=="RS"||s=="PS"){if(!(t instanceof RSAKey)){throw"key shall be a RSAKey obj for RS* and PS* algs"}}if(s=="ES"){if(!(t instanceof KJUR.crypto.ECDSA)){throw"key shall be a ECDSA obj for ES* algs"}}if(h=="none"){}var n=null;if(m.jwsalg2sigalg[i.alg]===undefined){throw"unsupported alg name: "+h}else{n=m.jwsalg2sigalg[h]}if(n=="none"){throw"not supported"}else{if(n.substr(0,4)=="Hmac"){var k=null;if(t===undefined){throw"hexadecimal key shall be specified for HMAC"}var g=new KJUR.crypto.Mac({alg:n,pass:t});g.updateString(b);k=g.doFinal();return r==k}else{if(n.indexOf("withECDSA")!=-1){var f=null;try{f=KJUR.crypto.ECDSA.concatSigToASN1Sig(r)}catch(o){return false}var e=new KJUR.crypto.Signature({alg:n});e.init(t);e.updateString(b);return e.verify(f)}else{var e=new KJUR.crypto.Signature({alg:n});e.init(t);e.updateString(b);return e.verify(r)}}}};KJUR.jws.JWS.verifyJWT=function(d,j,l){var h=KJUR.jws.JWS;var i=d.split(".");var c=i[0];var g=i[1];var m=c+"."+g;var k=b64utohex(i[2]);var f=h.readSafeJSONString(b64utoutf8(c));var e=h.readSafeJSONString(b64utoutf8(g));if(f.alg===undefined){return false}if(l.alg===undefined){throw"acceptField.alg shall be specified"}if(!h.inArray(f.alg,l.alg)){return false}if(e.iss!==undefined&&typeof l.iss==="object"){if(!h.inArray(e.iss,l.iss)){return false}}if(e.sub!==undefined&&typeof l.sub==="object"){if(!h.inArray(e.sub,l.sub)){return false}}if(e.aud!==undefined&&typeof l.aud==="object"){if(typeof e.aud=="string"){if(!h.inArray(e.aud,l.aud)){return false}}else{if(typeof e.aud=="object"){if(!h.includedArray(e.aud,l.aud)){return false}}}}var b=KJUR.jws.IntDate.getNow();if(l.verifyAt!==undefined&&typeof l.verifyAt=="number"){b=l.verifyAt}if(e.exp!==undefined&&typeof e.exp=="number"){if(e.expa.length){d=a.length}for(var b=0;ba.length){d=a.length}for(var b=0;bd){throw"key is too short for SigAlg: keylen="+j+","+a}var b="0001";var k="00"+c;var g="";var l=d-b.length-k.length;for(var f=0;f=0;){delete D[n[A]]}}}return q.call(C,B,D)};x=s({"":x},"")}return x}})(); -/*! jws-3.3.1 (c) 2013-2015 Kenji Urushima | kjur.github.com/jsrsasign/license +/*! jws-3.3.2 (c) 2013-2015 Kenji Urushima | kjur.github.com/jsrsasign/license */ -if(typeof KJUR=="undefined"||!KJUR){KJUR={}}if(typeof KJUR.jws=="undefined"||!KJUR.jws){KJUR.jws={}}KJUR.jws.JWS=function(){var b=KJUR.jws.JWS;this.parseJWS=function(f,h){if((this.parsedJWS!==undefined)&&(h||(this.parsedJWS.sigvalH!==undefined))){return}if(f.match(/^([^.]+)\.([^.]+)\.([^.]+)$/)==null){throw"JWS signature is not a form of 'Head.Payload.SigValue'."}var i=RegExp.$1;var d=RegExp.$2;var j=RegExp.$3;var l=i+"."+d;this.parsedJWS={};this.parsedJWS.headB64U=i;this.parsedJWS.payloadB64U=d;this.parsedJWS.sigvalB64U=j;this.parsedJWS.si=l;if(!h){var g=b64utohex(j);var e=parseBigInt(g,16);this.parsedJWS.sigvalH=g;this.parsedJWS.sigvalBI=e}var c=b64utoutf8(i);var k=b64utoutf8(d);this.parsedJWS.headS=c;this.parsedJWS.payloadS=k;if(!b.isSafeJSONString(c,this.parsedJWS,"headP")){throw"malformed JSON string for JWS Head: "+c}}};KJUR.jws.JWS.sign=function(b,j,d,n,m){var l=KJUR.jws.JWS;var r,f,k;if(typeof j!="string"&&typeof j!="object"){throw"spHeader must be JSON string or object: "+j}if(typeof j=="object"){f=j;r=JSON.stringify(f)}if(typeof j=="string"){r=j;if(!l.isSafeJSONString(r)){throw"JWS Head is not safe JSON string: "+r}f=l.readSafeJSONString(r)}k=d;if(typeof d=="object"){k=JSON.stringify(d)}if((b==""||b==null)&&f.alg!==undefined){b=f.alg}if((b!=""&&b!=null)&&f.alg===undefined){f.alg=b;r=JSON.stringify(f)}if(b!==f.alg){throw"alg and sHeader.alg doesn't match: "+b+"!="+f.alg}var e=null;if(l.jwsalg2sigalg[b]===undefined){throw"unsupported alg name: "+b}else{e=l.jwsalg2sigalg[b]}var c=utf8tob64u(r);var h=utf8tob64u(k);var p=c+"."+h;var o="";if(e.substr(0,4)=="Hmac"){if(n===undefined){throw"mac key shall be specified for HS* alg"}var i=new KJUR.crypto.Mac({alg:e,prov:"cryptojs",pass:n});i.updateString(p);o=i.doFinal()}else{if(e.indexOf("withECDSA")!=-1){var q=new KJUR.crypto.Signature({alg:e});q.init(n,m);q.updateString(p);hASN1Sig=q.sign();o=KJUR.crypto.ECDSA.asn1SigToConcatSig(hASN1Sig)}else{if(e!="none"){var q=new KJUR.crypto.Signature({alg:e});q.init(n,m);q.updateString(p);o=q.sign()}}}var g=hextob64u(o);return p+"."+g};KJUR.jws.JWS.verify=function(p,t,j){var m=KJUR.jws.JWS;var q=p.split(".");var d=q[0];var l=q[1];var b=d+"."+l;var r=b64utohex(q[2]);var i=m.readSafeJSONString(b64utoutf8(q[0]));var h=null;var s=null;if(i.alg===undefined){throw"algorithm not specified in header"}else{h=i.alg;s=h.substr(0,2)}if(j!=null&&Object.prototype.toString.call(j)==="[object Array]"&&j.length>0){var c=":"+j.join(":")+":";if(c.indexOf(":"+h+":")==-1){throw"algorithm '"+h+"' not accepted in the list"}}if(h!="none"&&t===null){throw"key shall be specified to verify."}if(typeof t=="string"&&t.indexOf("-----BEGIN ")!=-1){t=KEYUTIL.getKey(t)}if(s=="RS"||s=="PS"){if(!(t instanceof RSAKey)){throw"key shall be a RSAKey obj for RS* and PS* algs"}}if(s=="ES"){if(!(t instanceof KJUR.crypto.ECDSA)){throw"key shall be a ECDSA obj for ES* algs"}}if(h=="none"){}var n=null;if(m.jwsalg2sigalg[i.alg]===undefined){throw"unsupported alg name: "+h}else{n=m.jwsalg2sigalg[h]}if(n=="none"){throw"not supported"}else{if(n.substr(0,4)=="Hmac"){var k=null;if(t===undefined){throw"hexadecimal key shall be specified for HMAC"}var g=new KJUR.crypto.Mac({alg:n,pass:t});g.updateString(b);k=g.doFinal();return r==k}else{if(n.indexOf("withECDSA")!=-1){var f=null;try{f=KJUR.crypto.ECDSA.concatSigToASN1Sig(r)}catch(o){return false}var e=new KJUR.crypto.Signature({alg:n});e.init(t);e.updateString(b);return e.verify(f)}else{var e=new KJUR.crypto.Signature({alg:n});e.init(t);e.updateString(b);return e.verify(r)}}}};KJUR.jws.JWS.verifyJWT=function(d,j,l){var h=KJUR.jws.JWS;var i=d.split(".");var c=i[0];var g=i[1];var m=c+"."+g;var k=b64utohex(i[2]);var f=h.readSafeJSONString(b64utoutf8(c));var e=h.readSafeJSONString(b64utoutf8(g));if(f.alg===undefined){return false}if(l.alg===undefined){throw"acceptField.alg shall be specified"}if(!h.inArray(f.alg,l.alg)){return false}if(e.iss!==undefined&&typeof l.iss==="object"){if(!h.inArray(e.iss,l.iss)){return false}}if(e.sub!==undefined&&typeof l.sub==="object"){if(!h.inArray(e.sub,l.sub)){return false}}if(e.aud!==undefined&&typeof l.aud==="object"){if(typeof e.aud=="string"){if(!h.inArray(e.aud,l.aud)){return false}}else{if(typeof e.aud=="object"){if(!h.includedArray(e.aud,l.aud)){return false}}}}var b=KJUR.jws.IntDate.getNow();if(l.verifyAt!==undefined&&typeof l.verifyAt=="number"){b=l.verifyAt}if(e.exp!==undefined&&typeof e.exp=="number"){if(e.exp0){var c=":"+j.join(":")+":";if(c.indexOf(":"+h+":")==-1){throw"algorithm '"+h+"' not accepted in the list"}}if(h!="none"&&t===null){throw"key shall be specified to verify."}if(typeof t=="string"&&t.indexOf("-----BEGIN ")!=-1){t=KEYUTIL.getKey(t)}if(s=="RS"||s=="PS"){if(!(t instanceof RSAKey)){throw"key shall be a RSAKey obj for RS* and PS* algs"}}if(s=="ES"){if(!(t instanceof KJUR.crypto.ECDSA)){throw"key shall be a ECDSA obj for ES* algs"}}if(h=="none"){}var n=null;if(m.jwsalg2sigalg[i.alg]===undefined){throw"unsupported alg name: "+h}else{n=m.jwsalg2sigalg[h]}if(n=="none"){throw"not supported"}else{if(n.substr(0,4)=="Hmac"){var k=null;if(t===undefined){throw"hexadecimal key shall be specified for HMAC"}var g=new KJUR.crypto.Mac({alg:n,pass:t});g.updateString(b);k=g.doFinal();return r==k}else{if(n.indexOf("withECDSA")!=-1){var f=null;try{f=KJUR.crypto.ECDSA.concatSigToASN1Sig(r)}catch(o){return false}var e=new KJUR.crypto.Signature({alg:n});e.init(t);e.updateString(b);return e.verify(f)}else{var e=new KJUR.crypto.Signature({alg:n});e.init(t);e.updateString(b);return e.verify(r)}}}};KJUR.jws.JWS.verifyJWT=function(d,j,l){var h=KJUR.jws.JWS;var i=d.split(".");var c=i[0];var g=i[1];var m=c+"."+g;var k=b64utohex(i[2]);var f=h.readSafeJSONString(b64utoutf8(c));var e=h.readSafeJSONString(b64utoutf8(g));if(f.alg===undefined){return false}if(l.alg===undefined){throw"acceptField.alg shall be specified"}if(!h.inArray(f.alg,l.alg)){return false}if(e.iss!==undefined&&typeof l.iss==="object"){if(!h.inArray(e.iss,l.iss)){return false}}if(e.sub!==undefined&&typeof l.sub==="object"){if(!h.inArray(e.sub,l.sub)){return false}}if(e.aud!==undefined&&typeof l.aud==="object"){if(typeof e.aud=="string"){if(!h.inArray(e.aud,l.aud)){return false}}else{if(typeof e.aud=="object"){if(!h.includedArray(e.aud,l.aud)){return false}}}}var b=KJUR.jws.IntDate.getNow();if(l.verifyAt!==undefined&&typeof l.verifyAt=="number"){b=l.verifyAt}if(e.exp!==undefined&&typeof e.exp=="number"){if(e.expMIT License */ @@ -735,6 +735,66 @@ KJUR.jws.JWS.getEncodedSignatureValueFromJWS = function(sJWS) { return RegExp.$1; }; +/** + * get RFC 7638 JWK thumbprint from JWK object + * @name getJWKthumbprint + * @memberOf KJUR.jws.JWS + * @function + * @static + * @param {String} o JWK object to be calculated thumbprint + * @return {String} Base64 URL encoded JWK thumbprint value + * @since jsrsasign 5.0.2 jws 3.3.2 + * @description + * This method calculates JWK thmubprint for specified JWK object + * as described in + * RFC 7638. + * It supports all type of "kty". (i.e. "RSA", "EC" and "oct" + * (for symmetric key)) + * Working sample is + * here. + * @example + * jwk = {"kty":"RSA", "n":"0vx...", "e":"AQAB", ...}; + * thumbprint = KJUR.jws.JWS.getJWKthumbprint(jwk); + */ +KJUR.jws.JWS.getJWKthumbprint = function(o) { + if (o.kty !== "RSA" && + o.kty !== "EC" && + o.kty !== "oct") + throw "unsupported algorithm for JWK Thumprint"; + + // 1. get canonically ordered json string + var s = '{'; + if (o.kty === "RSA") { + if (typeof o.n != "string" || typeof o.e != "string") + throw "wrong n and e value for RSA key"; + s += '"' + 'e' + '":"' + o.e + '",'; + s += '"' + 'kty' + '":"' + o.kty + '",'; + s += '"' + 'n' + '":"' + o.n + '"}'; + } else if (o.kty === "EC") { + if (typeof o.crv != "string" || + typeof o.x != "string" || + typeof o.y != "string") + throw "wrong crv, x and y value for EC key"; + s += '"' + 'crv' + '":"' + o.crv + '",'; + s += '"' + 'kty' + '":"' + o.kty + '",'; + s += '"' + 'x' + '":"' + o.x + '",'; + s += '"' + 'y' + '":"' + o.y + '"}'; + } else if (o.kty === "oct") { + if (typeof o.k != "string") + throw "wrong k value for oct(symmetric) key"; + s += '"' + 'kty' + '":"' + o.kty + '",'; + s += '"' + 'k' + '":"' + o.k + '"}'; + } + //alert(s); + + // 2. get thumb print + var hJWK = rstrtohex(s); + var hash = KJUR.crypto.Util.hashHex(hJWK, "sha256"); + var hashB64U = hextob64u(hash); + + return hashB64U; +}; + /** * IntDate class for time representation for JSON Web Token(JWT) * @class KJUR.jws.IntDate class @@ -877,3 +937,4 @@ KJUR.jws.IntDate.intDate2Zulu = function(intDate) { var sec = ("00" + d.getUTCSeconds()).slice(-2); return year + mon + day + hour + min + sec + "Z"; }; + diff --git a/jws-3.3.min.js b/jws-3.3.min.js index b6bdcdba..a8292f75 100644 --- a/jws-3.3.min.js +++ b/jws-3.3.min.js @@ -1,3 +1,3 @@ -/*! jws-3.3.1 (c) 2013-2015 Kenji Urushima | kjur.github.com/jsrsasign/license +/*! jws-3.3.2 (c) 2013-2015 Kenji Urushima | kjur.github.com/jsrsasign/license */ -if(typeof KJUR=="undefined"||!KJUR){KJUR={}}if(typeof KJUR.jws=="undefined"||!KJUR.jws){KJUR.jws={}}KJUR.jws.JWS=function(){var b=KJUR.jws.JWS;this.parseJWS=function(f,h){if((this.parsedJWS!==undefined)&&(h||(this.parsedJWS.sigvalH!==undefined))){return}if(f.match(/^([^.]+)\.([^.]+)\.([^.]+)$/)==null){throw"JWS signature is not a form of 'Head.Payload.SigValue'."}var i=RegExp.$1;var d=RegExp.$2;var j=RegExp.$3;var l=i+"."+d;this.parsedJWS={};this.parsedJWS.headB64U=i;this.parsedJWS.payloadB64U=d;this.parsedJWS.sigvalB64U=j;this.parsedJWS.si=l;if(!h){var g=b64utohex(j);var e=parseBigInt(g,16);this.parsedJWS.sigvalH=g;this.parsedJWS.sigvalBI=e}var c=b64utoutf8(i);var k=b64utoutf8(d);this.parsedJWS.headS=c;this.parsedJWS.payloadS=k;if(!b.isSafeJSONString(c,this.parsedJWS,"headP")){throw"malformed JSON string for JWS Head: "+c}}};KJUR.jws.JWS.sign=function(b,j,d,n,m){var l=KJUR.jws.JWS;var r,f,k;if(typeof j!="string"&&typeof j!="object"){throw"spHeader must be JSON string or object: "+j}if(typeof j=="object"){f=j;r=JSON.stringify(f)}if(typeof j=="string"){r=j;if(!l.isSafeJSONString(r)){throw"JWS Head is not safe JSON string: "+r}f=l.readSafeJSONString(r)}k=d;if(typeof d=="object"){k=JSON.stringify(d)}if((b==""||b==null)&&f.alg!==undefined){b=f.alg}if((b!=""&&b!=null)&&f.alg===undefined){f.alg=b;r=JSON.stringify(f)}if(b!==f.alg){throw"alg and sHeader.alg doesn't match: "+b+"!="+f.alg}var e=null;if(l.jwsalg2sigalg[b]===undefined){throw"unsupported alg name: "+b}else{e=l.jwsalg2sigalg[b]}var c=utf8tob64u(r);var h=utf8tob64u(k);var p=c+"."+h;var o="";if(e.substr(0,4)=="Hmac"){if(n===undefined){throw"mac key shall be specified for HS* alg"}var i=new KJUR.crypto.Mac({alg:e,prov:"cryptojs",pass:n});i.updateString(p);o=i.doFinal()}else{if(e.indexOf("withECDSA")!=-1){var q=new KJUR.crypto.Signature({alg:e});q.init(n,m);q.updateString(p);hASN1Sig=q.sign();o=KJUR.crypto.ECDSA.asn1SigToConcatSig(hASN1Sig)}else{if(e!="none"){var q=new KJUR.crypto.Signature({alg:e});q.init(n,m);q.updateString(p);o=q.sign()}}}var g=hextob64u(o);return p+"."+g};KJUR.jws.JWS.verify=function(p,t,j){var m=KJUR.jws.JWS;var q=p.split(".");var d=q[0];var l=q[1];var b=d+"."+l;var r=b64utohex(q[2]);var i=m.readSafeJSONString(b64utoutf8(q[0]));var h=null;var s=null;if(i.alg===undefined){throw"algorithm not specified in header"}else{h=i.alg;s=h.substr(0,2)}if(j!=null&&Object.prototype.toString.call(j)==="[object Array]"&&j.length>0){var c=":"+j.join(":")+":";if(c.indexOf(":"+h+":")==-1){throw"algorithm '"+h+"' not accepted in the list"}}if(h!="none"&&t===null){throw"key shall be specified to verify."}if(typeof t=="string"&&t.indexOf("-----BEGIN ")!=-1){t=KEYUTIL.getKey(t)}if(s=="RS"||s=="PS"){if(!(t instanceof RSAKey)){throw"key shall be a RSAKey obj for RS* and PS* algs"}}if(s=="ES"){if(!(t instanceof KJUR.crypto.ECDSA)){throw"key shall be a ECDSA obj for ES* algs"}}if(h=="none"){}var n=null;if(m.jwsalg2sigalg[i.alg]===undefined){throw"unsupported alg name: "+h}else{n=m.jwsalg2sigalg[h]}if(n=="none"){throw"not supported"}else{if(n.substr(0,4)=="Hmac"){var k=null;if(t===undefined){throw"hexadecimal key shall be specified for HMAC"}var g=new KJUR.crypto.Mac({alg:n,pass:t});g.updateString(b);k=g.doFinal();return r==k}else{if(n.indexOf("withECDSA")!=-1){var f=null;try{f=KJUR.crypto.ECDSA.concatSigToASN1Sig(r)}catch(o){return false}var e=new KJUR.crypto.Signature({alg:n});e.init(t);e.updateString(b);return e.verify(f)}else{var e=new KJUR.crypto.Signature({alg:n});e.init(t);e.updateString(b);return e.verify(r)}}}};KJUR.jws.JWS.verifyJWT=function(d,j,l){var h=KJUR.jws.JWS;var i=d.split(".");var c=i[0];var g=i[1];var m=c+"."+g;var k=b64utohex(i[2]);var f=h.readSafeJSONString(b64utoutf8(c));var e=h.readSafeJSONString(b64utoutf8(g));if(f.alg===undefined){return false}if(l.alg===undefined){throw"acceptField.alg shall be specified"}if(!h.inArray(f.alg,l.alg)){return false}if(e.iss!==undefined&&typeof l.iss==="object"){if(!h.inArray(e.iss,l.iss)){return false}}if(e.sub!==undefined&&typeof l.sub==="object"){if(!h.inArray(e.sub,l.sub)){return false}}if(e.aud!==undefined&&typeof l.aud==="object"){if(typeof e.aud=="string"){if(!h.inArray(e.aud,l.aud)){return false}}else{if(typeof e.aud=="object"){if(!h.includedArray(e.aud,l.aud)){return false}}}}var b=KJUR.jws.IntDate.getNow();if(l.verifyAt!==undefined&&typeof l.verifyAt=="number"){b=l.verifyAt}if(e.exp!==undefined&&typeof e.exp=="number"){if(e.exp0){var c=":"+j.join(":")+":";if(c.indexOf(":"+h+":")==-1){throw"algorithm '"+h+"' not accepted in the list"}}if(h!="none"&&t===null){throw"key shall be specified to verify."}if(typeof t=="string"&&t.indexOf("-----BEGIN ")!=-1){t=KEYUTIL.getKey(t)}if(s=="RS"||s=="PS"){if(!(t instanceof RSAKey)){throw"key shall be a RSAKey obj for RS* and PS* algs"}}if(s=="ES"){if(!(t instanceof KJUR.crypto.ECDSA)){throw"key shall be a ECDSA obj for ES* algs"}}if(h=="none"){}var n=null;if(m.jwsalg2sigalg[i.alg]===undefined){throw"unsupported alg name: "+h}else{n=m.jwsalg2sigalg[h]}if(n=="none"){throw"not supported"}else{if(n.substr(0,4)=="Hmac"){var k=null;if(t===undefined){throw"hexadecimal key shall be specified for HMAC"}var g=new KJUR.crypto.Mac({alg:n,pass:t});g.updateString(b);k=g.doFinal();return r==k}else{if(n.indexOf("withECDSA")!=-1){var f=null;try{f=KJUR.crypto.ECDSA.concatSigToASN1Sig(r)}catch(o){return false}var e=new KJUR.crypto.Signature({alg:n});e.init(t);e.updateString(b);return e.verify(f)}else{var e=new KJUR.crypto.Signature({alg:n});e.init(t);e.updateString(b);return e.verify(r)}}}};KJUR.jws.JWS.verifyJWT=function(d,j,l){var h=KJUR.jws.JWS;var i=d.split(".");var c=i[0];var g=i[1];var m=c+"."+g;var k=b64utohex(i[2]);var f=h.readSafeJSONString(b64utoutf8(c));var e=h.readSafeJSONString(b64utoutf8(g));if(f.alg===undefined){return false}if(l.alg===undefined){throw"acceptField.alg shall be specified"}if(!h.inArray(f.alg,l.alg)){return false}if(e.iss!==undefined&&typeof l.iss==="object"){if(!h.inArray(e.iss,l.iss)){return false}}if(e.sub!==undefined&&typeof l.sub==="object"){if(!h.inArray(e.sub,l.sub)){return false}}if(e.aud!==undefined&&typeof l.aud==="object"){if(typeof e.aud=="string"){if(!h.inArray(e.aud,l.aud)){return false}}else{if(typeof e.aud=="object"){if(!h.includedArray(e.aud,l.aud)){return false}}}}var b=KJUR.jws.IntDate.getNow();if(l.verifyAt!==undefined&&typeof l.verifyAt=="number"){b=l.verifyAt}if(e.exp!==undefined&&typeof e.exp=="number"){if(e.expMIT License + */ + +/** + * read file and return file contents as utf-8 string + * @param {String} utf8File file name to be read + * @return {String} utf-8 string of file contents + * @description + * This function only works in Node.js. + */ +function readFileUTF8(utf8File) { + return require('fs').readFileSync(utf8File, 'utf8'); +} + +/** + * read binary file and return file contents as hexadecimal string + * @param {String} binFile file name to be read + * @return {String} hexadecimal string of file contents + * @description + * This function only works in Node.js. + */ +function readFileHexByBin(binFile) { + var rs = require('jsrsasign'); + var fs = require('fs'); + return rs.rstrtohex(fs.readFileSync(binFile, 'binary')); +} + +/** + * read file and return file contents + * @param {String} binFile file name to be read + * @return {String} raw string of file contents + * @description + * This function only works in Node.js. + */ +function readFile(binFile) { + var fs = require('fs'); + return fs.readFileSync(binFile, 'binary'); +} + +/** + * save raw string to file + * @param {String} binFile file name to save contents. + * @param {String} rawString string contents to be saved. + * @description + * This function only works in Node.js. + */ +function saveFile(binFile, rawString) { + var fs = require('fs'); + fs.writeFileSync(binFile, rawString, 'binary'); +} + +/** + * save data represented by hexadecimal string to file + * @param {String} binFile file name to save contents. + * @param {String} hexString hexadecimal string to be saved. + * @description + * This function only works in Node.js. + */ +function saveFileBinByHex(binFile, hexString) { + var fs = require('fs'); + var rs = require('jsrsasign'); + var rawString = rs.hextorstr(hexString); + fs.writeFileSync(binFile, rawString, 'binary'); +} diff --git a/nodeutil-1.0.min.js b/nodeutil-1.0.min.js new file mode 100644 index 00000000..6ab87302 --- /dev/null +++ b/nodeutil-1.0.min.js @@ -0,0 +1,3 @@ +/*! nodeutil-1.0.0 (c) 2015 Kenji Urushima | kjur.github.com/jsrsasign/license + */ +function readFileUTF8(a){return require("fs").readFileSync(a,"utf8")}function readFileHexByBin(c){var b=require("jsrsasign");var a=require("fs");return b.rstrtohex(a.readFileSync(c,"binary"))}function readFile(b){var a=require("fs");return a.readFileSync(b,"binary")}function saveFile(c,b){var a=require("fs");a.writeFileSync(c,b,"binary")}function saveFileBinByHex(e,b){var a=require("fs");var c=require("jsrsasign");var d=c.hextorstr(b);a.writeFileSync(e,d,"binary")}; \ No newline at end of file diff --git a/npm/lib/footer.js b/npm/lib/footer.js index e156e01f..c1cda4a2 100755 --- a/npm/lib/footer.js +++ b/npm/lib/footer.js @@ -9,6 +9,7 @@ exports.Mac = KJUR.crypto.Mac; exports.KEYUTIL = KEYUTIL; exports.ASN1HEX = ASN1HEX; exports.X509 = X509; +exports.CryptoJS = CryptoJS; // ext/base64.js exports.b64tohex = b64tohex; @@ -38,8 +39,16 @@ exports.hextorstr = hextorstr; exports.rstrtohex = rstrtohex; exports.newline_toUnix = newline_toUnix; exports.newline_toDos = newline_toDos; +exports.intarystrtohex = intarystrtohex; exports.strdiffidx = strdiffidx; exports.crypto = KJUR.crypto; exports.asn1 = KJUR.asn1; exports.jws = KJUR.jws; + +exports.readFileUTF8 = readFileUTF8; +exports.readFileHexByBin = readFileHexByBin; +exports.readFile = readFile; +exports.saveFile = saveFile; +exports.saveFileBinByHex = saveFileBinByHex; + diff --git a/npm/lib/jsrsasign.js b/npm/lib/jsrsasign.js index e4372b86..7e401fa9 100755 --- a/npm/lib/jsrsasign.js +++ b/npm/lib/jsrsasign.js @@ -4,7 +4,7 @@ navigator.userAgent = false; var window = {}; /* - * jsrsasign 5.0.1 (c) 2010-2015 Kenji Urushima | kjur.github.com/jsrsasign/license + * jsrsasign 5.0.2 (c) 2010-2015 Kenji Urushima | kjur.github.com/jsrsasign/license */ /* @@ -250,9 +250,9 @@ if(typeof KJUR=="undefined"||!KJUR){KJUR={}}if(typeof KJUR.asn1=="undefined"||!K /*! asn1csr-1.0.0.js (c) 2015 Kenji Urushima | kjur.github.com/jsrsasign/license */ if(typeof KJUR.asn1.csr=="undefined"||!KJUR.asn1.csr){KJUR.asn1.csr={}}KJUR.asn1.csr.CertificationRequest=function(f){KJUR.asn1.csr.CertificationRequest.superclass.constructor.call(this);var b=null;var d=null;var e=null;var c=null;var a=null;this.sign=function(i,h){if(this.prvKey==null){this.prvKey=h}this.asn1SignatureAlg=new KJUR.asn1.x509.AlgorithmIdentifier({name:i});sig=new KJUR.crypto.Signature({alg:i});sig.initSign(this.prvKey);sig.updateHex(this.asn1CSRInfo.getEncodedHex());this.hexSig=sig.sign();this.asn1Sig=new KJUR.asn1.DERBitString({hex:"00"+this.hexSig});var g=new KJUR.asn1.DERSequence({array:[this.asn1CSRInfo,this.asn1SignatureAlg,this.asn1Sig]});this.hTLV=g.getEncodedHex();this.isModified=false};this.getPEMString=function(){var g=KJUR.asn1.ASN1Util.getPEMStringFromHex(this.getEncodedHex(),"CERTIFICATE REQUEST");return g};this.getEncodedHex=function(){if(this.isModified==false&&this.hTLV!=null){return this.hTLV}throw"not signed yet"};if(typeof f!="undefined"){if(typeof f.csrinfo!="undefined"){this.asn1CSRInfo=f.csrinfo}}};YAHOO.lang.extend(KJUR.asn1.csr.CertificationRequest,KJUR.asn1.ASN1Object);KJUR.asn1.csr.CertificationRequestInfo=function(a){KJUR.asn1.csr.CertificationRequestInfo.superclass.constructor.call(this);this._initialize=function(){this.asn1Array=new Array();this.asn1Version=new KJUR.asn1.DERInteger({"int":0});this.asn1Subject=null;this.asn1SubjPKey=null;this.extensionsArray=new Array()};this.setSubjectByParam=function(b){this.asn1Subject=new KJUR.asn1.x509.X500Name(b)};this.setSubjectPublicKeyByGetKey=function(c){var b=KEYUTIL.getKey(c);this.asn1SubjPKey=new KJUR.asn1.x509.SubjectPublicKeyInfo(b)};this.getEncodedHex=function(){this.asn1Array=new Array();this.asn1Array.push(this.asn1Version);this.asn1Array.push(this.asn1Subject);this.asn1Array.push(this.asn1SubjPKey);var c=new KJUR.asn1.DERSequence({array:this.extensionsArray});var b=new KJUR.asn1.DERTaggedObject({explicit:false,tag:"a0",obj:c});this.asn1Array.push(b);var d=new KJUR.asn1.DERSequence({array:this.asn1Array});this.hTLV=d.getEncodedHex();this.isModified=false;return this.hTLV};this._initialize()};YAHOO.lang.extend(KJUR.asn1.csr.CertificationRequestInfo,KJUR.asn1.ASN1Object);KJUR.asn1.csr.CSRUtil=new function(){};KJUR.asn1.csr.CSRUtil.newCSRPEM=function(f){var c=KJUR.asn1.csr;if(f.subject===undefined){throw"parameter subject undefined"}if(f.sbjpubkey===undefined){throw"parameter sbjpubkey undefined"}if(f.sigalg===undefined){throw"parameter sigalg undefined"}if(f.sbjprvkey===undefined){throw"parameter sbjpubkey undefined"}var b=new c.CertificationRequestInfo();b.setSubjectByParam(f.subject);b.setSubjectPublicKeyByGetKey(f.sbjpubkey);var d=new c.CertificationRequest({csrinfo:b});var a=KEYUTIL.getKey(f.sbjprvkey);d.sign(f.sigalg,a);var e=d.getPEMString();return e}; -/*! base64x-1.1.5 (c) 2012-2015 Kenji Urushima | kjur.github.com/jsjws/license +/*! base64x-1.1.6 (c) 2012-2015 Kenji Urushima | kjur.github.com/jsjws/license */ -function Base64x(){}function stoBA(d){var b=new Array();for(var c=0;ca.length){d=a.length}for(var b=0;ba.length){d=a.length}for(var b=0;bd){throw"key is too short for SigAlg: keylen="+j+","+a}var b="0001";var k="00"+c;var g="";var l=d-b.length-k.length;for(var f=0;f=0;){delete D[n[A]]}}}return q.call(C,B,D)};x=s({"":x},"")}return x}})(); -/*! jws-3.3.1 (c) 2013-2015 Kenji Urushima | kjur.github.com/jsrsasign/license +/*! jws-3.3.2 (c) 2013-2015 Kenji Urushima | kjur.github.com/jsrsasign/license */ -if(typeof KJUR=="undefined"||!KJUR){KJUR={}}if(typeof KJUR.jws=="undefined"||!KJUR.jws){KJUR.jws={}}KJUR.jws.JWS=function(){var b=KJUR.jws.JWS;this.parseJWS=function(f,h){if((this.parsedJWS!==undefined)&&(h||(this.parsedJWS.sigvalH!==undefined))){return}if(f.match(/^([^.]+)\.([^.]+)\.([^.]+)$/)==null){throw"JWS signature is not a form of 'Head.Payload.SigValue'."}var i=RegExp.$1;var d=RegExp.$2;var j=RegExp.$3;var l=i+"."+d;this.parsedJWS={};this.parsedJWS.headB64U=i;this.parsedJWS.payloadB64U=d;this.parsedJWS.sigvalB64U=j;this.parsedJWS.si=l;if(!h){var g=b64utohex(j);var e=parseBigInt(g,16);this.parsedJWS.sigvalH=g;this.parsedJWS.sigvalBI=e}var c=b64utoutf8(i);var k=b64utoutf8(d);this.parsedJWS.headS=c;this.parsedJWS.payloadS=k;if(!b.isSafeJSONString(c,this.parsedJWS,"headP")){throw"malformed JSON string for JWS Head: "+c}}};KJUR.jws.JWS.sign=function(b,j,d,n,m){var l=KJUR.jws.JWS;var r,f,k;if(typeof j!="string"&&typeof j!="object"){throw"spHeader must be JSON string or object: "+j}if(typeof j=="object"){f=j;r=JSON.stringify(f)}if(typeof j=="string"){r=j;if(!l.isSafeJSONString(r)){throw"JWS Head is not safe JSON string: "+r}f=l.readSafeJSONString(r)}k=d;if(typeof d=="object"){k=JSON.stringify(d)}if((b==""||b==null)&&f.alg!==undefined){b=f.alg}if((b!=""&&b!=null)&&f.alg===undefined){f.alg=b;r=JSON.stringify(f)}if(b!==f.alg){throw"alg and sHeader.alg doesn't match: "+b+"!="+f.alg}var e=null;if(l.jwsalg2sigalg[b]===undefined){throw"unsupported alg name: "+b}else{e=l.jwsalg2sigalg[b]}var c=utf8tob64u(r);var h=utf8tob64u(k);var p=c+"."+h;var o="";if(e.substr(0,4)=="Hmac"){if(n===undefined){throw"mac key shall be specified for HS* alg"}var i=new KJUR.crypto.Mac({alg:e,prov:"cryptojs",pass:n});i.updateString(p);o=i.doFinal()}else{if(e.indexOf("withECDSA")!=-1){var q=new KJUR.crypto.Signature({alg:e});q.init(n,m);q.updateString(p);hASN1Sig=q.sign();o=KJUR.crypto.ECDSA.asn1SigToConcatSig(hASN1Sig)}else{if(e!="none"){var q=new KJUR.crypto.Signature({alg:e});q.init(n,m);q.updateString(p);o=q.sign()}}}var g=hextob64u(o);return p+"."+g};KJUR.jws.JWS.verify=function(p,t,j){var m=KJUR.jws.JWS;var q=p.split(".");var d=q[0];var l=q[1];var b=d+"."+l;var r=b64utohex(q[2]);var i=m.readSafeJSONString(b64utoutf8(q[0]));var h=null;var s=null;if(i.alg===undefined){throw"algorithm not specified in header"}else{h=i.alg;s=h.substr(0,2)}if(j!=null&&Object.prototype.toString.call(j)==="[object Array]"&&j.length>0){var c=":"+j.join(":")+":";if(c.indexOf(":"+h+":")==-1){throw"algorithm '"+h+"' not accepted in the list"}}if(h!="none"&&t===null){throw"key shall be specified to verify."}if(typeof t=="string"&&t.indexOf("-----BEGIN ")!=-1){t=KEYUTIL.getKey(t)}if(s=="RS"||s=="PS"){if(!(t instanceof RSAKey)){throw"key shall be a RSAKey obj for RS* and PS* algs"}}if(s=="ES"){if(!(t instanceof KJUR.crypto.ECDSA)){throw"key shall be a ECDSA obj for ES* algs"}}if(h=="none"){}var n=null;if(m.jwsalg2sigalg[i.alg]===undefined){throw"unsupported alg name: "+h}else{n=m.jwsalg2sigalg[h]}if(n=="none"){throw"not supported"}else{if(n.substr(0,4)=="Hmac"){var k=null;if(t===undefined){throw"hexadecimal key shall be specified for HMAC"}var g=new KJUR.crypto.Mac({alg:n,pass:t});g.updateString(b);k=g.doFinal();return r==k}else{if(n.indexOf("withECDSA")!=-1){var f=null;try{f=KJUR.crypto.ECDSA.concatSigToASN1Sig(r)}catch(o){return false}var e=new KJUR.crypto.Signature({alg:n});e.init(t);e.updateString(b);return e.verify(f)}else{var e=new KJUR.crypto.Signature({alg:n});e.init(t);e.updateString(b);return e.verify(r)}}}};KJUR.jws.JWS.verifyJWT=function(d,j,l){var h=KJUR.jws.JWS;var i=d.split(".");var c=i[0];var g=i[1];var m=c+"."+g;var k=b64utohex(i[2]);var f=h.readSafeJSONString(b64utoutf8(c));var e=h.readSafeJSONString(b64utoutf8(g));if(f.alg===undefined){return false}if(l.alg===undefined){throw"acceptField.alg shall be specified"}if(!h.inArray(f.alg,l.alg)){return false}if(e.iss!==undefined&&typeof l.iss==="object"){if(!h.inArray(e.iss,l.iss)){return false}}if(e.sub!==undefined&&typeof l.sub==="object"){if(!h.inArray(e.sub,l.sub)){return false}}if(e.aud!==undefined&&typeof l.aud==="object"){if(typeof e.aud=="string"){if(!h.inArray(e.aud,l.aud)){return false}}else{if(typeof e.aud=="object"){if(!h.includedArray(e.aud,l.aud)){return false}}}}var b=KJUR.jws.IntDate.getNow();if(l.verifyAt!==undefined&&typeof l.verifyAt=="number"){b=l.verifyAt}if(e.exp!==undefined&&typeof e.exp=="number"){if(e.exp0){var c=":"+j.join(":")+":";if(c.indexOf(":"+h+":")==-1){throw"algorithm '"+h+"' not accepted in the list"}}if(h!="none"&&t===null){throw"key shall be specified to verify."}if(typeof t=="string"&&t.indexOf("-----BEGIN ")!=-1){t=KEYUTIL.getKey(t)}if(s=="RS"||s=="PS"){if(!(t instanceof RSAKey)){throw"key shall be a RSAKey obj for RS* and PS* algs"}}if(s=="ES"){if(!(t instanceof KJUR.crypto.ECDSA)){throw"key shall be a ECDSA obj for ES* algs"}}if(h=="none"){}var n=null;if(m.jwsalg2sigalg[i.alg]===undefined){throw"unsupported alg name: "+h}else{n=m.jwsalg2sigalg[h]}if(n=="none"){throw"not supported"}else{if(n.substr(0,4)=="Hmac"){var k=null;if(t===undefined){throw"hexadecimal key shall be specified for HMAC"}var g=new KJUR.crypto.Mac({alg:n,pass:t});g.updateString(b);k=g.doFinal();return r==k}else{if(n.indexOf("withECDSA")!=-1){var f=null;try{f=KJUR.crypto.ECDSA.concatSigToASN1Sig(r)}catch(o){return false}var e=new KJUR.crypto.Signature({alg:n});e.init(t);e.updateString(b);return e.verify(f)}else{var e=new KJUR.crypto.Signature({alg:n});e.init(t);e.updateString(b);return e.verify(r)}}}};KJUR.jws.JWS.verifyJWT=function(d,j,l){var h=KJUR.jws.JWS;var i=d.split(".");var c=i[0];var g=i[1];var m=c+"."+g;var k=b64utohex(i[2]);var f=h.readSafeJSONString(b64utoutf8(c));var e=h.readSafeJSONString(b64utoutf8(g));if(f.alg===undefined){return false}if(l.alg===undefined){throw"acceptField.alg shall be specified"}if(!h.inArray(f.alg,l.alg)){return false}if(e.iss!==undefined&&typeof l.iss==="object"){if(!h.inArray(e.iss,l.iss)){return false}}if(e.sub!==undefined&&typeof l.sub==="object"){if(!h.inArray(e.sub,l.sub)){return false}}if(e.aud!==undefined&&typeof l.aud==="object"){if(typeof e.aud=="string"){if(!h.inArray(e.aud,l.aud)){return false}}else{if(typeof e.aud=="object"){if(!h.includedArray(e.aud,l.aud)){return false}}}}var b=KJUR.jws.IntDate.getNow();if(l.verifyAt!==undefined&&typeof l.verifyAt=="number"){b=l.verifyAt}if(e.exp!==undefined&&typeof e.exp=="number"){if(e.exp li {display: none; -webkit-backface-visibility: hidden;} /* Hide the slides before the JS is loaded. Avoids image jumping */ +.flexslider .slides img {width: 100%; display: block;} +.flex-pauseplay span {text-transform: capitalize;} + +/* Clearfix for the .slides element */ +.slides:after {content: "."; display: block; clear: both; visibility: hidden; line-height: 0; height: 0;} +html[xmlns] .slides {display: block;} + +/* No JavaScript Fallback */ +/* If you are not using another script, such as Modernizr, make sure you + * include js that eliminates this class on page load */ +.no-js .slides > li:first-child {display: block;} + + +/* FlexSlider Default Theme +*********************************/ +.flexslider { background: ; position: relative; -webkit-border-radius: 4px; -moz-border-radius: 4px; -o-border-radius: 4px; border-radius: 4px; ,0,0,.2); zoom: 1;} +.flex-viewport {max-height:1500px; -webkit-transition: all 1s ease; -moz-transition: all 1s ease; transition: all 1s ease;} +.loading .flex-viewport {max-height: 300px;} +.flexslider .slides {zoom: 1;} +.carousel li {margin-right: 5px} +/* Direction Nav */ +.flex-direction-nav a {width: 34px; height: 48px; margin: -20px 0 0; display: block; background: url(../images/arrows.png) no-repeat 0 0; position: absolute; top:46%; cursor: pointer; text-indent: -9999px; opacity: 0; -webkit-transition: all .3s ease;} +.flex-direction-nav .flex-next {background-position: 100% 0; right:0px; } +.flex-direction-nav .flex-prev {left: 0px;} +.flexslider:hover .flex-next {opacity: 0.8; right: 0px;} +.flexslider:hover .flex-prev {opacity: 0.8; left: 0px;} +/*--.flexslider:hover .flex-next:hover, .flexslider:hover .flex-prev:hover {opacity: 1;} +.flex-direction-nav .disabled {opacity: .3!important; filter:alpha(opacity=30); cursor: default;}--*/ + +/* Control Nav */ +.flex-control-nav { position: absolute; + bottom: 0px; + text-align: center; + right: 0; + background: rgba(0, 0, 0, 0.49); + width: 100%; + padding: 10px 0 0 0;} +.flex-control-nav li {display:inline-block; zoom: 1; *display: inline;padding:0.2em;} +.flex-control-paging li a {width: 12px; height: 12px; display:inline-block; background:#fff; cursor: pointer; text-indent: -9999px; -webkit-border-radius: 20px; -moz-border-radius: 20px; -o-border-radius: 20px; border-radius: 20px; box-shadow: inset 0 0 3px rgba(0,0,0,0.3); border:;} +.flex-control-paging li a:hover { background:#c36c88; } +.flex-control-paging li a.flex-active { background:#4fc1e9; cursor: default; } + +.flex-control-thumbs {margin: 5px 0 0; position: static; overflow: hidden;} +.flex-control-thumbs li {width: 25%; float: left; margin: 0;} +.flex-control-thumbs img {width: 100%; display: block; opacity: .7; cursor: pointer;} +.flex-control-thumbs img:hover {opacity: 1;} +.flex-control-thumbs .active {opacity: 1; cursor: default;} +/*----flexslider1---*/ +.flexslider1 ol.flex-control-nav{ + width: ; + position: absolute; + bottom: -49px; + text-align: center; + left: 3em; +} +.flexslider1 .flex-control-paging li a{width: 12px; height: 12px;} +.flexslider1.flex-control-nav li{margin: 0 1px;} + +@media screen and (max-width: 860px) { + .flex-direction-nav .flex-prev {opacity: 1; left: 0;} + .flex-direction-nav .flex-next {opacity: 1; right: 0;} +} +@media screen and (max-width: 1024px) { + .flex-control-nav {} + .flexslider1 ol.flex-control-nav {bottom: -28px;left: 1em;} + +} + +@media screen and (max-width: 768px) { + .flex-control-nav {} + .flexslider1 ol.flex-control-nav {bottom: -6px;left: 22em;} + } +@media screen and (max-width: 640px) { + .flex-control-nav {left: 0 + em;} +.flexslider1 ol.flex-control-nav {bottom: 2px;left: 0em;} +} +@media screen and (max-width: 480px) { +.flex-control-nav {left:0em;} +.flexslider1 ol.flex-control-nav {bottom: 1px;left:0em;} +} +@media screen and (max-width: 320px) { +.flex-control-nav {left:0em;} +.flexslider1 ol.flex-control-nav {bottom: 1px;left:0em;} + + +} + +} diff --git a/sample/css/jquery.nouislider.css b/sample/css/jquery.nouislider.css new file mode 100755 index 00000000..f723241c --- /dev/null +++ b/sample/css/jquery.nouislider.css @@ -0,0 +1,172 @@ + +/* Functional styling; + * These styles are required for noUiSlider to function. + * You don't need to change these rules to apply your design. + */ +.noUi-target, +.noUi-target * { +-webkit-touch-callout: none; +-webkit-user-select: none; +-ms-touch-action: none; +-ms-user-select: none; +-moz-user-select: none; +-moz-box-sizing: border-box; + box-sizing: border-box; +} +.noUi-base { + width: 100%; + height: 100%; + position: relative; +} +.noUi-origin { + position: absolute; + right: 0; + top: 0; + left: 0; + bottom: 0; +} +.noUi-handle { + position: relative; + z-index: 1; +} +.noUi-stacking .noUi-handle { +/* This class is applied to the lower origin when + its values is > 50%. */ + z-index: 10; +} +.noUi-stacking + .noUi-origin { +/* Fix stacking order in IE7, which incorrectly + creates a new context for the origins. */ + *z-index: -1; +} +.noUi-state-tap .noUi-origin { +-webkit-transition: left 0.3s, top 0.3s; + transition: left 0.3s, top 0.3s; +} +.noUi-state-drag * { + cursor: inherit !important; +} + +/* Slider size and handle placement; + */ +.noUi-horizontal { + height: 8px; + border-radius: 4px; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + -o-border-radius: 4px; + -ms-border-radius: 4px; +} +.noUi-horizontal .noUi-handle { + width: 25px; + height: 25px; + left: -21px; + top: -8px; + cursor: pointer; +} +.noUi-horizontal.noUi-extended { + padding: 0 15px; +} +.noUi-horizontal.noUi-extended .noUi-origin { + right: -15px; +} +.noUi-vertical { + width: 18px; +} +.noUi-vertical .noUi-handle { + width: 28px; + height: 34px; + left: -6px; + top: -17px; +} +.noUi-vertical.noUi-extended { + padding: 15px 0; +} +.noUi-vertical.noUi-extended .noUi-origin { + bottom: -15px; +} + +/* Styling; + */ +.noUi-background { + background: #e1e4e9; + box-shadow: inset 0px 0px 0px #0076B3, 0px 0px 0px 0px #1B455A, 0px 2px 1px #FFF; + -webkit-box-shadow: inset 0px 0px 0px #0076B3, 0px 0px 0px 0px #1B455A, 0px 2px 1px #FFF; + -moz-box-shadow: inset 0px 0px 0px #0076B3, 0px 0px 0px 0px #1B455A, 0px 2px 1px #FFF; + -o-box-shadow: inset 0px 0px 0px #0076B3, 0px 0px 0px 0px #1B455A, 0px 2px 1px #FFF; +} +.noUi-connect { + background: #4fc1e9; + -webkit-transition: background 450ms; + transition: background 450ms; +} +.noUi-origin { + border-radius: 4px; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + -o-border-radius: 4px; +} +.noUi-target { + border-radius: 4px; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + -o-border-radius: 4px; +} +.noUi-target.noUi-connect { +} +/* Handles and cursors; + */ +.noUi-dragable { + cursor: w-resize; +} +.noUi-vertical .noUi-dragable { + cursor: n-resize; +} +.noUi-handle { + border: 1px solid #D9D9D9; + border-radius: 3px; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + -o-border-radius: 3px; + background: #FFF; + cursor: default; +} +.noUi-active { +} + +/* Handle stripes; + */ +.noUi-handle:before, +.noUi-handle:after { + content: ""; + display: block; + position: absolute; + height: 14px; + width: 1px; + background: #E8E7E6; + left: 5px; + top: 5px; +} +.noUi-handle:after { + left: 17px; +} +.noUi-vertical .noUi-handle:before, +.noUi-vertical .noUi-handle:after { + width: 14px; + height: 1px; + left: 6px; + top: 14px; +} +.noUi-vertical .noUi-handle:after { + top: 17px; +} + +/* Disabled state; + */ +[disabled].noUi-connect, +[disabled] .noUi-connect { + background: #B8B8B8; +} +[disabled] .noUi-handle { + cursor: not-allowed; +} diff --git a/sample/css/style.css b/sample/css/style.css new file mode 100755 index 00000000..b5d34c86 --- /dev/null +++ b/sample/css/style.css @@ -0,0 +1,3415 @@ +/* +Author: W3layout +Author URL: http://w3layouts.com +License: Creative Commons Attribution 3.0 Unported +License URL: http://creativecommons.org/licenses/by/3.0/ +*/ +/* reset */ +html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,img,ins,kbd,q,s,samp,small,strike,strong,sub,sup,tt,var,b,u,i,dl,dt,dd,ol,nav ul,nav li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td,article,aside,canvas,details,embed,figure,figcaption,footer,header,hgroup,menu,nav,output,ruby,section,summary,time,mark,audio,video{margin:0;padding:0;border:0;font-size:100%;font:inherit;vertical-align:baseline;} +article, aside, details, figcaption, figure,footer, header, hgroup, menu, nav, section {display: block;} +ol,ul{list-style:none;margin:0;padding:0;} +blockquote,q{quotes:none;} +blockquote:before,blockquote:after,q:before,q:after{content:'';content:none;} +table{border-collapse:collapse;border-spacing:0;} +/* start editing from here */ +a{text-decoration:none;} +.txt-rt{text-align:right;}/* text align right */ +.txt-lt{text-align:left;}/* text align left */ +.txt-center{text-align:center;}/* text align center */ +.float-rt{float:right;}/* float right */ +.float-lt{float:left;}/* float left */ +.clear{clear:both;}/* clear float */ +.pos-relative{position:relative;}/* Position Relative */ +.pos-absolute{position:absolute;}/* Position Absolute */ +.vertical-base{ vertical-align:baseline;}/* vertical align baseline */ +.vertical-top{ vertical-align:top;}/* vertical align top */ +.underline{ padding-bottom:5px; border-bottom: 1px solid #eee; margin:0 0 20px 0;}/* Add 5px bottom padding and a underline */ +nav.vertical ul li{ display:block;}/* vertical menu */ +nav.horizontal ul li{ display: inline-block;}/* horizontal menu */ +img{max-width:100%;} +/*end reset*/ +html, body{ + font-family: 'Roboto', sans-serif; + font-size: 100%; + background-color:#f0f2f5; + padding:1em 0; +} +.wrap{ + width:98%; + margin:0 auto; +} +.column_left, .column_middle, .column_right { + float: left; + width: 31.3%; +} +/*-- Menu 1 --*/ +.menu_1{ + background:#4fc1e9; + border-bottom: 5px solid #3bafda; + margin-bottom:2em; +} +.menu_1-box{ + padding:1em; +} +.menu_1_left{ + float:left; + width:80px; + height:50px; + background:url(../images/menu_1_left.png)no-repeat 0px; + cursor: pointer; + display:block; +} +.menu_1_right{ + float:right; + width:80px; + height:50px; + background:url(../images/menu_1_right.png)no-repeat 0px; + cursor: pointer; + display:block; + position:relative; +} +.menu_1_left_nav{ + display: none; + padding:0; + text-align:center; + width:100%; +} +.menu_1_left_nav li.last_menu, .menu_1_right_nav li.last_menu, .menu_2_right_nav li.last_menu, .menu_3_left_nav li.last_menu, .menu_3_right_nav li.last_menu, .menu_4_left_nav li.last_menu, .menu_4_right_nav li.last_menu{ + border-bottom: none; +} +.menu_1_left_nav li{ + display: block; + border-bottom: 2px ridge #65D6FF; +} +.menu_1_left_nav li a{ + display: block; + color:#fff; + font-size:1em; + text-transform:uppercase; + padding:10px; + font-family: 'Roboto', sans-serif; + font-weight:500; + text-decoration:none; + } +.menu_1_right_nav{ + display: none; + text-align: center; + width: 204px; + position: absolute; + right: -12%; + top: 103%; + z-index: 1; + background: #4fc1e9; + padding: 2em 0 0.5em; + border-radius: 0 0 8px 7px; + border-bottom: 4px solid #3BAFDA; + transition:0.5s all; +} +.menu_1_right_nav li{ + display: block; + border-bottom: 2px ridge #65D6FF; +} +.menu_1_right_nav li a{ + display: block; + color:#fff; + font-size:1em; + text-transform:uppercase; + padding:10px; + font-family: 'Roboto', sans-serif; + font-weight:500; + + text-decoration:none; +} +span.menu_1_right:hover ul.menu_1_right_nav { + display: block; +} +.menu_1 h2{ + width: 61%; + float: left; + font-size: 1.5em; + text-transform: uppercase; + font-weight: 500; + text-align: center; + color: #fff; + line-height: 50px; +} +/*-- Menu 1 --*/ +/*-- Menu 2 --*/ +.menu_2{ + background:#4fc1e9; + padding:1em; + border-bottom: 5px solid #3bafda; + margin-bottom:2em; +} +.menu_2_left{ + float:left; + width:120px; + height:50px; + background:url(../images/menu_2_left.png)no-repeat 0px; + cursor: pointer; + display:block; +} +.menu_2_left:hover{ + opacity:0.9; +} +.menu_2_right{ + float:right; + width:80px; + height:50px; + background:url(../images/menu_1_right.png)no-repeat 0px; + cursor: pointer; + display:block; + position:relative; +} +.menu_2_right_nav{ + display: none; + text-align: center; + width: 204px; + position: absolute; + right: -12%; + top: 103%; + z-index: 1; + background: #4fc1e9; + padding: 2em 0 0.5em; + border-radius: 0 0 8px 7px; + border-bottom: 4px solid #3BAFDA; + transition:0.5s all; +} +.menu_2_right_nav li{ + display: block; + border-bottom: 2px ridge #65D6FF; +} +.menu_2_right_nav li a{ + display: block; + color:#fff; + font-size:1em; + text-transform:uppercase; + padding:10px; + font-family: 'Roboto', sans-serif; + font-weight:500; + + text-decoration:none; +} +span.menu_2_right:hover ul.menu_2_right_nav { + display: block; +} +.menu_2 h2{ + width:51%; + float:left; + font-size:1.5em; + text-transform:uppercase; + font-weight:500; + text-align:center; + color:#fff; + line-height: 50px; +} +/*-- Menu 2 --*/ +/*-- Menu 3 --*/ +.menu_3{ + background:#4fc1e9; + border-bottom: 5px solid #3bafda; + margin-bottom:2em; +} +.menu_3_left{ + float:left; + width:64px; + height:50px; + background:url(../images/menu_3_left.png)no-repeat 0px; + cursor: pointer; + display:block; +} +.menu_3_right{ + float:right; + width:64px; + height:50px; + background:url(../images/menu_3_right.png)no-repeat 0px; + cursor: pointer; + display:block; + position:relative; +} +.menu_3_left_nav{ + display: none; + padding:0; + text-align:center; + width:100%; +} +.menu_3_left_nav li{ + display: block; + border-bottom:2px ridge #65D6FF; +} +.menu_3_left_nav li a{ + display: block; + color:#fff; + font-size:1em; + text-transform:uppercase; + padding:10px; + font-family: 'Roboto', sans-serif; + font-weight:500; + text-decoration:none; +} +.menu_3_right_nav{ + display: none; + text-align: center; + width: 204px; + position: absolute; + right: -15%; + top: 103%; + z-index: 1; + background: #4fc1e9; + padding: 2em 0 0.5em; + border-radius: 0 0 8px 7px; + border-bottom: 4px solid #3BAFDA; + transition:0.5s all; +} +.menu_3_right_nav li{ + display: block; + border-bottom: 2px ridge #65D6FF; +} +.menu_3_right_nav li a{ + display: block; + color:#fff; + font-size:1em; + text-transform:uppercase; + padding:10px; + font-family: 'Roboto', sans-serif; + font-weight:500; + text-decoration:none; +} +span.menu_3_right:hover ul.menu_3_right_nav { + display: block; +} +.menu_3 h2{ + width:61%; + float:left; + font-size:1.5em; + text-transform:uppercase; + font-weight:500; + text-align:center; + color:#fff; + line-height: 50px; +} +/*-- Menu 3 --*/ +/*-- Menu 4 --*/ +.menu_4{ + background:#4fc1e9; + border-bottom: 5px solid #3bafda; + margin-bottom:2em; +} +.menu_4_left{ + float:left; + width:80px; + height:70px; + background:url(../images/menu_4_left.png)no-repeat 15px #3bafda; + cursor: pointer; + display:block; +} +.menu_4_right{ + float:right; + width:80px; + height:70px; + background:url(../images/menu_4_right.png)no-repeat 15px #3bafda; + cursor: pointer; + display:block; + position:relative; +} +.menu_4_left_nav{ + display: none; + padding:0; + text-align:center; + width:100%; + background:#3bafda; +} +.menu_4_left_nav li{ + display: block; + border-bottom:2px ridge #65D6FF; +} +.menu_4_left_nav li a{ + display: block; + color:#fff; + font-size:1em; + text-transform:uppercase; + padding:10px; + font-family: 'Roboto', sans-serif; + font-weight:500; + text-decoration:none; +} +.menu_4_right_nav{ + display: none; + text-align: center; + width: 204px; + position: absolute; + right: 0%; + top: 99%; + z-index: 1; + background: #3BAFDA; + padding: 2em 0 0.5em; + border-radius: 0 0 8px 7px; + border-bottom: 4px solid #3BAFDA; + transition: 0.5s all; +} +.menu_4_right_nav li{ + display: block; + border-bottom: 2px ridge #65D6FF; +} +.menu_4_right_nav li a{ + display: block; + color:#fff; + font-size:1em; + text-transform:uppercase; + padding:10px; + font-family: 'Roboto', sans-serif; + font-weight:500; + + text-decoration:none; +} +span.menu_4_right:hover ul.menu_4_right_nav { + display: block; +} +.menu_middle{ + width:63%; + float:left; + text-align:center; +} +.menu_middle ul{ + padding:20px 0 0 0; + margin:0; +} +.menu_middle ul li{ + display:inline-block; + margin:0 10px; +} +.menu_middle ul li a{ + width:35px; + height:35px; + display:inline-block; +} +.menu_middle ul li a.notif{ + background:url(../images/notify.png); +} +.menu_middle ul li a.likes{ + background:url(../images/likes.png); +} +.menu_middle ul li a.request{ + background:url(../images/request.png); +} +.request{ + position:relative; +} +.l_count{ + position:absolute; + background:#ed5565; + border-radius:50%; + color:#fff; + padding: 3px 7px; + font-size: 1em; + right: -22%; + top: -5%; +} +/*-- Menu 4 --*/ +/*-- Menu 5 --*/ +.menu_5{ + background:#4fc1e9; + border-bottom: 5px solid #3bafda; + margin-bottom:2em; +} +.menu_5 ul{ + padding:0; + margin:0; +} +.menu_5 ul li { + display: inline-block; + border-right:2px ridge #65D6FF; + padding:5px 0; + text-align: center; + width: 19.4%; + margin-left: -2.5px; +} +.menu_5 ul li a{ + display:block; + text-align:center; + line-height:1.6em; + text-decoration:none; +} +.menu_5 ul li:hover, .men_5_active{ + background:#3BAFDA; + transition:0.5s all; +} +.menu_5 ul li a span{ + width:32px; + height:32px; + display: block; + margin:0 auto; +} +.menu_5 ul li a p{ + font-size: 0.8125em; + color: #fff; + margin: 0; + font-weight: 500; +} +.men_5l{ + margin:0 !important; + border-radius: 8px 0 0 0; +} +.men_52{ + border-radius: 0px 8px 0 0; + border-right: 0!important; +} +/*-- menu 6 --*/ +.menu_6 ul li{ + padding: 12px 0;l +} +/*-- menu 6 --*/ +/*-- menu 7 --*/ +ul.menu_7{ + padding:0; + margin:0 0 2em; + background:#4fc1e9; + border-bottom: 5px solid #3bafda; +} +ul.menu_7 li{ + width:19.4%; + display: inline-block; + background: #4fc1e9; + text-align: center; + margin-left: -2.5px; + border-right: 2px ridge #65D6FF; +} +ul.menu_7 li.last_6{ + border-right:0; +} +ul.menu_7 li.men_53{ + border-right:0; +} +ul.menu_7 li a{ + font-size:0.8125em; + text-decoration: none; + font-weight: 300; + color: #fff; + padding: 1em 0; + display: block; + line-height: 1.5em; + +} +ul.menu_7 li a span{ + font-weight:700; + font-size: 14px; +} +ul.menu_7 li a:hover, .menu_7_active{ + background:#3bafda; + transition:0.5s all; +} +.men_71 a:hover{ + border-radius: 7px 0 0 0; +} +.men_71{ + margin:0!important; + border-radius: 7px 0 0 0; +} +ul.menu_7 li a img{ + margin-top:-20px; +} + +/*-- menu 7 --*/ +/*-- Search bar --*/ +.search{ + background:#4fc1e9; + border-bottom: 5px solid #3bafda; + padding:1em 1.5em; +} +.search input[type="text"]{ + width:60%; + background:#3bafda url(../images/serch_plus.png) no-repeat 14px; + border-radius:25px; + box-shadow:inset 0 1px 8px #5AA4C0; + -webkit-box-shadow:inset 0 1px 8px #5AA4C0; + -moz-box-shadow:inset 0 1px 8px #5AA4C0; + -o-box-shadow:inset 0 1px 8px #5AA4C0; + padding:10px 10px 10px 52px; + outline:none; + -webkit-appearance: none; + font-size:1em; + color:#fff; + border:none; + font-family: 'Roboto', sans-serif; +} +.search input[type="submit"]{ + background: #3bafda; + border-radius: 25px; + border: none; + padding: 11px; + width: 24%; + outline: none; + -webkit-appearance: none; + text-transform: uppercase; + font-size: 1em; + color: #fff; + font-family: 'Roboto', sans-serif; + box-shadow:inset 0 1px 8px #5AA4C0; + -webkit-box-shadow:inset 0 1px 8px #5AA4C0; + -moz-box-shadow:inset 0 1px 8px #5AA4C0; + -o-box-shadow:inset 0 1px 8px #5AA4C0; + cursor: pointer; +} +.search input[type="submit"]:hover{ + transition: 0.5s all; + background:#2D9CC5; +} +::-webkit-input-placeholder { + color: #fff; +} +/*-- Search bar --*/ +/*-- Twitter Widget 1 --*/ +.twitter_widget_1{ + margin:2em 0; + background:#fff; + border-bottom:4px solid #e3e4e8; +} +.twit_1_banner{ + background:url(../images/twit_1_ban.jpg); + background-size:cover; + padding:2em 0; + text-align:center; +} +ul.twit_nav li{ + width: 33.29999%; + text-align: center; + display: inline-block; + margin-left: -2.5px; +} +.latest_tweets{ + padding:1em 1.5em; +} +.latest_tweets h3{ + font-size:1.5em; + font-weight:300; + color: #abb1b5; + margin: 0 0 0.5em; +} +.latest_tweets p{ + font-weight:300; + font-size:1em; + color:#434a54; + line-height:1.8em; +} +.latest_tweets p a{ + text-decoration: none; + font-weight:500; + color:#000; +} + +/*-- Twitter Widget 1 --*/ +/*-- Twitter Widget 2 --*/ +.twitter_widget_2{ + margin:2em 0; + background:#fff; + border-bottom:4px solid #e3e4e8; +} +.twit_2_banner{ + background:url(../images/twit_1_ban.jpg); + background-size:cover; + padding:2em 0; + text-align:center; +} +ul.twit_nav{ + padding:0; +} +ul.twit_nav li a{ + padding:5px 0; + display:block; + text-decoration:none; + background:#f7f8fa; + border-right:1px ridge #e3e4e8; +} +ul.twit_nav li a p{ + font-size:1em; + line-height:1.2em; + font-weight:500; + color:#818a8c; +} +ul.twit_nav li a:hover{ + background: #FCFCFC; + color: #ccc; + border-bottom: 3px solid #bada55 !important; + margin-right: 0; + -moz-background-clip: padding-box; + -webkit-background-clip: padding-box; + background-clip: padding-box; + border-radius: 4px 0 0 4px; + -moz-border-radius: 4px 0 0 4px; + -webkit-border-radius: 4px 0 0 4px; + -webkit-box-shadow: -2px 2px 4px 0 rgba(0, 0, 0, 0.05); + -moz-box-shadow: -2px 2px 4px 0 rgba(0, 0, 0, 0.05); + box-shadow: -2px 2px 4px 0 rgba(0, 0, 0, 0.05); + transition:0.5s all; +} +ul.twit_nav li a p span{ + font-weight:300; +} +ul.twit_nav li a.twit_1{ + border-bottom:3px solid #fc6e51; +} +ul.twit_nav li a.twit_2{ + border-bottom:3px solid #48cfad; +} +ul.twit_nav li a.twit_3{ + border-right:0px; +} +ul.twit_nav li a.twit_3{ + border-bottom:3px solid #ac92ec; +} +.compose_twit{ + padding:1em 1.5em; +} +.compose_twit h3{ + font-size: 1.3em; + font-weight: 300; + color: #abb1b5; + margin: 0 0 0.5em; +} +.compose_twit textarea{ + width:92%; + padding:10px; + border:1px solid #d7d8dd; + font-size:1.1em; + font-style: italic; + height:80px; + outline:none; + resize:none; + color:#000; +} +ul.twit_1_social{ + padding:0.5em 0; + text-align:center; + width:100%; + background:#f6f8fa; + margin:0; +} +ul.twit_1_social li{ + display: inline-block; + margin:0 15px; +} +ul.twit_1_social li a{ + width:32px; + height:32px; + display: inline-block; +} +ul.twit_1_social li a.s_twit{ + background:url(../images/twit_1_social_twitter.png); +} +ul.twit_1_social li a.s_dribble{ + background:url(../images/twit_1_social_dribble.png); +} +ul.twit_1_social li a.s_vimeo{ + background:url(../images/twit_1_social_vimeo.png); +} +ul.twit_1_social li a.s_fb{ + background:url(../images/twit_1_social_fb.png); +} +ul.twit_1_social li a.s_twit:hover{ + background:url(../images/twit_1_social_twitterh.png); +} +ul.twit_1_social li a.s_dribble:hover{ + background:url(../images/twit_1_social_dribbleh.png); +} +ul.twit_1_social li a.s_vimeo:hover{ + background:url(../images/twit_1_social_vimeoh.png); +} +ul.twit_1_social li a.s_fb:hover{ + background:url(../images/twit_1_social_fbh.png); +} +/*-- Twitter Widget 2 --*/ +/*--weather_1--*/ +.weather_1{ + transition: 0.5s all; + -webkit-transition: 0.5s all; + -moz-transition: 0.5s all; + -o-transition: 0.5s all; + -ms-transition: 0.5s all; + background:#4fc1e9; +} +.weather_1, .strip_1, i.point, .menu_1, .menu_2, .menu_3, .menu_4, .menu_5, ul.menu_7, .search, .g-btnn, .blue, .twitter_widget_1, .twitter_widget_2, .facts, .audio-plyer{ + border-radius:4px; + -webkit-border-radius:4px; + -moz-border-radius:4px; + -o-border-radius:4px; +} +.strip_1 { + background:#3bafda; +} +i.point{ + width: 90px; + height: 76px; + background: url(../images/img_sprite.png)no-repeat #4fb7de 16px 10px; + float: left; +} +h4.head-1{ + color: #fff; + font-size: 1.5em; + text-transform: uppercase; + display: block; + text-align: center; + line-height: 3.2em; + font-weight: 400; +} +.strip_2{ + padding: 1em 0; + border-bottom: 1px solid #229CC9; +} +.strip_2-border{ + width:55%; + margin:0 auto; +} +.m_1{ + display: inline-block; + width: 49%; +} +.m_1 span{ + color:#fff; + text-transform:uppercase; + font-size:1.1em; + font-weight:500; +} +sup { + top: -.5em; +} +sub, sup { + position: relative; + font-size: 75%; + line-height: 0; + vertical-align: baseline; +} +.m_1 p{ + font-size:70px; + color:#fff; + font-weight: 500; +} +.temp_list li a { + display: block; + color: #9099B7; + font-size:1.1em; + text-transform: uppercase; + padding: 20px 25px 15px 25px; + -webkit-transition: all 0.5s ease-in-out; + -moz-transition: all 0.5s ease-in-out; + -o-transition: all 0.5s ease-in-out; + transition: all 0.5s ease-in-out; +} +.temp_list li{ + border-bottom: 1px solid #229CC9; + border-top: 1px solid #75d2f0; +} +.temp_list li.last{ + border-bottom:none; +} +.temp_list li a:nth-child(6){ + border-bottom:none; +} +.temp_list li a span { + color: #FFF; + -webkit-transition: all 0.5s ease-in-out; + -moz-transition: all 0.5s ease-in-out; + -o-transition: all 0.5s ease-in-out; + transition: all 0.5s ease-in-out; +} +.temp_list li a label { + color: #FFF; + font-size:1.1em; + float: right; + letter-spacing: 1px; +} +.temp_list li a label em { + font-size: 0.5em; + vertical-align: top; +} +.temp_list li a label i > img { + vertical-align: middle; + margin-top: -5px; +} +.temp_list li a:hover, .temp_list li.active a { + background: #3bafda; + box-shadow: inset 0 1px 8px #5AA4C0; + -webkit-box-shadow: inset 0 1px 8px #5AA4C0; + -moz-box-shadow: inset 0 1px 8px #5AA4C0; + -o-box-shadow: inset 0 1px 8px #5AA4C0; +} +/*--column_middle--*/ +.column_middle { + margin: 0 3%; +} +/*--buttons--*/ +.big-buttons-col1 li{ + display:inline-block; +} +.big-buttons-col2 li { + display:inline-block; +} +.big-buttons-col1 li.middle, .big-buttons-col2 li.middle{ + margin:0 24%; +} +.big-buttons-col1 { + margin-bottom: 1.5em; +} +.col_1{ + padding:0.5em 0; +} +.g-btngreen { + font-size: 1em; + background: url(../images/img_sprite.png)no-repeat -76px -9px; + color: #fff; + height: 42px; + width: 78px; + display: inline-block; + text-align: center; + font-weight: 400; + cursor: pointer; + border: none; + outline: none; + vertical-align: middle; +} +.g-btnn { + font-size: 1em; + background: #4fc1e9; + color: #fff; + padding: 10px 15px; + display: inline-block; + text-align: center; + font-weight: 500; + border: none; + outline: none; + cursor: pointer; + font-family: 'Roboto', sans-serif; +} +.g-btnh { + font-size: 1em; + background: url(../images/img_sprite.png)no-repeat -165px -9px; + color: #fff; + height: 42px; + width: 78px; + display: inline-block; + text-align: center; + font-weight: 400; + cursor: pointer; + border: none; + outline: none; + vertical-align: middle; +} +.blue{ + font-size: 1em; + border:2px solid #4fc1e9; + color:#4fc1e9; + padding:8px 15px; + display: inline-block; + text-align: center; + font-weight: 500; + outline: none; + cursor: pointer; + font-family: 'Roboto', sans-serif; + background:none; +} +.blue1:hover, .blue2:hover, .tag8:hover, .tag9:hover, .g-btnn:hover{ + background:#47bbe3; +} +.green-tag:hover { + background: url(../images/tag_close.png) no-repeat #3AAFD8 90% 50%; +} +.tag2:hover { + background: url(../images/set.png) no-repeat #3AAFD8 90% 50%; +} +.tag3:hover{ + background: url(../images/mail1.png) no-repeat #3AAFD8 90% 50%; +} +.tag4:hover{ + background: url(../images/left_arrow.png) no-repeat #3AAFD8 90% 50%; +} +.shop:hover{ + background: url(../images/shop.png) no-repeat #3AAFD8 90% 50%; +} +.tag7:hover{ + background: url(../images/heart.png) no-repeat #3AAFD8 90% 50%; +} +.tag10:hover{ + background:#4fc1e9; + box-shadow: 0px 2px 0px 0px #3bafda; + -webkit-box-shadow: 0px 2px 0px 0px #3bafda; + -moz-box-shadow: 0px 2px 0px 0px #3bafda; + -o-box-shadow: 0px 2px 0px 0px #3bafda; +} +.blue:hover{ + border:2px solid #3FB3DB; +} +.red:hover{ + border:2px solid #DB3A4B; +} +.green:hover{ + border:2px solid #83BD44; +} +.tag5:hover{ + background:#A1A0A0; +} +.tag6:hover{ + background:#91C756; +} +.green1:hover{ + background:#91C756; + border:2px solid #91C756; +} +.red1:hover{ + background:#DD4152; + border:2px solid #DD4152; +} +.g-btngreen:hover, .g-btnh:hover{ + opacity:0.8; +} +.grey_tag1:hover{ + background:#D6D9DD; +} +.grey_tag:hover{ + background: url(../images/close.png) no-repeat #D6D9DD 90% 50%; +} +.blue_tag:hover{ + background: url(../images/plus.png) no-repeat #3AAFD8 90% 50%; +} + +.red{ + border:2px solid #ed5565; + color:#ed5565; +} +.green{ + border:2px solid #a0d468; + color:#a0d468; +} +.blue1{ + background:#4fc1e9; + color:#fff; +} +.red1{ + background:#ed5565; + color:#fff; +} +.green1{ + background:#a0d468; + color:#fff; +} +ul.white-tag-list{ + padding: 0; + margin: 1.5em 0 0 0; + list-style: none; +} +.white-tag-list li { + display: inline-block; +} +.white-tag-list li.tag2{ + margin:0 17%; +} + +.green-tag { + background: url(../images/tag_close.png) no-repeat #4fc1e9 90% 50%; + -webkit-transition: all 0.5s ease-in-out; + -moz-transition: all 0.5s ease-in-out; + -o-transition: all 0.5s ease-in-out; + transition: all 0.5s ease-in-out; + padding: 10px 40px 10px 10px; + color: #FFF; + border: none; + outline: none; + font-size: 1em; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + -o-border-radius: 4px; + border-radius: 4px; + display: block; + cursor: pointer; + font-family: 'Roboto', sans-serif; + box-shadow: 0px 2px 0px 0px #3bafda; + -webkit-box-shadow: 0px 2px 0px 0px #3bafda; + -moz-box-shadow: 0px 2px 0px 0px #3bafda; + -o-box-shadow: 0px 2px 0px 0px #3bafda; +} +ul.white-tag-list1 li{ + display:inline-block; +} +ul.white-tag-list1{ + margin:1em 0 0 0; +} +ul.white-tag-list1 li.middle1{ + margin:0 17%; +} +.tag2, .tag3, .tag4, .tag5, .tag6{ + -webkit-border-radius:4px; + -moz-border-radius: 4px; + -o-border-radius: 4px; + border-radius: 4px; +} +.tag2{ + background: url(../images/set.png) no-repeat #4fc1e9 90% 50%; + +} +.tag3{ + background: url(../images/mail1.png) no-repeat #4fc1e9 90% 50%; + +} +.tag4{ + background: url(../images/left_arrow.png) no-repeat #4fc1e9 90% 50%; + +} +.tag5{ + background:#b4b4b4; + transition: all 0.5s ease-in-out; + padding: 10px 20px; + color: #FFF; + border: none; + outline: none; + font-size: 1em; + display: block; + cursor: pointer; + font-family: 'Roboto', sans-serif; + box-shadow: 0px 2px 0px 0px #989898; + -webkit-box-shadow: 0px 2px 0px 0px #989898; + -moz-box-shadow: 0px 2px 0px 0px #989898; + -o-box-shadow: 0px 2px 0px 0px #989898; +} +.tag6{ + background:#a0d468; + transition: all 0.5s ease-in-out; + padding: 10px 20px; + color: #FFF; + border: none; + outline: none; + font-size: 1em; + display: block; + cursor: pointer; + font-family: 'Roboto', sans-serif; + box-shadow: 0px 2px 0px 0px #80b448; + -webkit-box-shadow: 0px 2px 0px 0px #80b448; + -moz-box-shadow: 0px 2px 0px 0px #80b448; + -o-box-shadow: 0px 2px 0px 0px #80b448; +} +.shop { + background: url(../images/shop.png) no-repeat #4fc1e9 90% 50%; + -webkit-transition: all 0.5s ease-in-out; + -moz-transition: all 0.5s ease-in-out; + -o-transition: all 0.5s ease-in-out; + transition: all 0.5s ease-in-out; + padding: 10px 50px 10px 10px; + color: #FFF; + border: none; + outline: none; + font-size: 1em; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + -o-border-radius: 4px; + border-radius: 4px; + display: block; + cursor: pointer; + font-family: 'Roboto', sans-serif; + box-shadow: 0px 2px 0px 0px #3bafda; + -webkit-box-shadow: 0px 2px 0px 0px #3bafda; + -moz-box-shadow: 0px 2px 0px 0px #3bafda; + -o-box-shadow: 0px 2px 0px 0px #3bafda; +} +.tag7{ + background: url(../images/heart.png) no-repeat #4fc1e9 90% 50%; +} +ul.white-tag-list li.tag8{ + margin-right:34%; +} +.blue_but{ + background:none; + -webkit-transition: all 0.5s ease-in-out; + -moz-transition: all 0.5s ease-in-out; + -o-transition: all 0.5s ease-in-out; + transition: all 0.5s ease-in-out; + padding: 10px 20px; + color: #FFF; + border: none; + outline: none; + font-size: 1em; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + -o-border-radius: 4px; + border-radius: 4px; + display: block; + cursor: pointer; + font-family: 'Roboto', sans-serif; + + font-weight: 500; +} +.tag8{ + background:#5ccaf0; + box-shadow: 0px 2px 0px 0px #48b7e0; + -webkit-box-shadow: 0px 2px 0px 0px #48b7e0; + -moz-box-shadow: 0px 2px 0px 0px #48b7e0; + -o-box-shadow: 0px 2px 0px 0px #48b7e0; +} +.tag9{ + background:#48b7e0; + box-shadow: 0px 2px 0px 0px #39a6ce; + -webkit-box-shadow: 0px 2px 0px 0px #39a6ce; + -moz-box-shadow: 0px 2px 0px 0px #39a6ce; + -o-box-shadow: 0px 2px 0px 0px #39a6ce; +} +.tag10{ + background:#434a54; + box-shadow: 0px 2px 0px 0px #25282e; + -webkit-box-shadow: 0px 2px 0px 0px #25282e; + -moz-box-shadow: 0px 2px 0px 0px #25282e; + -o-box-shadow: 0px 2px 0px 0px #25282e; +} +ul.white-tag-list li.middle2{ + margin:0 20%; +} +ul.last_but{ + margin:1em 0 0 0; +} +ul.last_but li{ + display:inline-block; +} +ul.last_but li.middle3{ + margin:0 22%; +} +.blue2{ + background:#4fc1e9; + -webkit-transition: all 0.5s ease-in-out; + -moz-transition: all 0.5s ease-in-out; + -o-transition: all 0.5s ease-in-out; + transition: all 0.5s ease-in-out; + padding: 10px 20px; + color: #FFF; + border: none; + outline: none; + font-size: 1em; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + -o-border-radius: 4px; + border-radius: 4px; + display: block; + cursor: pointer; + font-family: 'Roboto', sans-serif; + font-weight: 500; + +} +.blue3{ + box-shadow: inset 0px 1px 0px #0076B3, 0px 0px 0px 0px #1B455A, 0px 2px 1px #FFF; + -webkit-box-shadow: inset 0px 1px 0px #0076B3, 0px 0px 0px 0px #1B455A, 0px 2px 1px #FFF; + -moz-box-shadow: inset 0px 1px 0px #0076B3, 0px 0px 0px 0px #1B455A, 0px 2px 1px #FFF; + -o-box-shadow: inset 0px 1px 0px #0076B3, 0px 0px 0px 0px #1B455A, 0px 2px 1px #FFF; +} +/*-----radio-switch-buttons-----*/ +.toggle { + margin: 1em 0 3em 0; +} +.switech-grid { + float:left; + width:50%; + margin-top:15px; +} +.switch { + margin:0px auto; + position: relative; + margin-top:35px; +} +.switch:first-child{ + margin-top:0; +} +.switch label { + width: 100%; + height: 100%; + position: relative; + display: block; +} +.switch input { + top: 0; + right: 0; + bottom: 0; + left: 0; + opacity: 0; + z-index: 100; + position: absolute; + width: 100%; + height: 100%; + cursor: pointer; +} +.demo5{ + float:left; + margin-right:10%; +} +.demo6{ + float:left; +} +.switch.demo3 { + width:66px; + height:35px; +} +.switch.demo3 label { + display: block; + width: 100%; + height: 100%; + background:#4fc1e9; + border-radius:40px; + color: #FFF; + box-shadow: inset 0px 0px 0px #0076B3, 0px 0px 0px 0px #1B455A, 0px 2px 1px #FFF; + -webkit-box-shadow: inset 0px 0px 0px #0076B3, 0px 0px 0px 0px #1B455A, 0px 2px 1px #FFF; + -moz-box-shadow: inset 0px 0px 0px #0076B3, 0px 0px 0px 0px #1B455A, 0px 2px 1px #FFF; + -o-box-shadow: inset 0px 0px 0px #0076B3, 0px 0px 0px 0px #1B455A, 0px 2px 1px #FFF; +} +.switch.demo3 label:after { + content: ""; + position: absolute; + z-index: -1; + top: -8px; right: -8px; bottom: -8px; left: -8px; + border-radius: inherit; +} +.switch.demo3 label:before { + content: ""; + position: absolute; + z-index: -1; + top: -5px; right: -5px; bottom: -5px; left: -5px; + border-radius: inherit; + /*--background:rgba(51, 92, 140, 0.37);--*/ +} +.switch.demo3 label i { + display: block; + height: 90%; + width: 48%; + border-radius: inherit; + position: absolute; + z-index: 2; + right: 49%; + top: 1.5px; + background: #fff; + border: none; + box-shadow: 0 0 4px rgb(46, 46, 46); + -webkit-box-shadow: 0 0 4px rgb(46, 46, 46); + -moz-box-shadow: 0 0 4px rgb(46, 46, 46); + -o-box-shadow: 0 0 4px rgb(46, 46, 46); +} +.switch.demo3 label i:after { + content: ""; + position: absolute; + left:20%; + top:20%; + width:18px; + height:18px; + background:url(../images/sprite.png) no-repeat -43px -133px; + border-radius: inherit; +} +.switch.demo3 label i:before { + content: " "; + text-transform: uppercase; + color:#999999; + font-size:0.8em; + position: absolute; + top: 50%; + margin-top:-8px; + right:-120%; + color:#fff; +} +.switch.demo3 input:checked ~ label { + background:#e5e7ea; + color:#FFF; + +} +.switch.demo3 input:checked ~ label i { + right: -1%; +} +.switch.demo3 input:checked ~ label i:before { + content: " "; + right: 155%; + color:#FFF; +} +/*--toogle_2--*/ +.switch.demo4 { + width:80px; + height:35px; +} +.switch.demo4 label { + display: block; + width: 100%; + height: 100%; + background:#4fc1e9; + border-radius:4px; + -webkit-border-radius:4px; + -moz-border-radius:4px; + -o-border-radius:4px; + color: #FFF; + box-shadow: inset 0px 0px 0px #0076B3, 0px 0px 0px 0px #1B455A, 0px 2px 1px #FFF; + -webkit-box-shadow: inset 0px 0px 0px #0076B3, 0px 0px 0px 0px #1B455A, 0px 2px 1px #FFF; + -moz-box-shadow: inset 0px 0px 0px #0076B3, 0px 0px 0px 0px #1B455A, 0px 2px 1px #FFF; + -o-box-shadow: inset 0px 0px 0px #0076B3, 0px 0px 0px 0px #1B455A, 0px 2px 1px #FFF; + font-size: 1.1em; +} +.switch.demo4 label:after { + content: ""; + position: absolute; + z-index: -1; + top: -8px; right: -8px; bottom: -8px; left: -8px; + border-radius: inherit; +} +.switch.demo4 label:before { + content: ""; + position: absolute; + z-index: -1; + top: -5px; right: -5px; bottom: -5px; left: -5px; + border-radius: inherit; + /*--background:rgba(51, 92, 140, 0.37);--*/ +} +.switch.demo4 label i { + display: block; + height: 90%; + width: 38%; + border-radius:5px; + -webkit-border-radius:5px; + -moz-border-radius:5px; + -o-border-radius:5px; + position: absolute; + z-index: 2; + right: 59%; + top: 1.5px; + background: #fff; + border: none; + box-shadow: 0 0 4px rgb(46, 46, 46); + -webkit-box-shadow: 0 0 4px rgb(46, 46, 46); + -moz-box-shadow: 0 0 4px rgb(46, 46, 46); + -o-box-shadow: 0 0 4px rgb(46, 46, 46); +} +.switch.demo4 label i:after { + content: ""; + position: absolute; + left:20%; + top:20%; + width:18px; + height:18px; + background:url(../images/sprite.png) no-repeat -43px -133px; + border-radius: inherit; +} +.switch.demo4 label i:before { + content: "on"; + text-transform: uppercase; + font-size: 0.8em; + position: absolute; + top: 50%; + margin-top: -7px; + right: -120%; + color: #fff; + font-weight: 700; +} +.switch.demo4 input:checked ~ label { + background:#e5e7ea; + color:#FFF; + font-size:1.1em; +} +.switch.demo4 input:checked ~ label i { + right: -1%; +} +.switch.demo4 input:checked ~ label i:before { + content: "off"; + right: 155%; + color:#a4a9ae; +} +/*--toogle_3 --*/ +.switch.demo7 { + width:80px; + height:35px; +} +.switch.demo7 label { + display: block; + width: 100%; + height: 100%; + background:#4fc1e9; + border-radius:4px; + -webkit- border-radius:4px; + -moz- border-radius:4px; + -o- border-radius:4px; + color: #FFF; + box-shadow: inset 0px 0px 0px #0076B3, 0px 0px 0px 0px #1B455A, 0px 2px 1px #FFF; + -webkit-box-shadow: inset 0px 0px 0px #0076B3, 0px 0px 0px 0px #1B455A, 0px 2px 1px #FFF; + -moz-box-shadow: inset 0px 0px 0px #0076B3, 0px 0px 0px 0px #1B455A, 0px 2px 1px #FFF; + -o-box-shadow: inset 0px 0px 0px #0076B3, 0px 0px 0px 0px #1B455A, 0px 2px 1px #FFF; +} +.switch.demo7 label:after { + content: ""; + position: absolute; + z-index: -1; + top: -8px; right: -8px; bottom: -8px; left: -8px; + border-radius: inherit; +} +.switch.demo7 label:before { + content: ""; + position: absolute; + z-index: -1; + top: -5px; right: -5px; bottom: -5px; left: -5px; + border-radius: inherit; + /*--background:rgba(51, 92, 140, 0.37);--*/ +} +.switch.demo7 label i { + display: block; + height: 90%; + width: 38%; + border-radius:5px; + -webkit-border-radius:5px; + -moz-border-radius:5px; + -o-border-radius:5px; + position: absolute; + z-index: 2; + right: 59%; + top: 1.5px; + background: #fff; + border: none; + box-shadow: 0 0 4px rgb(46, 46, 46); + -webkit-box-shadow: 0 0 4px rgb(46, 46, 46); + -moz-box-shadow: 0 0 4px rgb(46, 46, 46); + -o-box-shadow: 0 0 4px rgb(46, 46, 46); +} +.switch.demo7 label i:after { + content: ""; + position: absolute; + left:20%; + top:20%; + width:18px; + height:18px; + background:url(../images/sprite.png) no-repeat -43px -133px; + border-radius: inherit; +} +.switch.demo7 label i:before { + content: " "; + text-transform: uppercase; + color:#999999; + font-size:0.8em; + position: absolute; + top: 50%; + margin-top:-8px; + right:-120%; + color:#fff; + background: url(../images/img_sprite.png)no-repeat -301px -21px; + width: 22px; + height: 22px; +} +.switch.demo7 input:checked ~ label { + background:#e5e7ea; + color:#FFF; + +} +.switch.demo7 input:checked ~ label i { + right: -1%; +} +.switch.demo7 input:checked ~ label i:before { + content: " "; + right: 155%; + color: #FFF; + background: url(../images/img_sprite.png)no-repeat -261px -21px; + width: 22px; + height: 22px; +} +/*-- tab --*/ +/******** SAP ************/ +.sap_tabs{ + clear:both; + + margin-bottom:13%; + position:relative; +} +.facts, .row_1{ + padding:1em; + border-bottom: 4px solid #e3e4e8; +} +.top1{ + margin-top: 2%; +} +.tab_2{ + background: rgba(0, 0, 0, 0.47); + position: absolute; + top: -55em; + width: 100%; + padding: 1em 0; +} +.tab_1 { + margin: 0 0% 0 19%; +} +.resp-tabs-list { +} +.resp-tab-item:first-child{ + +} +.resp-tab-item{ + border: 1px solid #4fc1e9; + color: #4fc1e9; + font-size: 1em; + background: none; + cursor: pointer; + padding:8px 0; + display: inline-block; + margin: 0; + text-align: center; + list-style: none; + float: left; + width: 25%; + outline: none; + -webkit-transition: all 0.3s ease-out; + -moz-transition: all 0.3s ease-out; + -ms-transition: all 0.3s ease-out; + -o-transition: all 0.3s ease-out; + transition: all 0.3s ease-out; +} +.resp-tab-item:hover { + text-shadow: none; + color: #F27141; +} +.resp-tab-active{ + background:#6cc5d9; + text-shadow: none; + color:#fff; +} +.resp-tabs-container { + padding: 0px; + background-color: #fff; + clear: left; + margin-top: 40px; +} +h2.resp-accordion { + cursor: pointer; + padding: 5px; + display: none; +} +.resp-tab-content { + display: none; +} +.resp-content-active, .resp-accordion-active { + display: block; +} +h2.resp-accordion { + font-size:1em; + margin: 0px; + padding: 10px 15px; + background:#F2F2F2; + margin:10px 0; + color:#555; +} +h2.resp-accordion:hover{ + background:#6CC5D9; + text-shadow: none; + color: #FFF; +} +@media only screen and (max-width:480px) { + .sap_tabs{ + padding-top:0; + } + .resp-tabs-container{ + padding:10px; + } +ul.resp-tabs-list { + display: none; +} +h2.resp-accordion { + display: block; +} +.resp-vtabs .resp-tab-content { + border: 1px solid #C1C1C1; +} +.resp-vtabs .resp-tabs-container { + border: none; + float: none; + width: 100%; + min-height: initial; + clear: none; +} +.resp-accordion-closed { + display: none !important; +} +} + +ul.tab_list{ + list-style: none; + padding: 0; + margin:2% 0 0 4%; +} +ul.tab_list li { + list-style-image: url(../images/tab_plus.png); + margin: 0 22px 10px; +} +ul.tab_list li a { + color: #888; + font-size: 0.95em; + line-height: 1.5em; + vertical-align: top; + text-decoration: none; +} +ul.tab_list li a:hover { + color:#333; +} +.tab_left{ + float: left; + width: 25%; + text-align: center; + margin-right: 12%; +} +.tab_right { + width: 63%; + float: left; +} +.tab_left img, .row_1-left img{ + border-radius:100px; + -webkit-border-radius:100px; + -moz-border-radius:100px; + -o-border-radius:100px; + border:4px solid #d6d7dd; + margin-bottom: 1em; +} +.but2{ + background: #4fc1e9; + padding: 6px 15px; + font-size: 0.85em; + text-transform: uppercase; + font-weight: 300; + border-radius: 4px; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + -o-border-radius: 4px; +} +a.but2{ + color: #fff; +} +.but2:hover{ + background:#3bafda; +} +ul.tab_social { + margin-top: 2.5em; +} +ul.tab_social li { + display: inline-block; + margin-right: 10px; +} +ul.tab_social li a i { + width: 20px; + height: 20px; + display: block; + background: url(../images/img_sprite.png)no-repeat; +} +ul.tab_social li a i.fb { + background-position:-337px -16px; +} +ul.tab_social li a i.tw { + background-position:-370px -17px; +} +ul.tab_social li a i.dribble{ + background-position:-407px -17px; +} +.tab_right h3{ + font-weight:600; + font-size:1.2em; + margin-bottom:0.5em; +} +.tab_right h3 a, .row_1-right h3 a, .facts h3 a{ + color:#989fa9; +} +.tab_right p, .row_1 p, .facts p{ + font-size:0.85em; + line-height:1.8em; + color:#999; + font-weight: 300; +} +.tab_right p a, .row_1 p a{ + color:#4fc1e9; +} +.tab_right p a:hover, .tab_right h3 a:hover, .row_1-right h3 a:hover, .row_1 p a:hover{ + color:#3aaad3; +} +/*--weather_2--*/ +.weather_2{ + background: url(../images/weather_2.jpg)no-repeat center top; + background-size: cover; + -webkit-background-size: cover; + -moz-background-size: cover; + -o-background-size: cover; + min-height: 500px; + margin-top:20px; + border-radius: 4px; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + -o-border-radius: 4px; +} +/*--.weather_2-wrap{ + border-radius:4px; +}--*/ +ul.w_strip1{ + background: rgba(0, 0, 0, 0.15); + padding: 1em; + border-top-left-radius: 4px; + -webkit-border-top-left-radius: 4px; + -moz-border-top-left-radius: 4px; + -o-border-top-left-radius: 4px; + border-top-right-radius: 4px; + -webkit-border-top-right-radius: 4px; + -moz-border-top-right-radius: 4px; + -o-border-top-right-radius: 4px; +} +ul.w_strip1 li.w_strip1-left{ + float:left; +} +ul.w_strip1 li.w_strip1-right{ + float:right; +} +ul.w_strip1 li.w_strip1-left p { + font-size: 70px; + color: #fff; + font-weight: 500; + text-shadow: 2px 2px 0px rgb(96, 96, 96); + -webkit-text-shadow: 2px 2px 0px rgb(96, 96, 96); + -moz-text-shadow: 2px 2px 0px rgb(96, 96, 96); + -o-text-shadow: 2px 2px 0px rgb(96, 96, 96); + line-height: 91px; +} +ul.w_strip1 li.w_strip1-right span{ + color: #fff; + text-transform: uppercase; + font-size: 1.1em; + font-weight: 500; + text-shadow: 2px 0px 5px rgb(96, 96, 96); + -webkit-text-shadow: 2px 0px 5px rgb(96, 96, 96); + -moz-text-shadow: 2px 0px 5px rgb(96, 96, 96); + -o-text-shadow: 2px 0px 5px rgb(96, 96, 96); +} +ul.w_strip1 li.w_strip1-left p, h4.head-2{ + +} +i.point1{ + width: 25px; + height: 30px; + background: url(../images/img_sprite.png)no-repeat -15px -12px; + display:inline-block; +} +h4.head-2 { + color: #fff; + font-size: 1.5em; + text-transform: uppercase; + display: block; + text-align: center; + line-height:1.5em; + font-weight: 400; + text-shadow: 2px 0px 5px rgb(96, 96, 96); + -webkit-text-shadow: 2px 0px 5px rgb(96, 96, 96); + -moz-text-shadow: 2px 0px 5px rgb(96, 96, 96); + -o-text-shadow: 2px 0px 5px rgb(96, 96, 96); +} +.day-cal-day { + padding:0; + margin-top: 72%; + background: rgba(13, 13, 13, 0.35); + border-bottom-left-radius: 4px; + -webkit-border-bottom-left-radius: 4px; + -moz-border-bottom-left-radius: 4px; + -o-border-bottom-left-radius: 4px; + border-bottom-right-radius: 4px; + -webkit-border-bottom-right-radius: 4px; + -moz-border-bottom-right-radius: 4px; + -o-border-bottom-right-radius: 4px; +} +.day-cal-day-grid { + width: 14.1%; + float: left; + padding: 4% 0% 4% 10.5%; + border-right: 1px solid #56583A; +} +.day-cal-day-grid p { + font-size: 1.2em; + color: #FFF; + text-transform: uppercase; + font-weight: 500; +} +.day-cal-day-grid i { + width:35px; + height:30px; + display: block; + margin: 2px 0; + background: url(../images/img_sprite.png) no-repeat; +} +.day-cal-day-grid i.d-sun { + background-position:-451px -8px; +} +.day-cal-day-grid i.d-rain { + background-position:-504px -10px; +} +.day-cal-day-grid i.d-cloud { + background-position:-564px -11px; +} +.last-day-cal-day-grid { + margin-right: 0; + border-right:0; +} +.day-cal-day-grid label { + font-size:1.5em; + color: #FFF; + font-weight:600; +} +.day-cal-day-grid sup { + vertical-align:super; + color: #FFF; + font-size:1em; +} +/*-- column_right --*/ +.socail-btn-col2 ul li { + display: block; +} +ul.social_top{ + margin-bottom:0.5em; +} +ul.social1 li{ + display: inline-block; + background: #5d9cec; + width: 43%; + min-height: 40px; + line-height: 40px; + border-bottom: 2px solid #225699; + position: relative; + border-radius: 4px; + -webkit- border-radius: 4px; + -moz- border-radius: 4px; + -o- border-radius: 4px; + margin-right: 12%; + padding: 1px 0 0 0; +} +ul.social1 li:hover{ + background:#5292e3; +} +ul.social1 li p.dribble{ + color:#ec87c0; +} +ul.social1 li p.tw2{ + color:#4fc1e9; +} +ul.social1 li p.rss2{ + color:#ffce54; +} +ul.social1 li p{ + float: right; + background: #fff; + color: #5d9cec; + font-size: 16px; + padding: 1px 15px; +} +ul.social1 li.last1{ + margin-right:0; + background:#ec87c0; + border-bottom:2px solid #d770ad; +} +ul.social1 li.last1:hover{ + background:#e47bb6; +} +ul.social1 li.rss{ + margin-right:0; + background:#ffce54; + border-bottom:2px solid #f6bb42; +} +ul.social1 li.rss:hover{ + background:#f3c247; +} +ul.social1 li.tw{ + background:#4fc1e9; + border-bottom:2px solid #3bafda; +} +ul.social1 li.tw:hover{ + background:#47bbe3; +} +ul.social1 li p:after { + position: absolute; + top: 13px; + content: ''; + border: 7px solid transparent; + border-right-color: #FFF; + width: 0; + height: 0; + z-index: 100; + right: 58px; +} +ul.social1 li h3{ + font-size: 18px; + font-weight:400; + margin-left: 5%; + float: left; + padding:3px 0 0 0; + text-shadow: 2px 2px 0px rgb(96, 96, 96); + -webkit-text-shadow: 2px 2px 0px rgb(96, 96, 96); + -moz-text-shadow: 2px 2px 0px rgb(96, 96, 96); + -o-text-shadow: 2px 2px 0px rgb(96, 96, 96); +} +ul.social1 li a{ + color:#fff; +} +ul.social1 li a i.fb { + width: 20px; + height: 25px; + float: left; + background: url(../images/img_sprite.png)no-repeat #5d9cec -605px -5px; + padding: 10px; + border-right: 1px solid #3E78C1; +} +ul.social1 li a i.dribble{ + width: 20px; + height: 25px; + float: left; + background: url(../images/img_sprite.png)no-repeat #ec87c0 -647px -4px; + padding: 10px; + border-right: 1px solid #d770ad; +} +ul.social1 li a i.tw1{ + width: 20px; + height: 25px; + float: left; + background: url(../images/img_sprite.png)no-repeat #4fc1e9 -692px -5px; + padding: 10px; + border-right: 1px solid #3bafda; +} +ul.social1 li a i.rss1{ + width: 20px; + height: 25px; + float: left; + background: url(../images/img_sprite.png)no-repeat #ffce54 -739px -4px; + padding: 10px; + border-right: 1px solid #f6bb42; +} +/*---start-check-box----*/ +.checkbox-grid-left input[type="checkbox"]{ + display:none; +} +.checkbox-grid-left input[type="checkbox"]+label{ + display:inline-block; +} +.checkbox-grid-left p{ + display:block; +} +.checkbox-grid-left a{ + vertical-align: super; + margin-left: 10px; + color: #222; + font-size: 1em; +} +/*--input[type=checkbox].css-checkbox10 + label.css-label10 { + height: 45px; + width: 45px; + display: inline-block; + line-height: 18px; + background-repeat: no-repeat; + background-position: 0 0px; + cursor: pointer; + background: url(../images/img_sprite.png) no-repeat 16px 10px; +} +input[type=checkbox].css-checkbox10:checked + label.css-label10 { + background: url(../images/img-sprite.png) no-repeat -58px -60px; +} +input[type=checkbox].css-checkbox11 + label.css-label11 { + height:45px; + width:45px; + display: inline-block; + line-height: 18px; + background-repeat: no-repeat; + background-position: -79px 1px; + cursor: pointer; + background: url(../images/img-sprite.png) no-repeat -58px -60px; +} +input[type=checkbox].css-checkbox11:checked + label.css-label11 { + background: url(../images/img-sprite.png) no-repeat -5px -60px; +} +/*----*/ +/*-- +input[type=checkbox].css-checkbox14 + label.css-label14 { + height: 45px; + width: 45px; + display: inline-block; + line-height: 18px; + background-repeat: no-repeat; + background-position: 0 -37px; + cursor: pointer; + background: url(../images/img-sprite.png) no-repeat -161px -5px; +} +input[type=checkbox].css-checkbox14:checked + label.css-label14 { + background: url(../images/img-sprite.png) no-repeat -210px -6px; +} +input[type=checkbox].css-checkbox15 + label.css-label15 { + height:45px; + width:45px; + display: inline-block; + line-height: 18px; + background-repeat: no-repeat; + background-position: -40px -37px; + cursor: pointer; + background: url(../images/img-sprite.png) no-repeat -210px -6px; +} +input[type=checkbox].css-checkbox15:checked + label.css-label15 { + background: url(../images/img-sprite.png) no-repeat -161px -5px; +}--*/ +input[type=checkbox].css-checkbox1 + label.css-label1 { + height: 30px; + width: 30px; + display: inline-block; + line-height: 18px; + background-repeat: no-repeat; + background-position: 0 -37px; + cursor: pointer; + background: url(../images/img_sprite.png) no-repeat -14px -78px; +} +input[type=checkbox].css-checkbox1:checked + label.css-label1 { + background: url(../images/img_sprite.png) no-repeat -47px -78px; +} +input[type=checkbox].css-checkbox2 + label.css-label2 { + height:30px; + width:30px; + display: inline-block; + line-height: 18px; + background-repeat: no-repeat; + background-position: 0 -37px; + cursor: pointer; + background: url(../images/img_sprite.png) no-repeat -47px -78px; +} +input[type=checkbox].css-checkbox2:checked + label.css-label2 { + background: url(../images/img_sprite.png) no-repeat -14px -78px; +} +input[type=checkbox].css-checkbox3 + label.css-label3 { + height: 30px; + width: 30px; + display: inline-block; + line-height: 18px; + background-repeat: no-repeat; + background-position: 0 -37px; + cursor: pointer; + background: url(../images/img_sprite.png) no-repeat -79px -78px; +} +input[type=checkbox].css-checkbox3:checked + label.css-label3 { + background: url(../images/img_sprite.png) no-repeat -113px -78px; +} +input[type=checkbox].css-checkbox4 + label.css-label4 { + height:30px; + width:30px; + display: inline-block; + line-height: 18px; + background-repeat: no-repeat; + background-position: 0 -37px; + cursor: pointer; + background: url(../images/img_sprite.png) no-repeat -113px -78px; +} +input[type=checkbox].css-checkbox4:checked + label.css-label4 { + background: url(../images/img_sprite.png) no-repeat -79px -78px; +} +input[type=checkbox].css-checkbox5 + label.css-label5 { + height: 30px; + width: 30px; + display: inline-block; + line-height: 18px; + background-repeat: no-repeat; + background-position: 0 -37px; + cursor: pointer; + background: url(../images/img_sprite.png) no-repeat -148px -78px; +} +input[type=checkbox].css-checkbox5:checked + label.css-label5 { + background: url(../images/img_sprite.png) no-repeat -181px -78px; +} +input[type=checkbox].css-checkbox6 + label.css-label6 { + height: 30px; + width: 30px; + display: inline-block; + line-height: 18px; + background-repeat: no-repeat; + background-position: 0 -37px; + cursor: pointer; + background: url(../images/img_sprite.png) no-repeat -181px -78px; +} +input[type=checkbox].css-checkbox6:checked + label.css-label6 { + background: url(../images/img_sprite.png) no-repeat -148px -78px; +} +input[type=checkbox].css-checkbox7 + label.css-label7 { + height: 30px; + width: 30px; + display: inline-block; + line-height: 18px; + background-repeat: no-repeat; + background-position: 0 -37px; + cursor: pointer; + background: url(../images/img_sprite.png) no-repeat -216px -78px; +} +input[type=checkbox].css-checkbox7:checked + label.css-label7 { + background: url(../images/img_sprite.png) no-repeat -248px -78px; +} +input[type=checkbox].css-checkbox8 + label.css-label8 { + height:30px; + width:30px; + display: inline-block; + line-height: 18px; + background-repeat: no-repeat; + background-position: 0 -37px; + cursor: pointer; + background: url(../images/img_sprite.png) no-repeat -248px -78px; +} +input[type=checkbox].css-checkbox8:checked + label.css-label8 { + background: url(../images/img_sprite.png) no-repeat -216px -78px; +} +input[type=checkbox].css-checkbox16 + label.css-label16 { + height: 22px; + width: 30px; + display: inline-block; + line-height: 18px; + background-repeat: no-repeat; + background-position: -79px -37px; + cursor: pointer; + background: url(../images/img-sprite.png) no-repeat 0px 0px; +} +input[type=checkbox].css-checkbox16:checked + label.css-label16 { + background: url(../images/img-sprite.png) no-repeat 0px 0px; +} +input[type=checkbox].css-checkbox9 + label.css-label9 { + height:30px; + width:30px; + display: inline-block; + line-height: 18px; + background-repeat: no-repeat; + background-position: 0 -37px; + cursor: pointer; + background: url(../images/img_sprite.png) no-repeat -280px -78px; +} +input[type=checkbox].css-checkbox9:checked + label.css-label9 { + background: url(../images/img_sprite.png) no-repeat -312px -78px; +} +input[type=checkbox].css-checkbox10 + label.css-label10 { + height:30px; + width:30px; + display: inline-block; + line-height: 18px; + background-repeat: no-repeat; + background-position: 0 -37px; + cursor: pointer; + background: url(../images/img_sprite.png) no-repeat -312px -78px; +} +input[type=checkbox].css-checkbox10:checked + label.css-label10 { + background: url(../images/img_sprite.png) no-repeat -280px -78px; +} + +.check-boxs { + margin-top:2em; +} +.col_checkbox { + float:left; + margin:0 17px 0 0; +} +.grey_tag, .grey_tag1{ + box-shadow: 0px 2px 0px 0px #d3d7dc; + -webkit-box-shadow: 0px 2px 0px 0px #d3d7dc; + -moz-box-shadow: 0px 2px 0px 0px #d3d7dc; + -o-box-shadow: 0px 2px 0px 0px #d3d7dc; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + -o-border-radius: 4px; + border-radius: 4px; + font-family: 'Roboto', sans-serif; + font-weight:500; + color:#8E8E8E; + border: none; + outline: none; + font-size: 1em; + + display: block; + cursor: pointer; +} +.grey_tag, .grey_tag1 { + background: url(../images/close.png) no-repeat #e1e4e9 90% 50%; + -webkit-transition: all 0.5s ease-in-out; + -moz-transition: all 0.5s ease-in-out; + -o-transition: all 0.5s ease-in-out; + transition: all 0.5s ease-in-out; + padding: 10px 40px 10px 10px; +} +.blue_tag{ + background: url(../images/plus.png) no-repeat #4fc1e9 90% 50%; + color:#fff; + box-shadow: 0px 2px 0px 0px #3bafda; + -webkit-box-shadow: 0px 2px 0px 0px #3bafda; + -moz-box-shadow: 0px 2px 0px 0px #3bafda; + -o-box-shadow: 0px 2px 0px 0px #3bafda; +} +.grey_tag1 { + background:#e1e4e9; + -webkit-transition: all 0.5s ease-in-out; + -moz-transition: all 0.5s ease-in-out; + -o-transition: all 0.5s ease-in-out; + transition: all 0.5s ease-in-out; + padding: 10px 10px 10px 10px; +} +ul.white-tag-list1 li.middle2{ + margin:0 16%; +} +/*--horizontal scroll--*/ +.scrolling { + margin:3em 0; +} +.skills, .skills1, .skills2{ + width: 100%; + margin: 10px 0; + background-color:#e1e4e9; + height: 12px; + -moz-border-radius: 5px; + -webkit-border-radius: 5px; + -o-border-radius: 5px; + border-radius: 5px; + box-shadow: inset 0px 0px 0px #0076B3, 0px 0px 0px 0px #1B455A, 0px 2px 1px #FFF; + -webkit-box-shadow: inset 0px 0px 0px #0076B3, 0px 0px 0px 0px #1B455A, 0px 2px 1px #FFF; + -moz-box-shadow: inset 0px 0px 0px #0076B3, 0px 0px 0px 0px #1B455A, 0px 2px 1px #FFF; + -o-box-shadow: inset 0px 0px 0px #0076B3, 0px 0px 0px 0px #1B455A, 0px 2px 1px #FFF; +} +.skills1{ + margin:2.5em 0; +} +.skills > div { + height: 100%; + display: block; + background-color: #4fc1e9; + -moz-border-radius: 5px; + -webkit-border-radius: 5px; + -o-border-radius: 5px; + border-radius: 5px; +} +.skills > div p{ + font-size: 11px; + color: #fff; + float: right; +} +.skills1 > div, .skills2 > div{ + height: 100%; + display: block; + background-color: #4fc1e9; + -moz-border-radius: 5px; + -webkit-border-radius: 5px; + -o-border-radius: 5px; + border-radius: 5px; + margin-left: 33%; +} +.skills2 > div{ + background-color:#cccfd5; +} +/*--video--*/ +.video{ + margin-top:3em; +} +.video iframe{ + min-height:440px; +} +/*--audio_player--*/ +.audio-plyer { + position: relative; + margin:3.5em 0 5em 0; + background: #fff; + border-bottom: 4px solid #e3e4e8; + +} +ul.right_img1 { + float: left; + width: 30%; + padding: 10px; +} +ul.right_img1 img { + display: block; + +} +ul.right_img2 { + float: left; + width: 45.4%; + padding: 5%; +} +ul.right_img2 h3 { + color: #4fc1e9; + font-size:1em; + margin-bottom:1em; +} + +.bbplayer { + color: #01C675; + position: relative; + padding: 10px 0 0px 0; +} +/*-- weather_3 --*/ +.weather_3 { + background:#4fc1e9; + + min-height: 500px; + margin-top:40px; + border-radius: 4px; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + -o-border-radius: 4px; +} +.strip_3 { + text-align:center; + margin: 15% 0 0 0; +} +.strip_3 img{ + display:inline-block; +} +.cal-day1{ + margin-top: 19.5%; + background:#3bafda; +} +ul.w_strip2{ + background:#3bafda; +} +.day-grid1{ + border-right: 2px ridge #48C6F4; +} +/*-- column_left step_2 --*/ +.middle_grid{ + margin:5em 0 0 0; +} +.input-box-grid-white input[type="text"], .input-box-grid-dark input[type="text"] { + padding: 0.8em 1em; + + width:94%; + font-size:0.95em; + outline: none; + color:#777F8C; + font-weight: 500; + font-family: 'Roboto', sans-serif; +} +.input-box-grid-white input[type="text"], .input-box-grid-dark input[type="text"], .accout-login input[type="text"], .submit input[type="submit"], .login_1, .row_1, .graph{ + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + -o-border-radius: 4px; + border-radius: 4px; +} +.normal-input-white{ + background: #e1e4e9; + border: none; + box-shadow: inset 0px 1px 0px #D4DCDF, 0px 0px 0px 0px #1B455A, 4px 7px 11px #FFF; + -webkit-box-shadow: inset 0px 1px 0px #D4DCDF, 0px 0px 0px 0px #1B455A, 4px 7px 11px #FFF; + -moz-box-shadow: inset 0px 1px 0px #D4DCDF, 0px 0px 0px 0px #1B455A, 4px 7px 11px #FFF; + -o-box-shadow: inset 0px 1px 0px #D4DCDF, 0px 0px 0px 0px #1B455A, 4px 7px 11px #FFF; + margin-bottom:1em; +} + +.focused-input-white { + color: #222; + border-top: none; + border-left: none; + border-right: none; + border-bottom: 4px solid #e3e4e8; + background:#fff; + margin-bottom:2em; +} +.alert-input-white{ + border:1px solid #ed5565; + color:#ed5565; + margin-bottom:1em; +} +.deactive-input-white{ + border:1px solid #a0d468; + color:#a0d468; +} +.accout-login{ + margin:2em 0 2em; +} +.accout-login input[type="text"] { + padding:0.8em 1em; + color: #9095AA; + width:94%; + font-family: 'Roboto', sans-serif; + font-size: 0.95em; + outline: none; + color: #777F8C; + font-weight: 500; + border: 1px solid #D9D9D9; + transition: border-color 0.3s; + -o-transition: border-color 0.3s; + -ms-transition: border-color 0.3s; + -moz-transition: border-color 0.3s; + -webkit-transition: border-color 0.3s; +} +.ac-pass { + background: url(../images/user.png) no-repeat 1% 50% #fff; + text-indent: 23px; + display: block; +} +.accout-login label{ + color: #9095AA; + font-weight: 500; + font-size: 0.95em; + line-height: 2em; +} +.pass1{ + margin-bottom:1em; +} +.input-box-grid-white-search1 input[type="text"] { + border: none; + color: #777F8C; + padding: 12.5px; + font-size: 0.95em; + position: relative; + width: 74.5%; + margin-left: 2px; + font-weight: 500; + font-family: 'Roboto', sans-serif; + outline: none; + border-bottom: 3px solid #e3e4e8; + border-top-left-radius: 4px; + -webkit-border-top-left-radius: 4px; + -o-border-top-left-radius: 4px; + -moz-border-top-left-radius: 4px; + border-bottom-left-radius: 4px; + -webkit-border-bottom-left-radius: 4px; + -o-border-bottom-left-radius: 4px; + -moz-border-bottom-left-radius: 4px; +} +.input-box-grid-white-search1 { + position: relative; + width:100%; +} +.input-box-grid-white-search1 input[type="submit"] { + background:#4fc1e9; + border: none; + height: 46px; + width:20%; + outline: none; + cursor: pointer; + position: absolute; + top:29px; + right:0; + color: #fff; + font-size: 1.1em; + font-family: 'Roboto', sans-serif; + border-top-right-radius: 4px; + -webkit-border-top-right-radius: 4px; + -o-border-top-right-radius: 4px; + -moz-border-top-right-radius: 4px; + border-bottom-right-radius: 4px; + -webkit-border-bottom-right-radius: 4px; + -o-border-bottom-right-radius: 4px; + -moz-border-bottom-right-radius: 4px; + border-bottom: 3px solid #3bafda; +} +.input-box-grid-white-search1 input[type="submit"]:hover{ + background:#33B1DD; +} +.player_1{ + margin: 3.5em 0 2em 0; +} +.video_player2{ + +} +.video_player3{ + margin:2em 0 0 0; +} +/* start circle */ +.circle{ + margin-top: 8%; +} +.circliful { + position: relative; + margin: 0 auto; + color: #fff; + +} +.circle-text, .circle-info, .circle-text-half, .circle-info-half { + width: 100%; + position: absolute; + text-align: center; + display: inline-block; +} +.circle-info, .circle-info-half { + font-size: 15px; + color: #3ba7ce; + font-weight: 600; +} +.circliful .fa { + margin: -10px 3px 0 3px; + position: relative; + bottom: 4px; +} +h3.m_3{ + background: #3bafda; + padding:2em 0; + text-align:center; + color:#fff; + text-transform:uppercase; + font-size:1.5em; + font-weight:500; +} +/* -- column_left step_ --*/ +.login_1{ + border-top:10px solid #4fc1e9; + box-shadow: 0 3px 0px 0px #e3e4e8; + -webkit-box-shadow: 0 3px 0px 0px #e3e4e8; + -moz-box-shadow: 0 3px 0px 0px #e3e4e8; + -o-box-shadow: 0 3px 0px 0px #e3e4e8; +} +ul.accout-login2{ + background:#fff; + padding: 2em 2em 1em; +} +ul.accout-login2 h4{ + color: #d6dae0; + text-transform: uppercase; + font-weight: 600; + font-size: 1.3em; + margin-bottom: 1em; + text-align:center; +} +ul.accout-login2 li { + border: 1px solid #C3C3C3; + margin-bottom:10px; + width: 100%; + background: none; + border-radius: 4px; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + -o-border-radius: 4px; +} +ul.accout-login2 li:hover{ + border:1px solid #4fc1e9; +} +ul.accout-login2 input[type="text"], ul.accout-login2 input[type="password"]{ + width: 80%; + padding: 14.5px 10px; + color: #858282; + font-size: 15px; + outline: none; + background: none; + font-weight: 300; + border: none; + font-family: 'Roboto', sans-serif; + font-style: italic; +} +ul.accout-login2 label { + color: #B9B9B9; + font-size: 0.95em; + font-weight: 300; + line-height: 2em; +} +.icon { + height: 47px; + width: 47px; + display: block; + float: left; + margin: 0; +} +.user { + background: url(../images/user.png) no-repeat 10px 8px #f0f2f5; +} +.lock { + background: url(../images/lock.png) no-repeat 13px 11px #f0f2f5; +} +.submit input[type="submit"] { + font-size: 17px; + font-weight: 500; + color: #fff; + cursor: pointer; + outline: none; + padding: 10px 30px; + border: none; + background: #4fc1e9; + font-family: 'Roboto', sans-serif; + text-transform: uppercase; +} +.submit input[type="submit"]:hover, .but_4 input[type="submit"]:hover{ + background:#3bafda; +} +.but_3{ + background:#f5f7f9; + text-align:center; + padding: 1em; +} +.but_3 h5{ + color: #B9B9B9; + font-size: 13px; + font-weight: 300; + margin: 10px 0 0 0; +} +ul.social_login { + padding:20px; + background:#5d9cec; +} +ul.social_login li { + +} +ul.social_login li a{ + color: #fff; + font-size: 14px; + font-weight: 400; + font-family: 'Roboto', sans-serif; +} +ul.social_login li p{ + float: left; + line-height: 2em; + margin-left: 30%; + font-weight: 300; + font-size: 13px; +} +i.fb{ + height: 25px; + width: 25px; + cursor: pointer; + background: url(../images/img_sprite.png) no-repeat -357px -78px; + float:left; +} +ul.social_login, .but_4 input[type="submit"]{ + border-bottom-left-radius: 4px; + -webkit-border-bottom-left-radius: 4px; + -moz-border-bottom-left-radius: 4px; + -o-border-bottom-left-radius: 4px; + border-bottom-right-radius: 4px; + -webkit-border-bottom-right-radius: 4px; + -moz-border-bottom-right-radius: 4px; + -o-border-bottom-right-radius: 4px; +} +ul.login_3{ + padding: 1em 2em 0.4em; +} + +.login_2{ + margin-top:1em; +} +.but_4 input[type="submit"] { + font-size: 17px; + font-weight: 500; + color: #fff; + cursor: pointer; + outline: none; + padding: 12px 30px; + border: none; + background: #4fc1e9; + font-family: 'Roboto', sans-serif; + text-transform: uppercase; + width: 100%; +} +.row_1{ + background:#fff; + margin-top: 2em; +} +.row_1-left{ + float: left; + width: 25%; + text-align: center; + margin-right: 12%; +} +.row_1-right { + width: 63%; + float: left; +} +ul.tab_social1{ + margin: 1em 0; +} + +.row_1-right h3{ + font-weight: 600; + font-size: 1.2em; + margin-bottom: 0.5em; +} +/**** Chart *****/ +.graph{ + background:#4fc1e9; + padding:15px 0; + margin-top:30px; + text-align:center; +} +.graph h3{ + font-size:1.2em; + color:#FFF; + font-weight:400; + padding:0px 20px 15px 20px; +} +.graph h3 span{ + float:left; +} +.graph h3 label{ + float:right; + font-size:13px; +} +.graph h3 label em{ + width:7px; + height:7px; + background:#FFF; + display:inline-block; + margin-right:5px; +} +.weather_bg{ + background:url(../images/weather_1.jpg)no-repeat; + background-size:cover; + -webkit-background-size:cover; + -moz-background-size:cover; + -o-background-size:cover; + -ms-background-size:cover; + margin-top:1.5em; +} +.strip_2-bg{ + background:rgba(79, 193, 233, 0.42);; +} +i.point2 { + width: 90px; + height: 76px; + background: url(../images/img_sprite.png)no-repeat 16px 10px; + float: left; +} +.cal_2{ + margin-top:1.5em; +} +.temp-head { + background: #4fc1e9; + padding:1.5em 0; + text-align: center; +} +.temp-head h4 { + color: #fff; + font-size: 1.6em; + font-weight: 600; + margin-bottom: 3px; +} +.temp-head p { + color: #fff; + font-size: 1.2em; +} +.m_5 { + display: inline-block; + width: 49%; +} +.strip_2-border1 { + width: 55%; + margin: 0 auto; + padding: 4em 0; +} +.m_5 span { + color: #4fc1e9; + text-transform: uppercase; + font-size: 1.1em; + font-weight: 500; +} +.m_5 p { + font-size: 70px; + color: #4fc1e9; + font-weight: 500; +} +.temp_1{ + background:#fff; + color:#4fc1e9; +} +.copy{ + text-align:center; + margin:3em 0 2em; +} +.copy p{ + color:#000; + font-size:1.1em; +} +.copy p a:hover{ + color:#4fc1e9; +} +/*-- responsive design --*/ +@media (max-width:1440px){ +.big-buttons-col1 li.middle, .big-buttons-col2 li.middle { + margin: 0 21%; +} +.white-tag-list li.tag2 { + margin: 0 13%; +} +ul.white-tag-list1 li.middle1 { + margin: 0 13%; +} +ul.white-tag-list li.tag8 { + margin-right: 25%; +} +ul.white-tag-list li.middle2 { + margin: 0 16%; +} +ul.last_but li.middle3 { + margin: 0 18%; +} +.tab_2 { + top: -49em; +} +.menu_1 h2 { + width: 60%; +} +.menu_2 h2 { + width: 50%; +} +.menu_5 ul li { + width: 19.355555%; +} +ul.menu_7 li { + width: 19.35555%; +} +.search input[type="text"] { + width: 58%; +} +ul.white-tag-list1 li.middle2 { + margin: 0 12%; +} +.col_checkbox { + margin: 0 12px 0 0; +} +} +@media (max-width:1366px){ +.menu_1 h2 { + width: 57%; +} +.menu_2 h2 { + width: 46%; +} +.menu_middle { + width: 60%; +} +.menu_5 ul li, ul.menu_7 li { + width: 19.29999%; +} +.search input[type="text"] { + width: 57%; +} +.big-buttons-col1 li.middle, .big-buttons-col2 li.middle { + margin: 0 19%; +} +.white-tag-list li.tag2 { + margin: 0 10%; +} +ul.white-tag-list1 li.middle1 { + margin: 0 10%; +} +ul.white-tag-list li.tag8 { + margin-right: 19%; +} +ul.white-tag-list li.middle2 { + margin: 0 14%; +} +ul.last_but li.middle3 { + margin: 0 16%; +} +.tab_2 { + top: -46em; +} +ul.white-tag-list1 li.middle2 { + margin: 0 10%; +} +.col_checkbox { + margin: 0 9px 0 0; +} +} +@media (max-width:1280px){ +.menu_1 h2 { + width: 54%; + font-size: 1.2em; +} +.menu_2 h2 { + width: 43%; + font-size: 1.2em; +} +.menu_3 h2 { + font-size: 1.2em; +} +.menu_middle { + width: 57%; +} +.menu_5 ul li a p { + font-size: 12PX; +} +.menu_5 ul li, ul.menu_7 li { + width: 19.22222%; +} +.search input[type="text"] { + width: 56%; +} +ul.twit_nav li { + width: 32.9999%; +} +.big-buttons-col1 li.middle, .big-buttons-col2 li.middle { + margin: 0 17%; +} +.white-tag-list li.tag2, ul.white-tag-list1 li.middle1{ + margin: 0 8%; +} +ul.white-tag-list li.tag8 { + margin-right: 15%; +} +ul.white-tag-list li.middle2 { + margin: 0 12%; +} +ul.last_but li.middle3 { + margin: 0 14%; +} +.tab_2 { + top: -44em; +} +.col_checkbox { + margin: 0 7px 0 0; +} +ul.white-tag-list1 li.middle2 { + margin: 0 7%; +} +ul.accout-login2 input[type="text"], ul.accout-login2 input[type="password"] { + width: 79%; +} +} +@media (max-width:1024px){ +.menu_1 h2, .menu_2 h2, .menu_3 h2{ + width: 42%; + font-size: 1em; + line-height: 41px; +} +.strip_2-border1 { + width: 80%; +} +.menu_1_left, .menu_1_right{ + width: 60px; + height: 40px; + background-size: 100%; +} +.menu_box{ + padding: 10px; +} +.menu_1_left_nav li a, .menu_1_right_nav li a, .menu_2_right_nav li a, .menu_3_left_nav li a, .menu_3_right_nav li a, .menu_4_left_nav li a, .menu_4_right_nav li a{ + font-size: 12px; + font-weight: 300; +} +.menu_2_left, .menu_2_left:hover{ + width: 80px; + height:40px; + background-size: 100%; +} +.menu_2_right { + width: 60px; + height: 40px; + background-size: 95%; +} +.menu_3_left { + width: 50px; + height: 40px; + background-size: 105%; +} +.menu_3_right { + width: 40px; + height: 40px; + background-size: 115%; +} +.menu_4_left { + width: 60px; + height: 40px; + background-size: 48%; +} +.menu_4_right { + width: 56px; + height: 58px; + background-size: 73%; +} +.menu_middle ul { + padding: 12px 0 0 0; +} +.menu_5 ul li a p { + font-size: 10PX; +} +.menu_5 ul li, ul.menu_7 li { + width: 19.1%; +} +ul.menu_7 li a { + font-size: 11px; +} +.search input[type="text"] { + width: 50%; +} +.latest_tweets p { + font-size: 0.85em; +} +.latest_tweets h3, .compose_twit h3 { + font-size: 1.2em; +} +h4.head-1 { + font-size: 1em; +} +i.point { + width: 70px; + height: 66px; + background: url(../images/img_sprite.png)no-repeat #4fb7de 7px 6px; + float: left; +} +.m_1 p { + font-size: 45px; +} +.m_1 span { + font-size: 0.85em; +} +.big-buttons-col1 li.middle, .big-buttons-col2 li.middle { + margin: 0 10%; +} +.green-tag { + padding: 9px 30px 9px 7px; +} +.white-tag-list li.tag2{ + margin: 0 4%; +} +ul.white-tag-list1 li.middle1{ + margin: 0 1%; +} +.shop { + padding: 8px 40px 8px 8px; +} +ul.white-tag-list li.tag8 { + margin-right:4%; +} +ul.white-tag-list li.middle2 { + margin: 0 3%; +} +ul.last_but li.middle3 { + margin: 0 6%; +} +.switech-grid { + float: left; + width: 70%; +} +.tab_2 { + top: -36em; +} +.resp-tab-item { + border: 1px solid #4fc1e9; + font-size: 0.85em; + width: 27%; +} +.tab_right h3 { + font-size: 0.85em; +} +ul.tab_social li { + margin-right: 0px; +} +.tab_right { + width: 100%; + float: none; +} +ul.w_strip1 li.w_strip1-left p { + font-size: 42px; +} +h4.head-2 { + font-size: 1em; +} +.day-cal-day { + margin-top: 87%; +} +.day-cal-day-grid p, .day-cal-day-grid label{ + font-size: 1em; +} +.strip_2-border { + width: 68%; +} +ul.social1 li p { + font-size: 12px; + padding: 1px 5px; +} +ul.social1 li p:after { + right: 31px; +} +ul.social1 li h3 { + font-size: 14px; +} +.col_checkbox { + margin: 0 0px 0 0; +} +.grey_tag{ + padding: 8px 30px 8px 8px; +} +ul.white-tag-list1 li.middle2 { + margin: 0 0%; +} +.audio-plyer { + margin: 2.5em 0 3em 0; +} +.video iframe { + min-height: 300px; +} +.day-cal-day-grid { + width: 13.1%; +} +.strip_3 img { + width: 50%; +} +.strip_3 { + text-align: center; + margin: 30% 0 0 0; +} +.cal-day1 { + margin-top:27.5%; +} +.temp_list li a { + font-size: 0.85em; + padding: 11px 15px 3px 10px; +} +ul.accout-login2 h4 { + font-size: 1em; +} +ul.accout-login2 { + padding: 2em 1em 1em; +} +ul.accout-login2 input[type="text"], ul.accout-login2 input[type="password"] { + width: 73%; +} +ul.login_3 { + padding: 1em 1em 0.4em; +} +.row_1-right h3 { + font-size: 1em; +} +.menu_1-box { + padding:10px; +} +} +@media (max-width:920px){ +.column_left, .column_middle, .column_right { + float: none; + width:100%; +} +.column_middle { + margin:0; +} +.column_middle { + margin: 4em 0 0 0; +} +.big-buttons-col1 li.middle, .big-buttons-col2 li.middle { + margin: 0 20%; +} +.white-tag-list li.tag2 { + margin: 0 19%; +} +ul.white-tag-list1 li.middle1 { + margin: 0 16%; +} +ul.white-tag-list li.tag8 { + margin-right: 20%; +} +ul.white-tag-list li.middle2 { + margin: 0 17%; +} +ul.last_but li.middle3 { + margin: 0 18%; +} +.switech-grid { + width: 95%; +} +.day-cal-day { + margin-top: 50%; +} +.column_right { + margin: 4em 0 0 0; +} +} +@media (max-width:480px){ +.wrap { + width: 93%; +} +.menu_1-box, .menu_2{ + padding: 5px; +} +.menu_1, .menu_2, .menu_3, .menu_4, .menu_5, ul.menu_7{ + margin-bottom: 1em; +} +.menu_middle { + width: 55%; +} +.menu_middle ul li { + margin: 0 1px; +} +.menu_5 ul li, ul.menu_7 li { + width: 18.9%; +} +.search { + padding: 10px; +} +.twitter_widget_1, .twitter_widget_2{ + margin:1em 0; +} +.strip_2-border { + width: 72%; +} +h4.head-1 { + line-height: 4.2em; +} +.m_1 img{ + width:50%; +} +.m_1 p { + font-size: 35px; +} +.m_1 span { + font-size: 0.8125em; +} +.strip_2 { + padding: 10px 0; +} +.column_middle { + margin: 2em 0 0 0; +} +.big-buttons-col1 li.middle, .big-buttons-col2 li.middle { + margin: 0 6%; +} +.white-tag-list li.tag2 { + margin: 0 1%; +} +.green-tag, .tag5, .tag6, .shop, .blue_but{ + font-size:0.85em; +} +ul.white-tag-list1 li.middle1 { + margin: 0 1%; +} +ul.white-tag-list li.tag8 { + margin-right: 3%; +} +ul.white-tag-list li.middle2 { + margin: 0 3%; +} +ul.last_but li.middle3 { + margin: 0 2%; +} +.tab_2 { + top: -32em; +} +.facts{ + padding:10px; +} +.input-box-grid-white input[type="text"], .input-box-grid-dark input[type="text"] { + width: 88.5%; +} +.day-cal-day { + margin-top: 67%; +} +ul.social1 li { + width: 46%; + margin-right: 5%; +} +.weather_2 { + min-height: 300px; +} +.column_right { + margin:2em 0 0 0; +} +.grey_tag, .grey_tag1 { + font-size: 0.8125em; +} +.scrolling { + margin: 2em 0; +} +.skills1 { + margin: 1.5em 0; +} +.audio-plyer { + margin: 1.5em 0 0em 0; +} +.day-cal-day { + margin-top: 36%; +} +.strip_3 { + margin: 17% 0 0 0; +} +ul.w_strip1 li.w_strip1-right span { + font-size: 0.85em; +} +.day-cal-day-grid p, .day-cal-day-grid label { + font-size: 0.85em; +} +.day-cal-day-grid sup { + font-size: 12px; +} +ul.w_strip1 { + padding: 10px; +} +.middle_grid { + margin: 2em 0 0 0; +} +.accout-login input[type="text"] { + width: 89%; +} +.focused-input-white { + margin-bottom: 1em; +} +.accout-login { + margin: 1em 0 1em; +} +.input-box-grid-white-search1 input[type="submit"] { + width: 25%; +} +.input-box-grid-white-search1 input[type="text"] { + width: 65.5%; +} +h3.m_3 { + padding: 1em 0; + font-size: 1em; +} +.day-cal-day-grid p, .day-cal-day-grid label { + font-size: 11px; +} +ul.social_login { + padding: 15px; +} +ul.social_login li p { + margin-left: 20%; +} +.m_5 p { + font-size: 50px; +} +.strip_2-border1 { + padding: 2em 0; +} +.menu_1_left, .menu_1_right { + width: 40px; + height: 30px; + background-size: 100%; +} +.menu_1 h2{ + width: 68%; + font-size: 0.85em; + line-height: 29px; +} +.menu_2_left{ + width: 70px; + height: 30px; + background-size: 100%; +} +.menu_2_right { + width: 45px; + height: 30px; + background-size: 95%; +} +.menu_2 h2{ + width: 54%; + font-size: 0.85em; + line-height: 29px; +} +.menu_3_left { + width: 40px; + height: 30px; + background-size: 105%; +} +.menu_3_right { + width: 30px; + height: 30px; + background-size: 115%; +} +.menu_3 h2 { + width: 67%; + font-size: 0.85em; + line-height: 30px; +} +.menu_4_left { + width: 50px; + height: 32px; + background-size: 45%; +} +.menu_4_right { + width: 47px; + height: 46px; + background-size: 61%; +} +.menu_5 ul li a p { + font-size: 10PX; + line-height: 10px; + font-weight: 300; +} +.menu_6 ul li { + padding: 1px 0; +} +ul.menu_7 li a span { + font-weight: 300; + font-size: 12px; +} +.latest_tweets, .compose_twit{ + padding: 10px; +} +.cal-day1 { + margin-top:48.5%; +} +.menu_middle ul { + padding: 5px 0 0 0; +} +} \ No newline at end of file diff --git a/sample/images/arrow-left.png b/sample/images/arrow-left.png new file mode 100755 index 0000000000000000000000000000000000000000..c7629155411b04a0aba06cb0dae6090348df4848 GIT binary patch literal 645 zcmV;00($+4P)RCwC#mqA1XQ5eUYHcKoq49l`a z#L}r#Y?n?;>C`DABBDbgHl1Qw_S7jlMbxEJ6w#&Bv6Q+*loBOMDN@SzfBYYB$IQNO zrr1l5pWWH{-uM0I+xNcjjZ>{wn;JQqn;Ja+1++x8&w?S)2hzO0;k`YuL%zix)gly- z1Dn;_@dXaSt?&0cFaZ)0-;&^ShVxx83cLWjZcqWQv^@sd-v~&8bvnBQ1!1;au*`Xn zARkx2it*I0Ft~}z)CYJ5olymhGWaQIjS*ZkX81`;1*Dj|SIK`UV2L88r2?iop(Jo# zB=u}Ee3-kSoe?x)pIgio1lJ2RWwBkPZQdrpW$^t7!83wP_0zs=6HuVxyfC$w1%tq=j)XVTUU zbzm>#DSE*buV;bdW1vpk@d6(#py{ZwYS~tov?~hNKo{*-B-`+sg(zVWaY3gu!g`^` zutb2~v;BesqeN^7TJLFCZ3*lBx}Dk_r^9Nz!Ejjm>op_YPAk9c106i;WLXB)qp$4~q0nI+`+rS9u2MPYZ<=6q(C0}BX>LnDA z0^7Bp?GqehJ>pX1M8gk z2+~0XY-s;FCJe5lR_Yy8K$l+uIR-C*mH@$R#xy?>semY#?pd;j0#+#^FBOpIgo44b z61M{q2D>ExOxf*ZxJ@YXh?(}?7J4oau|nIlNkELji^AnC2t{OQw_p-5M8kO>d%PeJ z5!FuAk1=N|PO!iCNStbX*zxQdT!0kV0|PGeUqBVaO|>A*zUm>M6Rg(B>`FuithtOS zpAl0vv;)UI0vrO%LAzFvW;}x1KC31H7wmg|RL3HF6@1CVt{b#y{_9r58z!Q#AP?N| z<(e|s&eAR`$piM8%@~{xf>%NC5L2;hZt<%9b~%--f+={G{x7mc7cU2YoC)##Ian_PC_oibf6h10{M>yE9Ij#9D$c zqbQgMlgwmqy!onhdkT_FGHGT))sDe56W5>IitW`XX#47H72Y9-{k$tyz;DAivtJB6 nfe&yN#F6#?aoT7B-vSH(fi6*G|BTf&00000NkvXXu0mjfRT>>S literal 0 HcmV?d00001 diff --git a/sample/images/audio.jpg b/sample/images/audio.jpg new file mode 100755 index 0000000000000000000000000000000000000000..b24a14e6623eac932346516829966827bea1231d GIT binary patch literal 15863 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 literal 0 HcmV?d00001 diff --git a/sample/images/audio2.jpg b/sample/images/audio2.jpg new file mode 100755 index 0000000000000000000000000000000000000000..513adc2f99615b021c7d919048393d62b71e35e9 GIT binary patch literal 15751 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 literal 0 HcmV?d00001 diff --git a/sample/images/clouds.png b/sample/images/clouds.png new file mode 100755 index 0000000000000000000000000000000000000000..998b0765347224b36ca4d453c4d86bfe3c7ebaad GIT binary patch literal 3696 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 O0000P000>X1^@s6#OZ}&00009a7bBm001r{ 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 literal 0 HcmV?d00001 diff --git a/sample/images/img_sprite.png b/sample/images/img_sprite.png new file mode 100755 index 0000000000000000000000000000000000000000..f642f505db4578e9e943f697d755c6946d04dea5 GIT binary patch literal 25353 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 QUZc?9Lw~FLuVdf-H=%XH-T(jq literal 0 HcmV?d00001 diff --git a/sample/images/left_arrow.png b/sample/images/left_arrow.png new file mode 100755 index 0000000000000000000000000000000000000000..64edfaca470ad914c8d4a71d768070b6add194d8 GIT binary patch literal 3221 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 Hu0mjf^TG)= literal 0 HcmV?d00001 diff --git a/sample/images/likes.png b/sample/images/likes.png new file mode 100755 index 0000000000000000000000000000000000000000..2eeac9f84dc843a31447bc354869966807d88b86 GIT binary patch literal 3933 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 literal 0 HcmV?d00001 diff --git a/sample/images/mail.png b/sample/images/mail.png new file mode 100755 index 0000000000000000000000000000000000000000..cb53b6b134eaa2433c00acf4ae37483bbd621ffe GIT binary patch literal 520 zcmV+j0{8uiP)>*M2Rw>&bkPay&Iz=f_q_j#)bSWM78rjtnF+@bB@8i3S)b!rW z+a{VHA8(j>-`{uNd-MCv8n$gmf{dz2z!4e<+(1qFVrlL8R})XA`u_G7m|zBd znABh(1x|QfuTlr+l?(GiP;JtB#*RjM0WJe(8Ym5Bv!U>fwRBv)Ml zXRNSNZh=}b3T}P1V-JxB?Um?;mZOR2in7*=jDal2br98%Jj!Y);#6h}(yV0SljTw4 zDm+vB#}&x)braRAq#<#MS}|%%9m1kp{ni;q_|GUb@b3+L2rvK{yke5immz8Z0000< KMNUMnLSTZr9^T6U literal 0 HcmV?d00001 diff --git a/sample/images/mail1.png b/sample/images/mail1.png new file mode 100755 index 0000000000000000000000000000000000000000..f054689843a4b283feaa7e2fa77a498c0b5dc86f GIT binary patch literal 3042 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 literal 0 HcmV?d00001 diff --git a/sample/images/menu_1_left.png b/sample/images/menu_1_left.png new file mode 100755 index 0000000000000000000000000000000000000000..eb1cceee3c0c7d694004a523f560290f61ccd154 GIT binary patch literal 3374 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 KMNUMnLSTZFj%82) literal 0 HcmV?d00001 diff --git a/sample/images/menu_2_left.png b/sample/images/menu_2_left.png new file mode 100755 index 0000000000000000000000000000000000000000..abeb69e9ae69b002909bf854694d959179209a59 GIT binary patch literal 4638 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 U>o$o#{r~^~07*qoM6N<$f?+<*I{*Lx literal 0 HcmV?d00001 diff --git a/sample/images/menu_3_left.png b/sample/images/menu_3_left.png new file mode 100755 index 0000000000000000000000000000000000000000..c5ca7ecde84d75d599ed728cd9362ccf8c3e42c4 GIT binary patch literal 3056 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 Y0OaMSjQ^})a{vGU07*qoM6N<$f|f|!I{*Lx literal 0 HcmV?d00001 diff --git a/sample/images/menu_5_1.PNG b/sample/images/menu_5_1.PNG new file mode 100755 index 0000000000000000000000000000000000000000..d9413650c92c13eab5d65b8a9dae2d1cd806bfba GIT binary patch literal 2912 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 N002ovPDHLkV1glnniK#4 literal 0 HcmV?d00001 diff --git a/sample/images/menu_5_4.png b/sample/images/menu_5_4.png new file mode 100755 index 0000000000000000000000000000000000000000..445e2fa0eedb581e33ad16b422a7f86c0acc530d GIT binary patch literal 2991 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 literal 0 HcmV?d00001 diff --git a/sample/images/menu_5_5.png b/sample/images/menu_5_5.png new file mode 100755 index 0000000000000000000000000000000000000000..1c9a4b54d466288f16ac3007666454053b215713 GIT binary patch literal 2901 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 literal 0 HcmV?d00001 diff --git a/sample/images/notify.png b/sample/images/notify.png new file mode 100755 index 0000000000000000000000000000000000000000..ef9761931851f20da41a158be177234c527d6bc7 GIT binary patch literal 5388 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

_)cL)yul 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 VsUT1a0YE4P0H72CfKUnp|Jf9;dhq}N literal 0 HcmV?d00001 diff --git a/sample/images/pic2.jpg b/sample/images/pic2.jpg new file mode 100755 index 0000000000000000000000000000000000000000..a548476882967fbdd8deb8b3588663f012938223 GIT binary patch literal 9170 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 literal 0 HcmV?d00001 diff --git a/sample/images/play.png b/sample/images/play.png new file mode 100755 index 0000000000000000000000000000000000000000..d55eef824c83b7b3d79fb560eddf06e63d24140e GIT binary patch literal 3879 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 literal 0 HcmV?d00001 diff --git a/sample/images/plus.png b/sample/images/plus.png new file mode 100755 index 0000000000000000000000000000000000000000..9c82c25e889a32122fe9bbb39a380e4c6a6a4cae GIT binary patch literal 2974 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 U^N!~>dH?_b07*qoM6N<$f_|cfGXMYp literal 0 HcmV?d00001 diff --git a/sample/images/request.png b/sample/images/request.png new file mode 100755 index 0000000000000000000000000000000000000000..ed48375df5ac54ab3b2cd44cace11f82ccda1724 GIT binary patch literal 4205 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 Db_)Gb literal 0 HcmV?d00001 diff --git a/sample/images/search.png b/sample/images/search.png new file mode 100755 index 0000000000000000000000000000000000000000..1163486a7279c04f4f35d76102736b7532d97920 GIT binary patch literal 3015 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 JPDHLkV1k4Ime~LR literal 0 HcmV?d00001 diff --git a/sample/images/serch_plus.png b/sample/images/serch_plus.png new file mode 100755 index 0000000000000000000000000000000000000000..eb2a913b1a36e65da514b37494cbf26fdc10f56e GIT binary patch literal 3671 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 literal 0 HcmV?d00001 diff --git a/sample/images/set.png b/sample/images/set.png new file mode 100755 index 0000000000000000000000000000000000000000..85abf6550c653e77c3faa6019b29c2990ff929d3 GIT binary patch literal 3171 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 literal 0 HcmV?d00001 diff --git a/sample/images/sun.png b/sample/images/sun.png new file mode 100755 index 0000000000000000000000000000000000000000..3ec3eedcba15e1a731dc330bda8f672db7c20077 GIT binary patch literal 4008 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 N002ovPDHLkV1kp^Lv;WE literal 0 HcmV?d00001 diff --git a/sample/images/sun_icon1.png b/sample/images/sun_icon1.png new file mode 100755 index 0000000000000000000000000000000000000000..abcb227c305bfbd90e938a3932895fd8f99d504e GIT binary patch literal 746 zcmVrA)Xw!jAkPW_q$6(83Ok;vI`oSA;0n(gC;60cGcR+oT z(QW||&9~1#E*aVW>L*QJEeZuSSOLf5EQ|zgGKhw?^Gp3wK zMzn)~*~U(eK!i6B{(vairyhKK+Nac9s&A?a2CM!~N7 zKgbPwRDP$K2zNjoqiqMuIYAWM42~?0X&fBzynj-Z4aylK-SX6&YH&&|g*a zvXP!f^^-L0pl-IQlZeS2sU>0FpPM;Q#Ou1v)a;`!N~o0}OYJhB*2O5flxXjBPJwnH z7Yu?b!#jsHVwYMeWM7c5Pw~IGxGyBUmV!mrd&9g*mRt$%Gw_4aJORU2A{4=V=H^mH zYgklfuh3<~>>WlQIkAdB6(b<$R1rrw$=DgMM~Nz7F7E@^xVhM)nEsK;+VY}8$E*A9d^P{RKb9ILM9 zln~#1B;38=yK=6V#Vw*+xJSLum4Ov2#o93G`4e1g$fRn%02#W-rNh($ literal 0 HcmV?d00001 diff --git a/sample/images/tag_close.png b/sample/images/tag_close.png new file mode 100755 index 0000000000000000000000000000000000000000..47e12034b40aee3d27a7510658f3782e47f32de7 GIT binary patch literal 3033 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 bjr}tKDpk~_uNHrc00000NkvXXu0mjfi@~So literal 0 HcmV?d00001 diff --git a/sample/images/temp.png b/sample/images/temp.png new file mode 100755 index 0000000000000000000000000000000000000000..60f4ee3ab480bd64c11126017ee241a33f5c069d GIT binary patch literal 6791 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 pmk6#w@5M5=%DsklKRxIF0|1x{0*# literal 0 HcmV?d00001 diff --git a/sample/images/twit_1_ban.jpg b/sample/images/twit_1_ban.jpg new file mode 100755 index 0000000000000000000000000000000000000000..07d2f74e8a9d8b0881df2283538bd7b2778191a4 GIT binary patch literal 24742 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 literal 0 HcmV?d00001 diff --git a/sample/images/twit_1_social_dribble.png b/sample/images/twit_1_social_dribble.png new file mode 100755 index 0000000000000000000000000000000000000000..63d34fd0f28cef7816446ab961b86f383d0d5fe9 GIT binary patch literal 3229 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 P00000NkvXXu0mjf50VS6 literal 0 HcmV?d00001 diff --git a/sample/images/twit_1_social_dribbleh.png b/sample/images/twit_1_social_dribbleh.png new file mode 100755 index 0000000000000000000000000000000000000000..9bb8d06e60dc919e5d06a7db49524baf788a450f GIT binary patch literal 3245 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 literal 0 HcmV?d00001 diff --git a/sample/images/twit_1_social_fb.png b/sample/images/twit_1_social_fb.png new file mode 100755 index 0000000000000000000000000000000000000000..6dcca1d61188a00ee6d2e5039899b4ab8c4192fc GIT binary patch literal 2912 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 KMNUMnLSTYF>t1L8 literal 0 HcmV?d00001 diff --git a/sample/images/twit_1_social_fbh.png b/sample/images/twit_1_social_fbh.png new file mode 100755 index 0000000000000000000000000000000000000000..d9f49c9d2608c1b62b89a5adaf21379af8c128da GIT binary patch literal 2920 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 z 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 literal 0 HcmV?d00001 diff --git a/sample/images/weather_1.jpg b/sample/images/weather_1.jpg new file mode 100755 index 0000000000000000000000000000000000000000..5579faf0d18402c3371429abf3a5eb43de343c62 GIT binary patch literal 6038 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 VaGe$I>pC)GcHZdo6vXe@{|63(c8UN1 literal 0 HcmV?d00001 diff --git a/sample/images/weather_2.jpg b/sample/images/weather_2.jpg new file mode 100755 index 0000000000000000000000000000000000000000..82a5cad929afb2dce081ff431bea57c35802a2c5 GIT binary patch literal 19071 zcma&N2V9d&(>NL+Ktc@(C4gW8k=~^$APK$q-m7%!ML{Hl(4~d0bPyGgCITW#Zz2Sx zHvv&lL_kDQkQ+SbyzlwG|Ns8(oqe)pc6N5QJiD{APflk~-vS^y8rm8FGI9XGjpP8Q z+W;oDP*>mLD&N~2rI2{0> z6Meb>zyYX$Kp-WMijtBFOhx+9f~crKv~)Byv@|qy5V}7Ap<`f#Ff!1=V9d-g*f~y4 z&U5Gg17y_H)bw=pa0mp>!NSDC@t=(Uzmd}(027E@o=k;;j0r%_L`K0xcG?FR1OUh> z$jHb@^8XE_7E=Hzsi;ZFKkyHp)IjpH3EahQ~$%A3?K<%B3D5gL!}UC=fK!Z9toq2MvO@o1q=)Qhv=XB z8ejklQlC;#kjj(b3{A!aK_De1(8elfg^hO08oP zJl!HZoy+ie4hy(McMi6WQftBtZz7eCGzG?*LXcJwŸ5oSAXGA8_Qu*!@BdWrb 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 QG+k+k`l#I6-oJ1C1E1!s-v9sr literal 0 HcmV?d00001 diff --git a/sample/index.html b/sample/index.html new file mode 100755 index 00000000..cb509c94 --- /dev/null +++ b/sample/index.html @@ -0,0 +1,135 @@ + + + +jsrsasign new example + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+ + + +
+ + + +
+

+© 2015 Kenji Urushima @kjur +All rights reserved | +Template by w3layouts | +Powered by jsrsasign +

+
+ + + + + + + + diff --git a/sample/js/Chart.js b/sample/js/Chart.js new file mode 100755 index 00000000..2ecf55b0 --- /dev/null +++ b/sample/js/Chart.js @@ -0,0 +1,1273 @@ +/*! + * Chart.js + * http://chartjs.org/ + * + * Copyright 2013 Nick Downie + * Released under the MIT license + * https://github.com/nnnick/Chart.js/blob/master/LICENSE.md + */ + +//Define the global Chart Variable as a class. +window.Chart = function(context){ + + var chart = this; + + + //Easing functions adapted from Robert Penner's easing equations + //http://www.robertpenner.com/easing/ + + var animationOptions = { + linear : function (t){ + return t; + }, + easeInQuad: function (t) { + return t*t; + }, + easeOutQuad: function (t) { + return -1 *t*(t-2); + }, + easeInOutQuad: function (t) { + if ((t/=1/2) < 1) return 1/2*t*t; + return -1/2 * ((--t)*(t-2) - 1); + }, + easeInCubic: function (t) { + return t*t*t; + }, + easeOutCubic: function (t) { + return 1*((t=t/1-1)*t*t + 1); + }, + easeInOutCubic: function (t) { + if ((t/=1/2) < 1) return 1/2*t*t*t; + return 1/2*((t-=2)*t*t + 2); + }, + easeInQuart: function (t) { + return t*t*t*t; + }, + easeOutQuart: function (t) { + return -1 * ((t=t/1-1)*t*t*t - 1); + }, + easeInOutQuart: function (t) { + if ((t/=1/2) < 1) return 1/2*t*t*t*t; + return -1/2 * ((t-=2)*t*t*t - 2); + }, + easeInQuint: function (t) { + return 1*(t/=1)*t*t*t*t; + }, + easeOutQuint: function (t) { + return 1*((t=t/1-1)*t*t*t*t + 1); + }, + easeInOutQuint: function (t) { + if ((t/=1/2) < 1) return 1/2*t*t*t*t*t; + return 1/2*((t-=2)*t*t*t*t + 2); + }, + easeInSine: function (t) { + return -1 * Math.cos(t/1 * (Math.PI/2)) + 1; + }, + easeOutSine: function (t) { + return 1 * Math.sin(t/1 * (Math.PI/2)); + }, + easeInOutSine: function (t) { + return -1/2 * (Math.cos(Math.PI*t/1) - 1); + }, + easeInExpo: function (t) { + return (t==0) ? 1 : 1 * Math.pow(2, 10 * (t/1 - 1)); + }, + easeOutExpo: function (t) { + return (t==1) ? 1 : 1 * (-Math.pow(2, -10 * t/1) + 1); + }, + easeInOutExpo: function (t) { + if (t==0) return 0; + if (t==1) return 1; + if ((t/=1/2) < 1) return 1/2 * Math.pow(2, 10 * (t - 1)); + return 1/2 * (-Math.pow(2, -10 * --t) + 2); + }, + easeInCirc: function (t) { + if (t>=1) return t; + return -1 * (Math.sqrt(1 - (t/=1)*t) - 1); + }, + easeOutCirc: function (t) { + return 1 * Math.sqrt(1 - (t=t/1-1)*t); + }, + easeInOutCirc: function (t) { + if ((t/=1/2) < 1) return -1/2 * (Math.sqrt(1 - t*t) - 1); + return 1/2 * (Math.sqrt(1 - (t-=2)*t) + 1); + }, + easeInElastic: function (t) { + var s=1.70158;var p=0;var a=1; + if (t==0) return 0; if ((t/=1)==1) return 1; if (!p) p=1*.3; + if (a < Math.abs(1)) { a=1; var s=p/4; } + else var s = p/(2*Math.PI) * Math.asin (1/a); + return -(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*1-s)*(2*Math.PI)/p )); + }, + easeOutElastic: function (t) { + var s=1.70158;var p=0;var a=1; + if (t==0) return 0; if ((t/=1)==1) return 1; if (!p) p=1*.3; + if (a < Math.abs(1)) { a=1; var s=p/4; } + else var s = p/(2*Math.PI) * Math.asin (1/a); + return a*Math.pow(2,-10*t) * Math.sin( (t*1-s)*(2*Math.PI)/p ) + 1; + }, + easeInOutElastic: function (t) { + var s=1.70158;var p=0;var a=1; + if (t==0) return 0; if ((t/=1/2)==2) return 1; if (!p) p=1*(.3*1.5); + if (a < Math.abs(1)) { a=1; var s=p/4; } + else var s = p/(2*Math.PI) * Math.asin (1/a); + if (t < 1) return -.5*(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*1-s)*(2*Math.PI)/p )); + return a*Math.pow(2,-10*(t-=1)) * Math.sin( (t*1-s)*(2*Math.PI)/p )*.5 + 1; + }, + easeInBack: function (t) { + var s = 1.70158; + return 1*(t/=1)*t*((s+1)*t - s); + }, + easeOutBack: function (t) { + var s = 1.70158; + return 1*((t=t/1-1)*t*((s+1)*t + s) + 1); + }, + easeInOutBack: function (t) { + var s = 1.70158; + if ((t/=1/2) < 1) return 1/2*(t*t*(((s*=(1.525))+1)*t - s)); + return 1/2*((t-=2)*t*(((s*=(1.525))+1)*t + s) + 2); + }, + easeInBounce: function (t) { + return 1 - animationOptions.easeOutBounce (1-t); + }, + easeOutBounce: function (t) { + if ((t/=1) < (1/2.75)) { + return 1*(7.5625*t*t); + } else if (t < (2/2.75)) { + return 1*(7.5625*(t-=(1.5/2.75))*t + .75); + } else if (t < (2.5/2.75)) { + return 1*(7.5625*(t-=(2.25/2.75))*t + .9375); + } else { + return 1*(7.5625*(t-=(2.625/2.75))*t + .984375); + } + }, + easeInOutBounce: function (t) { + if (t < 1/2) return animationOptions.easeInBounce (t*2) * .5; + return animationOptions.easeOutBounce (t*2-1) * .5 + 1*.5; + } + }; + + //Variables global to the chart + var width = context.canvas.width; + var height = context.canvas.height; + + + //High pixel density displays - multiply the size of the canvas height/width by the device pixel ratio, then scale. + if (window.devicePixelRatio) { + context.canvas.style.width = width + "px"; + context.canvas.style.height = height + "px"; + context.canvas.height = height * window.devicePixelRatio; + context.canvas.width = width * window.devicePixelRatio; + context.scale(window.devicePixelRatio, window.devicePixelRatio); + } + + this.Line = function(data,options){ + + chart.Line.defaults = { + scaleOverlay : false, + scaleOverride : false, + scaleSteps : null, + scaleStepWidth : null, + scaleStartValue : null, + scaleLineColor : "#46abdb", + scaleLineWidth : 1, + scaleShowLabels : true, + scaleLabel : "<%=value%>", + scaleFontFamily : "'Arial'", + scaleFontSize : 12, + scaleFontStyle : "normal", + scaleFontColor : "#FFF", + scaleShowGridLines : true, + scaleGridLineColor : "#46abdb", + scaleGridLineWidth : 1, + bezierCurve : true, + pointDot : true, + pointDotRadius :0, + pointDotStrokeWidth : 2, + datasetStroke : true, + datasetStrokeWidth : 4, + datasetFill : true, + animation : true, + animationSteps : 60, + animationEasing : "easeOutQuart", + onAnimationComplete : null + }; + var config = (options) ? mergeChartConfig(chart.Line.defaults,options) : chart.Line.defaults; + + return new Line(data,config,context); + } + + var clear = function(c){ + c.clearRect(0, 0, width, height); + }; + + var PolarArea = function(data,config,ctx){ + var maxSize, scaleHop, calculatedScale, labelHeight, scaleHeight, valueBounds, labelTemplateString; + + + calculateDrawingSizes(); + + valueBounds = getValueBounds(); + + labelTemplateString = (config.scaleShowLabels)? config.scaleLabel : null; + + //Check and set the scale + if (!config.scaleOverride){ + + calculatedScale = calculateScale(scaleHeight,valueBounds.maxSteps,valueBounds.minSteps,valueBounds.maxValue,valueBounds.minValue,labelTemplateString); + } + else { + calculatedScale = { + steps : config.scaleSteps, + stepValue : config.scaleStepWidth, + graphMin : config.scaleStartValue, + labels : [] + } + populateLabels(labelTemplateString, calculatedScale.labels,calculatedScale.steps,config.scaleStartValue,config.scaleStepWidth); + } + + scaleHop = maxSize/(calculatedScale.steps); + + //Wrap in an animation loop wrapper + animationLoop(config,drawScale,drawAllSegments,ctx); + + function calculateDrawingSizes(){ + maxSize = (Min([width,height])/2); + //Remove whatever is larger - the font size or line width. + + maxSize -= Max([config.scaleFontSize*0.5,config.scaleLineWidth*0.5]); + + labelHeight = config.scaleFontSize*2; + //If we're drawing the backdrop - add the Y padding to the label height and remove from drawing region. + if (config.scaleShowLabelBackdrop){ + labelHeight += (2 * config.scaleBackdropPaddingY); + maxSize -= config.scaleBackdropPaddingY*1.5; + } + + scaleHeight = maxSize; + //If the label height is less than 5, set it to 5 so we don't have lines on top of each other. + labelHeight = Default(labelHeight,5); + } + function drawScale(){ + for (var i=0; i upperValue) {upperValue = data[i].value;} + if (data[i].value < lowerValue) {lowerValue = data[i].value;} + }; + + var maxSteps = Math.floor((scaleHeight / (labelHeight*0.66))); + var minSteps = Math.floor((scaleHeight / labelHeight*0.5)); + + return { + maxValue : upperValue, + minValue : lowerValue, + maxSteps : maxSteps, + minSteps : minSteps + }; + + + } + } + + var Radar = function (data,config,ctx) { + var maxSize, scaleHop, calculatedScale, labelHeight, scaleHeight, valueBounds, labelTemplateString; + + //If no labels are defined set to an empty array, so referencing length for looping doesn't blow up. + if (!data.labels) data.labels = []; + + calculateDrawingSizes(); + + var valueBounds = getValueBounds(); + + labelTemplateString = (config.scaleShowLabels)? config.scaleLabel : null; + + //Check and set the scale + if (!config.scaleOverride){ + + calculatedScale = calculateScale(scaleHeight,valueBounds.maxSteps,valueBounds.minSteps,valueBounds.maxValue,valueBounds.minValue,labelTemplateString); + } + else { + calculatedScale = { + steps : config.scaleSteps, + stepValue : config.scaleStepWidth, + graphMin : config.scaleStartValue, + labels : [] + } + populateLabels(labelTemplateString, calculatedScale.labels,calculatedScale.steps,config.scaleStartValue,config.scaleStepWidth); + } + + scaleHop = maxSize/(calculatedScale.steps); + + animationLoop(config,drawScale,drawAllDataPoints,ctx); + + //Radar specific functions. + function drawAllDataPoints(animationDecimal){ + var rotationDegree = (2*Math.PI)/data.datasets[0].data.length; + + ctx.save(); + //translate to the centre of the canvas. + ctx.translate(width/2,height/2); + + //We accept multiple data sets for radar charts, so show loop through each set + for (var i=0; i Math.PI){ + ctx.textAlign = "right"; + } + else{ + ctx.textAlign = "left"; + } + + ctx.textBaseline = "middle"; + + ctx.fillText(data.labels[k],opposite,-adjacent); + + } + ctx.restore(); + }; + function calculateDrawingSizes(){ + maxSize = (Min([width,height])/2); + + labelHeight = config.scaleFontSize*2; + + var labelLength = 0; + for (var i=0; ilabelLength) labelLength = textMeasurement; + } + + //Figure out whats the largest - the height of the text or the width of what's there, and minus it from the maximum usable size. + maxSize -= Max([labelLength,((config.pointLabelFontSize/2)*1.5)]); + + maxSize -= config.pointLabelFontSize; + maxSize = CapValue(maxSize, null, 0); + scaleHeight = maxSize; + //If the label height is less than 5, set it to 5 so we don't have lines on top of each other. + labelHeight = Default(labelHeight,5); + }; + function getValueBounds() { + var upperValue = Number.MIN_VALUE; + var lowerValue = Number.MAX_VALUE; + + for (var i=0; i upperValue){upperValue = data.datasets[i].data[j]} + if (data.datasets[i].data[j] < lowerValue){lowerValue = data.datasets[i].data[j]} + } + } + + var maxSteps = Math.floor((scaleHeight / (labelHeight*0.66))); + var minSteps = Math.floor((scaleHeight / labelHeight*0.5)); + + return { + maxValue : upperValue, + minValue : lowerValue, + maxSteps : maxSteps, + minSteps : minSteps + }; + + + } + } + + var Pie = function(data,config,ctx){ + var segmentTotal = 0; + + //In case we have a canvas that is not a square. Minus 5 pixels as padding round the edge. + var pieRadius = Min([height/2,width/2]) - 5; + + for (var i=0; i 0){ + ctx.save(); + ctx.textAlign = "right"; + } + else{ + ctx.textAlign = "center"; + } + ctx.fillStyle = config.scaleFontColor; + for (var i=0; i 0){ + ctx.translate(yAxisPosX + i*valueHop,xAxisPosY + config.scaleFontSize); + ctx.rotate(-(rotateLabels * (Math.PI/180))); + ctx.fillText(data.labels[i], 0,0); + ctx.restore(); + } + + else{ + ctx.fillText(data.labels[i], yAxisPosX + i*valueHop,xAxisPosY + config.scaleFontSize+3); + } + + ctx.beginPath(); + ctx.moveTo(yAxisPosX + i * valueHop, xAxisPosY+3); + + //Check i isnt 0, so we dont go over the Y axis twice. + if(config.scaleShowGridLines && i>0){ + ctx.lineWidth = config.scaleGridLineWidth; + ctx.strokeStyle = config.scaleGridLineColor; + ctx.lineTo(yAxisPosX + i * valueHop, 5); + } + else{ + ctx.lineTo(yAxisPosX + i * valueHop, xAxisPosY+3); + } + ctx.stroke(); + } + + //Y axis + ctx.lineWidth = config.scaleLineWidth; + ctx.strokeStyle = config.scaleLineColor; + ctx.beginPath(); + ctx.moveTo(yAxisPosX,xAxisPosY+5); + ctx.lineTo(yAxisPosX,5); + ctx.stroke(); + + ctx.textAlign = "right"; + ctx.textBaseline = "middle"; + for (var j=0; j longestText)? measuredText : longestText; + } + //Add a little extra padding from the y axis + longestText +=10; + } + xAxisLength = width - longestText - widestXLabel; + valueHop = Math.floor(xAxisLength/(data.labels.length-1)); + + yAxisPosX = width-widestXLabel/2-xAxisLength; + xAxisPosY = scaleHeight + config.scaleFontSize/2; + } + function calculateDrawingSizes(){ + maxSize = height; + + //Need to check the X axis first - measure the length of each text metric, and figure out if we need to rotate by 45 degrees. + ctx.font = config.scaleFontStyle + " " + config.scaleFontSize+"px " + config.scaleFontFamily; + widestXLabel = 1; + for (var i=0; i widestXLabel)? textLength : widestXLabel; + } + if (width/data.labels.length < widestXLabel){ + rotateLabels = 45; + if (width/data.labels.length < Math.cos(rotateLabels) * widestXLabel){ + rotateLabels = 90; + maxSize -= widestXLabel; + } + else{ + maxSize -= Math.sin(rotateLabels) * widestXLabel; + } + } + else{ + maxSize -= config.scaleFontSize; + } + + //Add a little padding between the x line and the text + maxSize -= 5; + + + labelHeight = config.scaleFontSize; + + maxSize -= labelHeight; + //Set 5 pixels greater than the font size to allow for a little padding from the X axis. + + scaleHeight = maxSize; + + //Then get the area above we can safely draw on. + + } + function getValueBounds() { + var upperValue = Number.MIN_VALUE; + var lowerValue = Number.MAX_VALUE; + for (var i=0; i upperValue) { upperValue = data.datasets[i].data[j] }; + if ( data.datasets[i].data[j] < lowerValue) { lowerValue = data.datasets[i].data[j] }; + } + }; + + var maxSteps = Math.floor((scaleHeight / (labelHeight*0.66))); + var minSteps = Math.floor((scaleHeight / labelHeight*0.5)); + + return { + maxValue : upperValue, + minValue : lowerValue, + maxSteps : maxSteps, + minSteps : minSteps + }; + + + } + + + } + + var Bar = function(data,config,ctx){ + var maxSize, scaleHop, calculatedScale, labelHeight, scaleHeight, valueBounds, labelTemplateString, valueHop,widestXLabel, xAxisLength,yAxisPosX,xAxisPosY,barWidth, rotateLabels = 0; + + calculateDrawingSizes(); + + valueBounds = getValueBounds(); + //Check and set the scale + labelTemplateString = (config.scaleShowLabels)? config.scaleLabel : ""; + if (!config.scaleOverride){ + + calculatedScale = calculateScale(scaleHeight,valueBounds.maxSteps,valueBounds.minSteps,valueBounds.maxValue,valueBounds.minValue,labelTemplateString); + } + else { + calculatedScale = { + steps : config.scaleSteps, + stepValue : config.scaleStepWidth, + graphMin : config.scaleStartValue, + labels : [] + } + populateLabels(labelTemplateString, calculatedScale.labels,calculatedScale.steps,config.scaleStartValue,config.scaleStepWidth); + } + + scaleHop = Math.floor(scaleHeight/calculatedScale.steps); + calculateXAxisSize(); + animationLoop(config,drawScale,drawBars,ctx); + + function drawBars(animPc){ + ctx.lineWidth = config.barStrokeWidth; + for (var i=0; i 0){ + ctx.save(); + ctx.textAlign = "right"; + } + else{ + ctx.textAlign = "center"; + } + ctx.fillStyle = config.scaleFontColor; + for (var i=0; i 0){ + ctx.translate(yAxisPosX + i*valueHop,xAxisPosY + config.scaleFontSize); + ctx.rotate(-(rotateLabels * (Math.PI/180))); + ctx.fillText(data.labels[i], 0,0); + ctx.restore(); + } + + else{ + ctx.fillText(data.labels[i], yAxisPosX + i*valueHop + valueHop/2,xAxisPosY + config.scaleFontSize+3); + } + + ctx.beginPath(); + ctx.moveTo(yAxisPosX + (i+1) * valueHop, xAxisPosY+3); + + //Check i isnt 0, so we dont go over the Y axis twice. + ctx.lineWidth = config.scaleGridLineWidth; + ctx.strokeStyle = config.scaleGridLineColor; + ctx.lineTo(yAxisPosX + (i+1) * valueHop, 5); + ctx.stroke(); + } + + //Y axis + ctx.lineWidth = config.scaleLineWidth; + ctx.strokeStyle = config.scaleLineColor; + ctx.beginPath(); + ctx.moveTo(yAxisPosX,xAxisPosY+5); + ctx.lineTo(yAxisPosX,5); + ctx.stroke(); + + ctx.textAlign = "right"; + ctx.textBaseline = "middle"; + for (var j=0; j longestText)? measuredText : longestText; + } + //Add a little extra padding from the y axis + longestText +=10; + } + xAxisLength = width - longestText - widestXLabel; + valueHop = Math.floor(xAxisLength/(data.labels.length)); + + barWidth = (valueHop - config.scaleGridLineWidth*2 - (config.barValueSpacing*2) - (config.barDatasetSpacing*data.datasets.length-1) - ((config.barStrokeWidth/2)*data.datasets.length-1))/data.datasets.length; + + yAxisPosX = width-widestXLabel/2-xAxisLength; + xAxisPosY = scaleHeight + config.scaleFontSize/2; + } + function calculateDrawingSizes(){ + maxSize = height; + + //Need to check the X axis first - measure the length of each text metric, and figure out if we need to rotate by 45 degrees. + ctx.font = config.scaleFontStyle + " " + config.scaleFontSize+"px " + config.scaleFontFamily; + widestXLabel = 1; + for (var i=0; i widestXLabel)? textLength : widestXLabel; + } + if (width/data.labels.length < widestXLabel){ + rotateLabels = 45; + if (width/data.labels.length < Math.cos(rotateLabels) * widestXLabel){ + rotateLabels = 90; + maxSize -= widestXLabel; + } + else{ + maxSize -= Math.sin(rotateLabels) * widestXLabel; + } + } + else{ + maxSize -= config.scaleFontSize; + } + + //Add a little padding between the x line and the text + maxSize -= 5; + + + labelHeight = config.scaleFontSize; + + maxSize -= labelHeight; + //Set 5 pixels greater than the font size to allow for a little padding from the X axis. + + scaleHeight = maxSize; + + //Then get the area above we can safely draw on. + + } + function getValueBounds() { + var upperValue = Number.MIN_VALUE; + var lowerValue = Number.MAX_VALUE; + for (var i=0; i upperValue) { upperValue = data.datasets[i].data[j] }; + if ( data.datasets[i].data[j] < lowerValue) { lowerValue = data.datasets[i].data[j] }; + } + }; + + var maxSteps = Math.floor((scaleHeight / (labelHeight*0.66))); + var minSteps = Math.floor((scaleHeight / labelHeight*0.5)); + + return { + maxValue : upperValue, + minValue : lowerValue, + maxSteps : maxSteps, + minSteps : minSteps + }; + + + } + } + + function calculateOffset(val,calculatedScale,scaleHop){ + var outerValue = calculatedScale.steps * calculatedScale.stepValue; + var adjustedValue = val - calculatedScale.graphMin; + var scalingFactor = CapValue(adjustedValue/outerValue,1,0); + return (scaleHop*calculatedScale.steps) * scalingFactor; + } + + function animationLoop(config,drawScale,drawData,ctx){ + var animFrameAmount = (config.animation)? 1/CapValue(config.animationSteps,Number.MAX_VALUE,1) : 1, + easingFunction = animationOptions[config.animationEasing], + percentAnimComplete =(config.animation)? 0 : 1; + + + + if (typeof drawScale !== "function") drawScale = function(){}; + + requestAnimFrame(animLoop); + + function animateFrame(){ + var easeAdjustedAnimationPercent =(config.animation)? CapValue(easingFunction(percentAnimComplete),null,0) : 1; + clear(ctx); + if(config.scaleOverlay){ + drawData(easeAdjustedAnimationPercent); + drawScale(); + } else { + drawScale(); + drawData(easeAdjustedAnimationPercent); + } + } + function animLoop(){ + //We need to check if the animation is incomplete (less than 1), or complete (1). + percentAnimComplete += animFrameAmount; + animateFrame(); + //Stop the loop continuing forever + if (percentAnimComplete <= 1){ + requestAnimFrame(animLoop); + } + else{ + if (typeof config.onAnimationComplete == "function") config.onAnimationComplete(); + } + + } + + } + + //Declare global functions to be called within this namespace here. + + + // shim layer with setTimeout fallback + var requestAnimFrame = (function(){ + return window.requestAnimationFrame || + window.webkitRequestAnimationFrame || + window.mozRequestAnimationFrame || + window.oRequestAnimationFrame || + window.msRequestAnimationFrame || + function(callback) { + window.setTimeout(callback, 1000 / 60); + }; + })(); + + function calculateScale(drawingHeight,maxSteps,minSteps,maxValue,minValue,labelTemplateString){ + var graphMin,graphMax,graphRange,stepValue,numberOfSteps,valueRange,rangeOrderOfMagnitude,decimalNum; + + valueRange = maxValue - minValue; + + rangeOrderOfMagnitude = calculateOrderOfMagnitude(valueRange); + + graphMin = Math.floor(minValue / (1 * Math.pow(10, rangeOrderOfMagnitude))) * Math.pow(10, rangeOrderOfMagnitude); + + graphMax = Math.ceil(maxValue / (1 * Math.pow(10, rangeOrderOfMagnitude))) * Math.pow(10, rangeOrderOfMagnitude); + + graphRange = graphMax - graphMin; + + stepValue = Math.pow(10, rangeOrderOfMagnitude); + + numberOfSteps = Math.round(graphRange / stepValue); + + //Compare number of steps to the max and min for that size graph, and add in half steps if need be. + while(numberOfSteps < minSteps || numberOfSteps > maxSteps) { + if (numberOfSteps < minSteps){ + stepValue /= 2; + numberOfSteps = Math.round(graphRange/stepValue); + } + else{ + stepValue *=2; + numberOfSteps = Math.round(graphRange/stepValue); + } + }; + + var labels = []; + populateLabels(labelTemplateString, labels, numberOfSteps, graphMin, stepValue); + + return { + steps : numberOfSteps, + stepValue : stepValue, + graphMin : graphMin, + labels : labels + + } + + function calculateOrderOfMagnitude(val){ + return Math.floor(Math.log(val) / Math.LN10); + } + + + } + + //Populate an array of all the labels by interpolating the string. + function populateLabels(labelTemplateString, labels, numberOfSteps, graphMin, stepValue) { + if (labelTemplateString) { + //Fix floating point errors by setting to fixed the on the same decimal as the stepValue. + for (var i = 1; i < numberOfSteps + 1; i++) { + labels.push(tmpl(labelTemplateString, {value: (graphMin + (stepValue * i)).toFixed(getDecimalPlaces(stepValue))})); + } + } + } + + //Max value from array + function Max( array ){ + return Math.max.apply( Math, array ); + }; + //Min value from array + function Min( array ){ + return Math.min.apply( Math, array ); + }; + //Default if undefined + function Default(userDeclared,valueIfFalse){ + if(!userDeclared){ + return valueIfFalse; + } else { + return userDeclared; + } + }; + //Is a number function + function isNumber(n) { + return !isNaN(parseFloat(n)) && isFinite(n); + } + //Apply cap a value at a high or low number + function CapValue(valueToCap, maxValue, minValue){ + if(isNumber(maxValue)) { + if( valueToCap > maxValue ) { + return maxValue; + } + } + if(isNumber(minValue)){ + if ( valueToCap < minValue ){ + return minValue; + } + } + return valueToCap; + } + function getDecimalPlaces (num){ + var numberOfDecimalPlaces; + if (num%1!=0){ + return num.toString().split(".")[1].length + } + else{ + return 0; + } + + } + + function mergeChartConfig(defaults,userDefined){ + var returnObj = {}; + for (var attrname in defaults) { returnObj[attrname] = defaults[attrname]; } + for (var attrname in userDefined) { returnObj[attrname] = userDefined[attrname]; } + return returnObj; + } + + //Javascript micro templating by John Resig - source at http://ejohn.org/blog/javascript-micro-templating/ + var cache = {}; + + function tmpl(str, data){ + // Figure out if we're getting a template, or if we need to + // load the template - and be sure to cache the result. + var fn = !/\W/.test(str) ? + cache[str] = cache[str] || + tmpl(document.getElementById(str).innerHTML) : + + // Generate a reusable function that will serve as a template + // generator (and which will be cached). + new Function("obj", + "var p=[],print=function(){p.push.apply(p,arguments);};" + + + // Introduce the data as local variables using with(){} + "with(obj){p.push('" + + + // Convert the template into pure JavaScript + str + .replace(/[\r\t\n]/g, " ") + .split("<%").join("\t") + .replace(/((^|%>)[^\t]*)'/g, "$1\r") + .replace(/\t=(.*?)%>/g, "',$1,'") + .split("\t").join("');") + .split("%>").join("p.push('") + .split("\r").join("\\'") + + "');}return p.join('');"); + + // Provide some basic currying to the user + return data ? fn( data ) : fn; + }; +} + + diff --git a/sample/js/bbplayer.js b/sample/js/bbplayer.js new file mode 100755 index 00000000..01ccc098 --- /dev/null +++ b/sample/js/bbplayer.js @@ -0,0 +1,329 @@ +/*global $, document, alert*/ + +(function () { + + + // Track multiple players on the page + var bbplayers = []; + + + // Stop all other bbplayers on page when starting another + function stopAllBBPlayers() { + var i = 0; + for (i = 0; i < bbplayers.length; i++) { + bbplayers[i].pause(); + bbplayers[i].updateDisplay(); + } + } + + //Pad a number with leading zeros + function zeroPad(number, places) { + var zeros = places - number.toString().length + 1; + return new Array(+(zeros > 0 && zeros)).join("0") + number; + } + + + // Convert seconds to mm:ss format + function toTimeString(seconds) { + if (isNaN(seconds)) { + return "--:--"; + } + var minutes = Math.floor(seconds / 60); + seconds = seconds - minutes * 60; + return zeroPad(minutes, 2) + ":" + zeroPad(seconds, 2); + } + + + // Parse out file name from path, unescape + function parseTitle(path) { + path = decodeURI(path); + return path.split('/').pop().split('.').shift(); + } + + // Object to represent bbplayer + var BBPlayer = function (bbplayer) { + this.bbplayer = bbplayer; + this.bbaudio = bbplayer.find("audio"); + this.bbdebug = bbplayer.find(".bb-debug"); + this.bbaudio.get(0).preload = "auto"; // seems not to preload on many mobile browsers. + this.state = "paused"; // TODO enum states + this.trackList = []; + this.init(); + }; + + + // Debug logger + BBPlayer.prototype.log = function (msg) { + if (this.bbdebug) { + this.bbdebug.append(msg + "
"); + this.bbdebug.scrollTop(this.bbdebug.prop('scrollHeight') - this.bbdebug.height()); + } + }; + + + // say if audio element can play file type + BBPlayer.prototype.canPlay = function (extension) { + var audioElem = this.bbaudio.get(0); + if ((/mp3/i).test(extension) && audioElem.canPlayType('audio/mpeg')) { + return true; + } + if ((/ogg/i).test(extension) && audioElem.canPlayType('audio/ogg')) { + return true; + } + return false; + }; + + + // Set up multiple sources as track list, + // Remove duplicate and unplayable sources + BBPlayer.prototype.loadSources = function () { + var self = this; + self.log('func: loadSources'); + self.bbaudio.find("source").each(function (x) { + var fileName = $(this).attr('src').split('/').pop(); + var extension = fileName.split('.').pop(); + var trackName = fileName.split('.').shift(); + var playable = self.canPlay(extension); + var audioElem = self.bbaudio.get(0); + if ($.inArray(trackName, self.trackList) === -1 && playable === true) { + self.trackList.push(trackName); + } else { + $(this).remove(); + } + }); + }; + + + // Update display + BBPlayer.prototype.updateDisplay = function () { + var audioElem = this.bbaudio.get(0); + var duration = toTimeString(Math.ceil(audioElem.duration)); + var elapsed = toTimeString(Math.ceil(audioElem.currentTime)); + var title = parseTitle(audioElem.currentSrc); + this.bbplayer.find('.bb-trackLength').html(duration); + this.bbplayer.find('.bb-trackTime').html(elapsed); + this.bbplayer.find('.bb-trackTitle').html(title); + }; + + + // Set current source for audio to given track number + BBPlayer.prototype.loadTrack = function (trackNumber) { + var source = this.bbaudio.find("source").eq(trackNumber).attr('src'); + this.bbaudio.get(0).src = source; + this.currentTrack = trackNumber; + this.log('func: loadTrack: loaded ' + source); + }; + + + // Load next track in playlist + BBPlayer.prototype.loadNext = function () { + this.log('func: loadNext'); + var trackCount = this.bbaudio.find("source").length; + var newTrack = ((1 + this.currentTrack) % trackCount); + this.loadTrack(newTrack); + }; + + + // Load previous track in playlist + BBPlayer.prototype.loadPrevious = function () { + this.log('func: loadPrevious'); + var trackCount = this.bbaudio.find('source').length; + var newTrack = (this.currentTrack + (trackCount - 1)) % trackCount; + this.loadTrack(newTrack); + }; + + + // Set up event handlers for audio element events + BBPlayer.prototype.setAudioEventHandlers = function () { + + var self = this; + self.log('func: setAudioEventHandlers'); + + self.bbaudio.on('abort', function () { + self.log('event: audio abort'); + }); + + // Update display and continue play when song has loaded + self.bbaudio.on('canplay', function () { + self.log('event: audio canplay'); + if (self.state === 'playing' && $(this).get(0).paused) { + $(this).get(0).play(); + } + self.updateDisplay(); + }); + + self.bbaudio.on('canplaythrough', function () { + self.log('event: audio canplaythrough'); + }); + + self.bbaudio.on('durationchange', function () { + self.log('event: audio durationchange'); + }); + + self.bbaudio.on('emptied', function () { + self.log('event: audio emptied'); + }); + + // Load next track when current one ends + self.bbaudio.on('ended', function () { + self.log('event: audio ended'); + self.loadNext(); + }); + + self.bbaudio.on('error', function () { + self.log('event: audio error'); + }); + + self.bbaudio.on('loadeddata', function () { + self.log('event: audio loadeddata'); + }); + + self.bbaudio.on('loadedmetadata', function () { + self.log('event: audio loadedmetadata'); + }); + + self.bbaudio.on('loadstart', function () { + self.log('event: audio loadstart'); + }); + + self.bbaudio.on('pause', function () { + self.log('event: audio pause'); + }); + + self.bbaudio.on('play', function () { + self.log('event: audio play'); + }); + + self.bbaudio.on('playing', function () { + self.log('event: audio playing'); + }); + + self.bbaudio.on('progress', function () { + self.log('event: audio progress'); + }); + + self.bbaudio.on('ratechange', function () { + self.log('event: audio ratechange'); + }); + + self.bbaudio.on('seeked', function () { + self.log('event: audio seeked'); + }); + + self.bbaudio.on('seeking', function () { + self.log('event: audio seeking'); + }); + + self.bbaudio.on('stalled', function () { + self.log('event: audio stalled'); + }); + + self.bbaudio.on('suspend', function () { + self.log('event: audio suspend'); + }); + + self.bbaudio.on('timeupdate', function () { + // self.log('event: audio timeupdate'); + self.updateDisplay(); + }); + + self.bbaudio.on('volumechange', function () { + self.log('event: audio volumechange'); + }); + + self.bbaudio.on('waiting', function () { + self.log('event: audio waiting'); + }); + + }; + + + // Change BBPlayer to play state + BBPlayer.prototype.play = function () { + stopAllBBPlayers(); + var self = this; + self.log('func: play'); + self.bbaudio.get(0).play(); + self.state = "playing"; + var playButton = self.bbplayer.find(".bb-play"); + playButton.removeClass("bb-paused"); + playButton.addClass("bb-playing"); + }; + + + // Change BBPlayer to pause state + BBPlayer.prototype.pause = function () { + this.log('func: pause'); + this.bbaudio.get(0).pause(); + this.state = "paused"; + var playButton = this.bbplayer.find(".bb-play"); + playButton.removeClass("bb-playing"); + playButton.addClass("bb-paused"); + }; + + + // Set up button click handlers + BBPlayer.prototype.setClickHandlers = function () { + + var self = this; + self.log('func: setClickHandlers'); + var audioElem = self.bbaudio.get(0); + + // Activate fast-forward + self.bbplayer.find('.bb-forward').click(function () { + self.log('event: click .bb-forward'); + self.loadNext(); + }); + + // Toggle play / pause + self.bbplayer.find('.bb-play').click(function () { + self.log('event: click .bb-play'); + if (self.state === "paused") { //(audioElem.paused) { + self.play(); + } else { + self.pause(); + } + self.updateDisplay(); + }); + + // Activate rewind + self.bbplayer.find('.bb-rewind').click(function () { + self.log('event: click .bb-rewind'); + var time = audioElem.currentTime; + if (time > 1.5) { + audioElem.currentTime = 0; + } else { + self.loadPrevious(); + } + }); + + // TODO make debug more "pluggy". + if (self.bbdebug) { + self.bbdebug.click(function () { + $(this).empty(); + }); + } + + }; + + + // BBPlayer initialisation + BBPlayer.prototype.init = function () { + var self = this; + self.setAudioEventHandlers(); + self.loadSources(); + // self.loadTrack (0); + self.currentTrack = 0; + self.setClickHandlers(); + self.updateDisplay(); + }; + + + // Create BBPlayer Object for each element of .bbplayer class + $(document).ready(function () { + $(".bbplayer").each(function (x) { + bbplayers[x] = new BBPlayer($(this)); + }); + }); + +}()); diff --git a/sample/js/clndr.js b/sample/js/clndr.js new file mode 100755 index 00000000..4cb783bd --- /dev/null +++ b/sample/js/clndr.js @@ -0,0 +1,833 @@ +/* + * ~ CLNDR v1.1.0 ~ + * ============================================== + * https://github.com/kylestetz/CLNDR + * ============================================== + * created by kyle stetz (github.com/kylestetz) + * &available under the MIT license + * http://opensource.org/licenses/mit-license.php + * ============================================== + * + * This is the fully-commented development version of CLNDR. + * For the production version, check out clndr.min.js + * at https://github.com/kylestetz/CLNDR + * + * This work is based on the + * jQuery lightweight plugin boilerplate + * Original author: @ajpiano + * Further changes, comments: @addyosmani + * Licensed under the MIT license + */ + +;(function ( $, window, document, undefined ) { + + // This is the default calendar template. This can be overridden. + var clndrTemplate = "
" + + "

previous

<%= month %> <%= year %>

next

" + + "
" + + "" + + "" + + "" + + "<% for(var i = 0; i < daysOfTheWeek.length; i++) { %>" + + "" + + "<% } %>" + + "" + + "" + + "" + + "<% for(var i = 0; i < numberOfRows; i++){ %>" + + "" + + "<% for(var j = 0; j < 7; j++){ %>" + + "<% var d = j + i * 7; %>" + + "" + + "<% } %>" + + "" + + "<% } %>" + + "" + + "
<%= daysOfTheWeek[i] %>
<%= days[d].day %>" + + "
"; + + var pluginName = 'clndr'; + + var defaults = { + template: clndrTemplate, + weekOffset: 0, + startWithMonth: null, + clickEvents: { + click: null, + nextMonth: null, + previousMonth: null, + nextYear: null, + previousYear: null, + today: null, + onMonthChange: null, + onYearChange: null + }, + targets: { + nextButton: 'clndr-next-button', + previousButton: 'clndr-previous-button', + nextYearButton: 'clndr-next-year-button', + previousYearButton: 'clndr-previous-year-button', + todayButton: 'clndr-today-button', + day: 'day', + empty: 'empty' + }, + events: [], + extras: null, + dateParameter: 'date', + multiDayEvents: null, + doneRendering: null, + render: null, + daysOfTheWeek: null, + showAdjacentMonths: true, + adjacentDaysChangeMonth: false, + ready: null, + constraints: null + }; + + // The actual plugin constructor + function Clndr( element, options ) { + this.element = element; + + // merge the default options with user-provided options + this.options = $.extend(true, {}, defaults, options); + + // if there are events, we should run them through our addMomentObjectToEvents function + // which will add a date object that we can use to make life easier. This is only necessary + // when events are provided on instantiation, since our setEvents function uses addMomentObjectToEvents. + if(this.options.events.length) { + if(this.options.multiDayEvents) { + this.options.events = this.addMultiDayMomentObjectsToEvents(this.options.events); + } else { + this.options.events = this.addMomentObjectToEvents(this.options.events); + } + } + + // this object will store a reference to the current month. + // it's a moment object, which allows us to poke at it a little if we need to. + // this will serve as the basis for switching between months & is the go-to + // internally if we want to know which month we're currently at. + if(this.options.startWithMonth) { + this.month = moment(this.options.startWithMonth).startOf('month'); + } else { + this.month = moment().startOf('month'); + } + + // if we've got constraints set, make sure the month is within them. + if(this.options.constraints) { + // first check if the start date exists & is later than now. + if(this.options.constraints.startDate) { + var startMoment = moment(this.options.constraints.startDate); + if(this.month.isBefore(startMoment, 'month')) { + this.month.set('month', startMoment.month()); + this.month.set('year', startMoment.year()); + } + } + // make sure the month (whether modified or not) is before the endDate + if(this.options.constraints.endDate) { + var endMoment = moment(this.options.constraints.endDate); + if(this.month.isAfter(endMoment, 'month')) { + this.month.set('month', endMoment.month()).set('year', endMoment.year()); + } + } + } + + this._defaults = defaults; + this._name = pluginName; + + // Some first-time initialization -> day of the week offset, + // template compiling, making and storing some elements we'll need later, + // & event handling for the controller. + this.init(); + } + + Clndr.prototype.init = function () { + // create the days of the week using moment's current language setting + this.daysOfTheWeek = this.options.daysOfTheWeek || []; + if(!this.options.daysOfTheWeek) { + this.daysOfTheWeek = []; + for(var i = 0; i < 7; i++) { + this.daysOfTheWeek.push( moment().weekday(i).format('dd').charAt(0) ); + } + } + // shuffle the week if there's an offset + if(this.options.weekOffset) { + this.daysOfTheWeek = this.shiftWeekdayLabels(this.options.weekOffset); + } + + // quick & dirty test to make sure rendering is possible. + if( !$.isFunction(this.options.render) ) { + this.options.render = null; + if (typeof _ === 'undefined') { + throw new Error("Underscore was not found. Please include underscore.js OR provide a custom render function."); + } + else { + // we're just going ahead and using underscore here if no render method has been supplied. + this.compiledClndrTemplate = _.template(this.options.template); + } + } + + // create the parent element that will hold the plugin & save it for later + $(this.element).html("
"); + this.calendarContainer = $('.clndr', this.element); + + // attach event handlers for clicks on buttons/cells + this.bindEvents(); + + // do a normal render of the calendar template + this.render(); + + // if a ready callback has been provided, call it. + if(this.options.ready) { + this.options.ready.apply(this, []); + } + }; + + Clndr.prototype.shiftWeekdayLabels = function(offset) { + var days = this.daysOfTheWeek; + for(var i = 0; i < offset; i++) { + days.push( days.shift() ); + } + return days; + }; + + // This is where the magic happens. Given a moment object representing the current month, + // an array of calendarDay objects is constructed that contains appropriate events and + // classes depending on the circumstance. + Clndr.prototype.createDaysObject = function(currentMonth) { + // this array will hold numbers for the entire grid (even the blank spaces) + daysArray = []; + var date = currentMonth.startOf('month'); + + // filter the events list (if it exists) to events that are happening last month, this month and next month (within the current grid view) + this.eventsLastMonth = []; + this.eventsThisMonth = []; + this.eventsNextMonth = []; + + if(this.options.events.length) { + + // MULTI-DAY EVENT PARSING + // if we're using multi-day events, the start or end must be in the current month + if(this.options.multiDayEvents) { + this.eventsThisMonth = $(this.options.events).filter( function() { + return this._clndrStartDateObject.format("YYYY-MM") == currentMonth.format("YYYY-MM") + || this._clndrEndDateObject.format("YYYY-MM") == currentMonth.format("YYYY-MM"); + }).toArray(); + + if(this.options.showAdjacentMonths) { + var lastMonth = currentMonth.clone().subtract('months', 1); + var nextMonth = currentMonth.clone().add('months', 1); + this.eventsLastMonth = $(this.options.events).filter( function() { + return this._clndrStartDateObject.format("YYYY-MM") == lastMonth.format("YYYY-MM") + || this._clndrEndDateObject.format("YYYY-MM") == lastMonth.format("YYYY-MM"); + }).toArray(); + + this.eventsNextMonth = $(this.options.events).filter( function() { + return this._clndrStartDateObject.format("YYYY-MM") == nextMonth.format("YYYY-MM") + || this._clndrEndDateObject.format("YYYY-MM") == nextMonth.format("YYYY-MM"); + }).toArray(); + } + } + + // SINGLE-DAY EVENT PARSING + // if we're using single-day events, use _clndrDateObject + else { + this.eventsThisMonth = $(this.options.events).filter( function() { + return this._clndrDateObject.format("YYYY-MM") == currentMonth.format("YYYY-MM"); + }).toArray(); + + // filter the adjacent months as well, if the option is true + if(this.options.showAdjacentMonths) { + var lastMonth = currentMonth.clone().subtract('months', 1); + var nextMonth = currentMonth.clone().add('months', 1); + this.eventsLastMonth = $(this.options.events).filter( function() { + return this._clndrDateObject.format("YYYY-MM") == lastMonth.format("YYYY-MM"); + }).toArray(); + + this.eventsNextMonth = $(this.options.events).filter( function() { + return this._clndrDateObject.format("YYYY-MM") == nextMonth.format("YYYY-MM"); + }).toArray(); + } + } + } + + // if diff is greater than 0, we'll have to fill in last days of the previous month + // to account for the empty boxes in the grid. + // we also need to take into account the weekOffset parameter + var diff = date.weekday() - this.options.weekOffset; + if(diff < 0) diff += 7; + + if(this.options.showAdjacentMonths) { + for(var i = 0; i < diff; i++) { + var day = moment([currentMonth.year(), currentMonth.month(), i - diff + 1]); + daysArray.push( this.createDayObject(day, this.eventsLastMonth) ); + } + } else { + for(var i = 0; i < diff; i++) { + daysArray.push( this.calendarDay({ classes: this.options.targets.empty + " last-month" }) ); + } + } + + // now we push all of the days in a month + var numOfDays = date.daysInMonth(); + for(var i = 1; i <= numOfDays; i++) { + var day = moment([currentMonth.year(), currentMonth.month(), i]); + daysArray.push(this.createDayObject(day, this.eventsThisMonth) ) + } + + // ...and if there are any trailing blank boxes, fill those in + // with the next month first days + if(this.options.showAdjacentMonths) { + i = 1; + while(daysArray.length % 7 !== 0) { + var day = moment([currentMonth.year(), currentMonth.month(), numOfDays + i]); + daysArray.push( this.createDayObject(day, this.eventsNextMonth) ); + i++; + } + } else { + i = 1; + while(daysArray.length % 7 !== 0) { + daysArray.push( this.calendarDay({ classes: this.options.targets.empty + " next-month" }) ); + i++; + } + } + + return daysArray; + }; + + Clndr.prototype.createDayObject = function(day, monthEvents) { + var eventsToday = []; + var now = moment(); + var self = this; + + var j = 0, l = monthEvents.length; + for(j; j < l; j++) { + // keep in mind that the events here already passed the month/year test. + // now all we have to compare is the moment.date(), which returns the day of the month. + if(self.options.multiDayEvents) { + var start = monthEvents[j]._clndrStartDateObject; + var end = monthEvents[j]._clndrEndDateObject; + // if today is the same day as start or is after the start, and + // if today is the same day as the end or before the end ... + // woohoo semantics! + if( ( day.isSame(start, 'day') || day.isAfter(start, 'day') ) && + ( day.isSame(end, 'day') || day.isBefore(end, 'day') ) ) { + eventsToday.push( monthEvents[j] ); + } + } else { + if( monthEvents[j]._clndrDateObject.date() == day.date() ) { + eventsToday.push( monthEvents[j] ); + } + } + } + + var extraClasses = ""; + + if(now.format("YYYY-MM-DD") == day.format("YYYY-MM-DD")) { + extraClasses += " today"; + } + if(day.isBefore(now, 'day')) { + extraClasses += " past"; + } + if(eventsToday.length) { + extraClasses += " event"; + } + if(this.month.month() > day.month()) { + extraClasses += " adjacent-month"; + + this.month.year() === day.year() + ? extraClasses += " last-month" + : extraClasses += " next-month"; + + } else if(this.month.month() < day.month()) { + extraClasses += " adjacent-month"; + + this.month.year() === day.year() + ? extraClasses += " next-month" + : extraClasses += " last-month"; + } + + // if there are constraints, we need to add the inactive class to the days outside of them + if(this.options.constraints) { + if(this.options.constraints.startDate && day.isBefore(moment( this.options.constraints.startDate ))) { + extraClasses += " inactive"; + } + if(this.options.constraints.endDate && day.isAfter(moment( this.options.constraints.endDate ))) { + extraClasses += " inactive"; + } + } + + // validate moment date + if (!day.isValid() && day.hasOwnProperty('_d') && day._d != undefined) { + day = moment(day._d); + } + + // we're moving away from using IDs in favor of classes, since when + // using multiple calendars on a page we are technically violating the + // uniqueness of IDs. + extraClasses += " calendar-day-" + day.format("YYYY-MM-DD"); + + return this.calendarDay({ + day: day.date(), + classes: this.options.targets.day + extraClasses, + events: eventsToday, + date: day + }); + }; + + Clndr.prototype.render = function() { + // get rid of the previous set of calendar parts. + // TODO: figure out if this is the right way to ensure proper garbage collection? + this.calendarContainer.children().remove(); + // get an array of days and blank spaces + var days = this.createDaysObject(this.month); + // this is to prevent a scope/naming issue between this.month and data.month + var currentMonth = this.month; + + var data = { + daysOfTheWeek: this.daysOfTheWeek, + numberOfRows: Math.ceil(days.length / 7), + days: days, + month: this.month.format('MMMM'), + year: this.month.year(), + eventsThisMonth: this.eventsThisMonth, + eventsLastMonth: this.eventsLastMonth, + eventsNextMonth: this.eventsNextMonth, + extras: this.options.extras + }; + + // render the calendar with the data above & bind events to its elements + if(!this.options.render) { + this.calendarContainer.html(this.compiledClndrTemplate(data)); + } else { + this.calendarContainer.html(this.options.render.apply(this, [data])); + } + + // if there are constraints, we need to add the 'inactive' class to the controls + if(this.options.constraints) { + // in the interest of clarity we're just going to remove all inactive classes and re-apply them each render. + for(target in this.options.targets) { + if(target != this.options.targets.day) { + this.element.find('.' + this.options.targets[target]).toggleClass('inactive', false); + } + } + + var start = null; + var end = null; + + if(this.options.constraints.startDate) { + start = moment(this.options.constraints.startDate); + } + if(this.options.constraints.endDate) { + end = moment(this.options.constraints.endDate); + } + // deal with the month controls first. + // are we at the start month? + if(start && this.month.isSame( start, 'month' )) { + this.element.find('.' + this.options.targets.previousButton).toggleClass('inactive', true); + } + // are we at the end month? + if(end && this.month.isSame( end, 'month' )) { + this.element.find('.' + this.options.targets.nextButton).toggleClass('inactive', true); + } + // what's last year looking like? + if(start && moment(start).subtract('years', 1).isBefore(moment(this.month).subtract('years', 1)) ) { + this.element.find('.' + this.options.targets.previousYearButton).toggleClass('inactive', true); + } + // how about next year? + if(end && moment(end).add('years', 1).isAfter(moment(this.month).add('years', 1)) ) { + this.element.find('.' + this.options.targets.nextYearButton).toggleClass('inactive', true); + } + // today? we could put this in init(), but we want to support the user changing the constraints on a living instance. + if(( start && start.isAfter( moment(), 'month' ) ) || ( end && end.isBefore( moment(), 'month' ) )) { + this.element.find('.' + this.options.targets.today).toggleClass('inactive', true); + } + } + + + if(this.options.doneRendering) { + this.options.doneRendering.apply(this, []); + } + }; + + Clndr.prototype.bindEvents = function() { + var $container = $(this.element); + var self = this; + + // target the day elements and give them click events + $container.on('click', '.'+this.options.targets.day, function(event) { + if(self.options.clickEvents.click) { + var target = self.buildTargetObject(event.currentTarget, true); + self.options.clickEvents.click.apply(self, [target]); + } + // if adjacentDaysChangeMonth is on, we need to change the month here. + if(self.options.adjacentDaysChangeMonth) { + if($(event.currentTarget).is(".last-month")) { + self.backActionWithContext(self); + } else if($(event.currentTarget).is(".next-month")) { + self.forwardActionWithContext(self); + } + } + }); + // target the empty calendar boxes as well + $container.on('click', '.'+this.options.targets.empty, function(event) { + if(self.options.clickEvents.click) { + var target = self.buildTargetObject(event.currentTarget, false); + self.options.clickEvents.click.apply(self, [target]); + } + if(self.options.adjacentDaysChangeMonth) { + if($(event.currentTarget).is(".last-month")) { + self.backActionWithContext(self); + } else if($(event.currentTarget).is(".next-month")) { + self.forwardActionWithContext(self); + } + } + }); + + // bind the previous, next and today buttons + $container + .on('click', '.'+this.options.targets.previousButton, { context: this }, this.backAction) + .on('click', '.'+this.options.targets.nextButton, { context: this }, this.forwardAction) + .on('click', '.'+this.options.targets.todayButton, { context: this }, this.todayAction) + .on('click', '.'+this.options.targets.nextYearButton, { context: this }, this.nextYearAction) + .on('click', '.'+this.options.targets.previousYearButton, { context: this }, this.previousYearAction); + } + + // If the user provided a click callback we'd like to give them something nice to work with. + // buildTargetObject takes the DOM element that was clicked and returns an object with + // the DOM element, events, and the date (if the latter two exist). Currently it is based on the id, + // however it'd be nice to use a data- attribute in the future. + Clndr.prototype.buildTargetObject = function(currentTarget, targetWasDay) { + // This is our default target object, assuming we hit an empty day with no events. + var target = { + element: currentTarget, + events: [], + date: null + }; + // did we click on a day or just an empty box? + if(targetWasDay) { + var dateString; + + // Our identifier is in the list of classNames. Find it! + var classNameIndex = currentTarget.className.indexOf('calendar-day-'); + if(classNameIndex !== 0) { + // our unique identifier is always 23 characters long. + // If this feels a little wonky, that's probably because it is. + // Open to suggestions on how to improve this guy. + dateString = currentTarget.className.substring(classNameIndex + 13, classNameIndex + 23); + target.date = moment(dateString); + } else { + target.date = null; + } + + // do we have events? + if(this.options.events) { + // are any of the events happening today? + if(this.options.multiDayEvents) { + target.events = $.makeArray( $(this.options.events).filter( function() { + // filter the dates down to the ones that match. + return ( ( target.date.isSame(this._clndrStartDateObject, 'day') || target.date.isAfter(this._clndrStartDateObject, 'day') ) && + ( target.date.isSame(this._clndrEndDateObject, 'day') || target.date.isBefore(this._clndrEndDateObject, 'day') ) ); + }) ); + } else { + target.events = $.makeArray( $(this.options.events).filter( function() { + // filter the dates down to the ones that match. + return this._clndrDateObject.format('YYYY-MM-DD') == dateString; + }) ); + } + } + } + + return target; + } + + // the click handlers in bindEvents need a context, so these are wrappers + // to the actual functions. Todo: better way to handle this? + Clndr.prototype.forwardAction = function(event) { + var self = event.data.context; + self.forwardActionWithContext(self); + }; + + Clndr.prototype.backAction = function(event) { + var self = event.data.context; + self.backActionWithContext(self); + }; + + // These are called directly, except for in the bindEvent click handlers, + // where forwardAction and backAction proxy to these guys. + Clndr.prototype.backActionWithContext = function(self) { + // before we do anything, check if there is an inactive class on the month control. + // if it does, we want to return and take no action. + if(self.element.find('.' + self.options.targets.previousButton).hasClass('inactive')) { + return; + } + + // is subtracting one month going to switch the year? + var yearChanged = !self.month.isSame( moment(self.month).subtract('months', 1), 'year'); + self.month.subtract('months', 1); + + self.render(); + + if(self.options.clickEvents.previousMonth) { + self.options.clickEvents.previousMonth.apply( self, [moment(self.month)] ); + } + if(self.options.clickEvents.onMonthChange) { + self.options.clickEvents.onMonthChange.apply( self, [moment(self.month)] ); + } + if(yearChanged) { + if(self.options.clickEvents.onYearChange) { + self.options.clickEvents.onYearChange.apply( self, [moment(self.month)] ); + } + } + }; + + Clndr.prototype.forwardActionWithContext = function(self) { + // before we do anything, check if there is an inactive class on the month control. + // if it does, we want to return and take no action. + if(self.element.find('.' + self.options.targets.nextButton).hasClass('inactive')) { + return; + } + + // is adding one month going to switch the year? + var yearChanged = !self.month.isSame( moment(self.month).add('months', 1), 'year'); + self.month.add('months', 1); + + self.render(); + + if(self.options.clickEvents.nextMonth) { + self.options.clickEvents.nextMonth.apply(self, [moment(self.month)]); + } + if(self.options.clickEvents.onMonthChange) { + self.options.clickEvents.onMonthChange.apply(self, [moment(self.month)]); + } + if(yearChanged) { + if(self.options.clickEvents.onYearChange) { + self.options.clickEvents.onYearChange.apply( self, [moment(self.month)] ); + } + } + }; + + Clndr.prototype.todayAction = function(event) { + var self = event.data.context; + + // did we switch months when the today button was hit? + var monthChanged = !self.month.isSame(moment(), 'month'); + var yearChanged = !self.month.isSame(moment(), 'year'); + + self.month = moment().startOf('month'); + + // fire the today event handler regardless of whether the month changed. + if(self.options.clickEvents.today) { + self.options.clickEvents.today.apply( self, [moment(self.month)] ); + } + + if(monthChanged) { + // no need to re-render if we didn't change months. + self.render(); + + self.month = moment(); + // fire the onMonthChange callback + if(self.options.clickEvents.onMonthChange) { + self.options.clickEvents.onMonthChange.apply( self, [moment(self.month)] ); + } + // maybe fire the onYearChange callback? + if(yearChanged) { + if(self.options.clickEvents.onYearChange) { + self.options.clickEvents.onYearChange.apply( self, [moment(self.month)] ); + } + } + } + }; + + Clndr.prototype.nextYearAction = function(event) { + var self = event.data.context; + // before we do anything, check if there is an inactive class on the month control. + // if it does, we want to return and take no action. + if(self.element.find('.' + self.options.targets.nextYearButton).hasClass('inactive')) { + return; + } + + self.month.add('years', 1); + self.render(); + + if(self.options.clickEvents.nextYear) { + self.options.clickEvents.nextYear.apply( self, [moment(self.month)] ); + } + if(self.options.clickEvents.onMonthChange) { + self.options.clickEvents.onMonthChange.apply( self, [moment(self.month)] ); + } + if(self.options.clickEvents.onYearChange) { + self.options.clickEvents.onYearChange.apply( self, [moment(self.month)] ); + } + }; + + Clndr.prototype.previousYearAction = function(event) { + var self = event.data.context; + // before we do anything, check if there is an inactive class on the month control. + // if it does, we want to return and take no action. + if(self.element.find('.' + self.options.targets.previousYear).hasClass('inactive')) { + return; + } + + self.month.subtract('years', 1); + self.render(); + + if(self.options.clickEvents.previousYear) { + self.options.clickEvents.previousYear.apply( self, [moment(self.month)] ); + } + if(self.options.clickEvents.onMonthChange) { + self.options.clickEvents.onMonthChange.apply( self, [moment(self.month)] ); + } + if(self.options.clickEvents.onYearChange) { + self.options.clickEvents.onYearChange.apply( self, [moment(self.month)] ); + } + }; + + Clndr.prototype.forward = function(options) { + this.month.add('months', 1); + this.render(); + if(options && options.withCallbacks) { + if(this.options.clickEvents.onMonthChange) { + this.options.clickEvents.onMonthChange.apply( this, [moment(this.month)] ); + } + + // We entered a new year + if (this.month.month() === 0 && this.options.clickEvents.onYearChange) { + this.options.clickEvents.onYearChange.apply( this, [moment(this.month)] ); + } + } + + return this; + } + + Clndr.prototype.back = function(options) { + this.month.subtract('months', 1); + this.render(); + if(options && options.withCallbacks) { + if(this.options.clickEvents.onMonthChange) { + this.options.clickEvents.onMonthChange.apply( this, [moment(this.month)] ); + } + + // We went all the way back to previous year + if (this.month.month() === 11 && this.options.clickEvents.onYearChange) { + this.options.clickEvents.onYearChange.apply( this, [moment(this.month)] ); + } + } + + return this; + } + + // alternate names for convenience + Clndr.prototype.next = function(options) { + this.forward(options); + return this; + } + + Clndr.prototype.previous = function(options) { + this.back(options); + return this; + } + + Clndr.prototype.setMonth = function(newMonth, options) { + // accepts 0 - 11 or a full/partial month name e.g. "Jan", "February", "Mar" + this.month.month(newMonth); + this.render(); + if(options && options.withCallbacks) { + if(this.options.clickEvents.onMonthChange) { + this.options.clickEvents.onMonthChange.apply( this, [moment(this.month)] ); + } + } + return this; + } + + Clndr.prototype.nextYear = function(options) { + this.month.add('year', 1); + this.render(); + if(options && options.withCallbacks) { + if(this.options.clickEvents.onYearChange) { + this.options.clickEvents.onYearChange.apply( this, [moment(this.month)] ); + } + } + return this; + } + + Clndr.prototype.previousYear = function(options) { + this.month.subtract('year', 1); + this.render(); + if(options && options.withCallbacks) { + if(this.options.clickEvents.onYearChange) { + this.options.clickEvents.onYearChange.apply( this, [moment(this.month)] ); + } + } + return this; + } + + Clndr.prototype.setYear = function(newYear, options) { + this.month.year(newYear); + this.render(); + if(options && options.withCallbacks) { + if(this.options.clickEvents.onYearChange) { + this.options.clickEvents.onYearChange.apply( this, [moment(this.month)] ); + } + } + return this; + } + + Clndr.prototype.setEvents = function(events) { + // go through each event and add a moment object + if(this.options.multiDayEvents) { + this.options.events = this.addMultiDayMomentObjectsToEvents(events); + } else { + this.options.events = this.addMomentObjectToEvents(events); + } + + this.render(); + return this; + }; + + Clndr.prototype.addEvents = function(events) { + // go through each event and add a moment object + if(this.options.multiDayEvents) { + this.options.events = $.merge(this.options.events, this.addMultiDayMomentObjectsToEvents(events)); + } else { + this.options.events = $.merge(this.options.events, this.addMomentObjectToEvents(events)); + } + + this.render(); + return this; + }; + + Clndr.prototype.addMomentObjectToEvents = function(events) { + var self = this; + var i = 0, l = events.length; + for(i; i < l; i++) { + // stuff a _clndrDateObject in each event, which really, REALLY should not be + // overriding any existing object... Man that would be weird. + events[i]._clndrDateObject = moment( events[i][self.options.dateParameter] ); + } + return events; + } + + Clndr.prototype.addMultiDayMomentObjectsToEvents = function(events) { + var self = this; + var i = 0, l = events.length; + for(i; i < l; i++) { + events[i]._clndrStartDateObject = moment( events[i][self.options.multiDayEvents.startDate] ); + events[i]._clndrEndDateObject = moment( events[i][self.options.multiDayEvents.endDate] ); + } + return events; + } + + Clndr.prototype.calendarDay = function(options) { + var defaults = { day: "", classes: this.options.targets.empty, events: [], date: null }; + return $.extend({}, defaults, options); + } + + $.fn.clndr = function(options) { + if( !$.data( this, 'plugin_clndr') ) { + var clndr_instance = new Clndr(this, options); + $.data(this, 'plugin_clndr', clndr_instance); + return clndr_instance; + } + } + +})( jQuery, window, document ); diff --git a/sample/js/easyResponsiveTabs.js b/sample/js/easyResponsiveTabs.js new file mode 100755 index 00000000..7387b7f4 --- /dev/null +++ b/sample/js/easyResponsiveTabs.js @@ -0,0 +1,111 @@ +// Easy Responsive Tabs Plugin +// Author: Samson.Onna +(function ($) { + $.fn.extend({ + easyResponsiveTabs: function (options) { + //Set the default values, use comma to separate the settings, example: + var defaults = { + type: 'default', //default, vertical, accordion; + width: 'auto', + fit: true + } + //Variables + var options = $.extend(defaults, options); + var opt = options, jtype = opt.type, jfit = opt.fit, jwidth = opt.width, vtabs = 'vertical', accord = 'accordion'; + + //Main function + this.each(function () { + var $respTabs = $(this); + $respTabs.find('ul.resp-tabs-list li').addClass('resp-tab-item'); + $respTabs.css({ + 'display': 'block', + 'width': jwidth + }); + + $respTabs.find('.resp-tabs-container > div').addClass('resp-tab-content'); + jtab_options(); + //Properties Function + function jtab_options() { + if (jtype == vtabs) { + $respTabs.addClass('resp-vtabs'); + } + if (jfit == true) { + $respTabs.css({ width: '100%', margin: '0px' }); + } + if (jtype == accord) { + $respTabs.addClass('resp-easy-accordion'); + $respTabs.find('.resp-tabs-list').css('display', 'none'); + } + } + + //Assigning the h2 markup + var $tabItemh2; + $respTabs.find('.resp-tab-content').before(""); + + var itemCount = 0; + $respTabs.find('.resp-accordion').each(function () { + $tabItemh2 = $(this); + var innertext = $respTabs.find('.resp-tab-item:eq(' + itemCount + ')').text(); + $respTabs.find('.resp-accordion:eq(' + itemCount + ')').append(innertext); + $tabItemh2.attr('aria-controls', 'tab_item-' + (itemCount)); + itemCount++; + }); + + //Assigning the 'aria-controls' to Tab items + var count = 0, + $tabContent; + $respTabs.find('.resp-tab-item').each(function () { + $tabItem = $(this); + $tabItem.attr('aria-controls', 'tab_item-' + (count)); + $tabItem.attr('role', 'tab'); + + //First active tab + $respTabs.find('.resp-tab-item').first().addClass('resp-tab-active'); + $respTabs.find('.resp-accordion').first().addClass('resp-tab-active'); + $respTabs.find('.resp-tab-content').first().addClass('resp-tab-content-active').attr('style', 'display:block'); + + //Assigning the 'aria-labelledby' attr to tab-content + var tabcount = 0; + $respTabs.find('.resp-tab-content').each(function () { + $tabContent = $(this); + $tabContent.attr('aria-labelledby', 'tab_item-' + (tabcount)); + tabcount++; + }); + count++; + }); + + //Tab Click action function + $respTabs.find("[role=tab]").each(function () { + var $currentTab = $(this); + $currentTab.click(function () { + + var $tabAria = $currentTab.attr('aria-controls'); + + if ($currentTab.hasClass('resp-accordion') && $currentTab.hasClass('resp-tab-active')) { + $respTabs.find('.resp-tab-content-active').slideUp('', function () { $(this).addClass('resp-accordion-closed'); }); + $currentTab.removeClass('resp-tab-active'); + return false; + } + if (!$currentTab.hasClass('resp-tab-active') && $currentTab.hasClass('resp-accordion')) { + $respTabs.find('.resp-tab-active').removeClass('resp-tab-active'); + $respTabs.find('.resp-tab-content-active').slideUp().removeClass('resp-tab-content-active resp-accordion-closed'); + $respTabs.find("[aria-controls=" + $tabAria + "]").addClass('resp-tab-active'); + + $respTabs.find('.resp-tab-content[aria-labelledby = ' + $tabAria + ']').slideDown().addClass('resp-tab-content-active'); + } else { + $respTabs.find('.resp-tab-active').removeClass('resp-tab-active'); + $respTabs.find('.resp-tab-content-active').removeAttr('style').removeClass('resp-tab-content-active').removeClass('resp-accordion-closed'); + $respTabs.find("[aria-controls=" + $tabAria + "]").addClass('resp-tab-active'); + $respTabs.find('.resp-tab-content[aria-labelledby = ' + $tabAria + ']').addClass('resp-tab-content-active').attr('style', 'display:block'); + } + }); + //Window resize function + $(window).resize(function () { + $respTabs.find('.resp-accordion-closed').removeAttr('style'); + }); + }); + }); + } + }); +})(jQuery); + diff --git a/sample/js/fd-slider.js b/sample/js/fd-slider.js new file mode 100755 index 00000000..22dba758 --- /dev/null +++ b/sample/js/fd-slider.js @@ -0,0 +1,1212 @@ +/* + * Unobtrusive Slider Control / HTML5 Input Range polyfill + * http://www.frequency-decoder.com/ + * + * Copyright 2010, 2011, Brian McAllister + * Dual licensed under the MIT or GPL Version 2 licenses. + * + */ +var fdSlider = (function() { + var sliders = {}, + uniqueid = 0, + mouseWheelEnabled = true, + fullARIA = true, + describedBy = "fd-slider-describedby", + varSetRules = { + onfocus:true, + onvalue:true + }, + noRangeBar = false, + html5Animation = "jump", + isOpera = Object.prototype.toString.call(window.opera) === "[object Opera]", + fpRegExp = /^([-]{0,1}[0-9]+(\.[0-9]+){0,1})$/, + stepRegExp = /^([0-9]+(\.[0-9]+){0,1})$/; + + var parseJSON = function(str) { + // Check we have a String + if(typeof str !== 'string' || str == "") { return {}; }; + try { + // Does a JSON (native or not) Object exist + if(typeof JSON === "object" && JSON.parse) { + return window.JSON.parse(str); + // Genious code taken from: http://kentbrewster.com/badges/ + } else if(/mousewheelenabled|fullaria|describedby|norangebar|html5animation|varsetrules/.test(str.toLowerCase())) { + var f = Function(['var document,top,self,window,parent,Number,Date,Object,Function,', + 'Array,String,Math,RegExp,Image,ActiveXObject;', + 'return (' , str.replace(/<\!--.+-->/gim,'').replace(/\bfunction\b/g,'function-') , ');'].join('')); + return f(); + }; + } catch (e) { }; + + return {"err":"Could not parse the JSON object"}; + }; + + var affectJSON = function(json) { + if(typeof json !== "object") { return; }; + for(key in json) { + value = json[key]; + switch(key.toLowerCase()) { + case "mousewheelenabled": + mouseWheelEnabled = !!value; + break; + case "fullaria": + fullARIA = !!value; + break; + case "describedby": + describedBy = String(value); + break; + case "norangebar": + noRangeBar = !!value; + break; + case "html5animation": + html5Animation = String(value).search(/^(jump|tween|timed)$/i) != -1 ? String(value).toLowerCase() : "jump"; + break; + case "varsetrules": + if("onfocus" in value) { + varSetRules.onfocus = !!value.onfocus; + }; + if("onvalue" in value) { + varSetRules.onvalue = !!value.onvalue; + }; + break; + }; + }; + }; + + // Classic event functions + var addEvent = function(obj, type, fn) { + if( obj.attachEvent ) { + obj["e"+type+fn] = fn; + obj[type+fn] = function(){obj["e"+type+fn]( window.event );}; + obj.attachEvent( "on"+type, obj[type+fn] ); + } else { obj.addEventListener( type, fn, true ); } + }; + var removeEvent = function(obj, type, fn) { + try { + if( obj.detachEvent ) { + obj.detachEvent( "on"+type, obj[type+fn] ); + obj[type+fn] = null; + } else { obj.removeEventListener( type, fn, true ); } + } catch(err) {}; + }; + var stopEvent = function(e) { + e = e || window.event; + if(e.stopPropagation) { + e.stopPropagation(); + e.preventDefault(); + }; + + /*@cc_on@*/ + /*@if(@_win32) + e.cancelBubble = true; + e.returnValue = false; + /*@end@*/ + + return false; + }; + var preventDefault = function(e) { + e = e || window.event; + if(e.preventDefault) { + e.preventDefault(); + return; + }; + e.returnValue = false; + }; + + // Add/Remove classname utility functions + var addClass = function(e,c) { + if(new RegExp("(^|\\s)" + c + "(\\s|$)").test(e.className)) { return; }; + e.className += ( e.className ? " " : "" ) + c; + }; + + var removeClass = function(e,c) { + e.className = !c ? "" : e.className.replace(new RegExp("(^|\\s)" + c + "(\\s|$)"), " ").replace(/^\s\s*/, '').replace(/\s\s*$/, ''); + }; + + // Returns an Object of key value pairs indicating which sliders have values + // that have been "set" by the user + var getValueSet = function() { + var obj = {}; + for(id in sliders) { + obj[id] = sliders[id].getValueSet(); + }; + return obj; + }; + + // Sets the valueSet variable for a specific slider + var setValueSet = function(sliderId, tf) { + if(!(sliderId in sliders)) return; + sliders[sliderId].setValueSet(!!tf); + }; + + // Javascript instantiation of a slider (input type="text" or select list) + var createSlider = function(options) { + if(!options || !options.inp || !options.inp.tagName || options.inp.tagName.search(/^input|select/i) == -1) { return false; }; + + options.html5Shim = false; + + if(options.inp.tagName.toLowerCase() == "select") { + if(options.inp.options.length < 2) { + return false; + }; + options.min = 0; + options.max = options.inp.options.length - 1; + options.step = 1; + options.precision = 0; + options.scale = false; + options.forceValue = true; + } else { + if(String(options.inp.type).search(/^text$/i) == -1) { + return false; + }; + options.min = options.min && String(options.min).search(fpRegExp) != -1 ? +options.min : 0; + options.max = options.max && String(options.max).search(fpRegExp) != -1 ? +options.max : 100; + options.step = options.step && String(options.step).search(stepRegExp) != -1 ? options.step : 1; + options.precision = options.precision && String(options.precision).search(/^[0-9]+$/) != -1 ? options.precision : (String(options.step).search(/\.([0-9]+)$/) != -1 ? String(options.step).match(/\.([0-9]+)$/)[1].length : 0); + options.scale = options.scale || false; + options.forceValue = ("forceValue" in options) ? !!options.forceValue : false; + }; + + options.maxStep = options.maxStep && String(options.maxStep).search(stepRegExp) != -1 ? +options.maxStep : +options.step * 2; + options.classNames = options.classNames || ""; + options.callbacks = options.callbacks || false; + + destroySingleSlider(options.inp.id); + sliders[options.inp.id] = new fdRange(options); + return true; + }; + + var getAttribute = function(elem, att) { + return elem.getAttribute(att) || ""; + }; + + // HTML5 input type="range" shim - called onload or onDomReady + var init = function() { + var inputs = document.getElementsByTagName("input"), + options; + + for(var i = 0, inp; inp = inputs[i]; i++) { + + if(inp.tagName.toLowerCase() == "input" + && + inp.type.toLowerCase() == "text" + && + (getAttribute(inp, "min") && getAttribute(inp, "min").search(fpRegExp) != -1 + || + getAttribute(inp, "max") && getAttribute(inp, "max").search(fpRegExp) != -1 + || + getAttribute(inp, "step") && getAttribute(inp, "step").search(/^(any|([0-9]+(\.[0-9]+){0,1}))$/i) != -1 + )) { + + // Skip elements that have already been created are are resident in the DOM + if(inp.id && document.getElementById("fd-slider-"+inp.id)) { + continue; + // Destroy elements that have already been created but not resident in the DOM + } else if(inp.id && !document.getElementById("fd-slider-"+inp.id)) { + destroySingleSlider(inp.id); + }; + + // Create an id for the form element if necessary + if(!inp.id) { inp.id = "fd-slider-form-elem-" + uniqueid++; }; + + // Basic option Object + options = { + inp: inp, + callbacks: [], + animation: html5Animation, + vertical: getAttribute(inp, "data-fd-slider-vertical") ? true : !!(inp.offsetHeight > inp.offsetWidth), + classNames: getAttribute(inp, "data-fd-slider-vertical"), + html5Shim: true + }; + + if(options.vertical && !getAttribute(inp, "data-fd-slider-vertical")) { + options.inpHeight = inp.offsetHeight; + }; + + options.min = getAttribute(inp, "min") || 0; + options.max = getAttribute(inp, "max") || 100; + options.step = getAttribute(inp, "step").search(/^any$/i) != -1 ? options.max - options.min : getAttribute(inp, "step").search(stepRegExp) != -1 ? inp.getAttribute("step") : 1; + options.precision = String(options.step).search(/\.([0-9]+)$/) != -1 ? String(options.step).match(/\.([0-9]+)$/)[1].length : 0; + options.maxStep = options.step * 2; + + destroySingleSlider(options.inp.id); + sliders[options.inp.id] = new fdRange(options); + }; + }; + + return true; + }; + var destroySingleSlider = function(id) { + if(id in sliders) { + sliders[id].destroy(); + delete sliders[id]; + return true; + }; + return false; + }; + var destroyAllsliders = function(e) { + for(slider in sliders) { sliders[slider].destroy(); }; + sliders = []; + }; + var unload = function(e) { + destroyAllsliders(); + sliders = null; + }; + var resize = function(e) { + for(slider in sliders) { sliders[slider].onResize(); }; + }; + var onDomReady = function() { + removeEvent(window, "load", init); + init(); + }; + var removeOnLoadEvent = function() { + removeEvent(window, "load", init); + }; + + function fdRange(options) { + var inp = options.inp, + disabled = false, + tagName = inp.tagName.toLowerCase(), + min = +options.min, + max = +options.max, + rMin = +options.min, + rMax = +options.max, + range = Math.abs(max - min), + step = tagName == "select" ? 1 : +options.step, + maxStep = options.maxStep ? +options.maxStep : step * 2, + precision = options.precision || 0, + steps = Math.ceil(range / step), + scale = options.scale || false, + hideInput = !!options.hideInput, + animation = options.animation || "", + vertical = !!options.vertical, + callbacks = options.callbacks || {}, + classNames = options.classNames || "", + html5Shim = !!options.html5Shim, + defaultVal = max < min ? min : min + ((max - min) / 2), + forceValue = html5Shim || !!options.forceValue, + inpHeight = html5Shim && vertical && ("inpHeight" in options) ? options.inpHeight : false, + timer = null, + kbEnabled = true, + sliderH = 0, + sliderW = 0, + tweenX = 0, + tweenB = 0, + tweenC = 0, + tweenD = 0, + frame = 0, + x = 0, + y = 0, + rMaxPx = 0, + rMinPx = 0, + handlePos = 0, + destPos = 0, + mousePos = 0, + stepPx = 0, + userSet = false, + touchEvents = false, + outerWrapper, + wrapper, + handle, + rangeBar, + bar; + + // Make sure we have a negative step if the max < min + if(max < min) { + step = -Math.abs(step); + maxStep = -Math.abs(maxStep); + }; + + // Add the 100% scale mark if needs be + if(scale) { + scale[100] = max; + }; + + // Set the "userSet" variable programmatically for this slider + function valueSet(tf) { + tf = !!tf; + if(tf != userSet) { + userSet = tf; + valueToPixels(getWorkingValueFromInput()); + }; + }; + + function disableSlider(noCallback) { + if(disabled && !noCallback) { return; }; + + try { + + removeEvent(handle, "focus", onFocus); + removeEvent(handle, "blur", onBlur); + + if(!isOpera) { + removeEvent(handle, "keydown", onKeyDown); + removeEvent(handle, "keypress", onKeyPress); + } else { + removeEvent(handle, "keypress", onKeyDown); + }; + + removeEvent(outerWrapper, "mouseover", onMouseOver); + removeEvent(outerWrapper, "mouseout", onMouseOut); + removeEvent(outerWrapper, "mousedown", onMouseDown); + removeEvent(outerWrapper, "touchstart", onMouseDown); + + if(mouseWheelEnabled) { + if (window.addEventListener && !window.devicePixelRatio) window.removeEventListener('DOMMouseScroll', trackMouseWheel, false); + else { + removeEvent(document, "mousewheel", trackMouseWheel); + removeEvent(window, "mousewheel", trackMouseWheel); + }; + }; + } catch(err) {}; + + clearTimeout(timer); + removeClass(outerWrapper, "fd-slider-focused"); + removeClass(outerWrapper, "fd-slider-active"); + + addClass(outerWrapper, "fd-slider-disabled"); + outerWrapper.setAttribute("aria-disabled", true); + inp.disabled = disabled = true; + + if(!noCallback) { + callback("disable"); + }; + }; + + function enableSlider(noCallback) { + if(!disabled && !noCallback) return; + + addEvent(handle, "focus", onFocus); + addEvent(handle, "blur", onBlur); + + if(!isOpera) { + addEvent(handle, "keydown", onKeyDown); + addEvent(handle, "keypress", onKeyPress); + } else { + addEvent(handle, "keypress", onKeyDown); + }; + + addEvent(outerWrapper, "touchstart", onMouseDown); + addEvent(outerWrapper, "mousedown", onMouseDown); + addEvent(outerWrapper, "mouseover", onMouseOver); + addEvent(outerWrapper, "mouseout", onMouseOut); + + removeClass(outerWrapper, "fd-slider-disabled"); + outerWrapper.setAttribute("aria-disabled", false); + inp.disabled = disabled = touchEvents = false; + + if(!noCallback) { + callback("enable"); + }; + }; + + // Destroys a slider + function destroySlider() { + // Clear any timeouts + clearTimeout(timer); + + // Remove pointers to DOM nodes + wrapper = bar = handle = outerWrapper = timer = null; + + // Call the "destroy" callback + callback("destroy"); + + // Delete the callback functions + callbacks = null; + }; + + // Calculates the pixel increment etc + function redraw() { + locate(); + // Internet Explorer requires the try catch + try { + var sW = outerWrapper.offsetWidth, + sH = outerWrapper.offsetHeight, + hW = handle.offsetWidth, + hH = handle.offsetHeight, + bH = bar.offsetHeight, + bW = bar.offsetWidth, + mPx = vertical ? sH - hH : sW - hW; + + stepPx = mPx / steps; + rMinPx = Math.max(scale ? percentToPixels(valueToPercent(rMin)) : Math.abs((rMin - min) / step) * stepPx, 0); + rMaxPx = Math.min(scale ? percentToPixels(valueToPercent(rMax)) : Math.abs((rMax - min) / step) * stepPx, Math.floor(vertical ? sH - hH : sW - hW)); + + sliderW = sW; + sliderH = sH; + + // Use the input value + valueToPixels(html5Shim || forceValue ? getWorkingValueFromInput() : (tagName == "select" ? inp.selectedIndex : parseFloat(inp.value))); + + } catch(err) {}; + callback("redraw"); + }; + + // Calls a callback function + function callback(type) { + if(!html5Shim) { + if(callbacks.hasOwnProperty(type)) { + var cbObj = {"disabled":disabled, "elem":inp, "value":tagName == "select" ? inp.options[inp.selectedIndex].value : inp.value}; + + // Call all functions in sequence + for(var i = 0, func; func = callbacks[type][i]; i++) { + func.call(inp, cbObj); + }; + }; + } else if(type.match(/^(blur|focus|change)$/i)) { + if(typeof(document.createEventObject) != 'undefined') { + try { + var e = document.createEventObject(); + inp.fireEvent('on' + type.toLowerCase(), e); + } catch(err){ }; + } else if(typeof(document.createEvent) != 'undefined') { + var e = document.createEvent('HTMLEvents'); + e.initEvent(type, true, true); + inp.dispatchEvent(e); + }; + }; + }; + + // FOCUS & BLUR events + function onFocus(e) { + addClass(outerWrapper, 'fd-slider-focused'); + + // Is the value said to have been set by the user onfocus + if(varSetRules.onfocus) { + userSet = true; + valueToPixels(getWorkingValueFromInput()); + }; + + // If mousewheel events required then add them + if(mouseWheelEnabled) { + addEvent(window, 'DOMMouseScroll', trackMouseWheel); + addEvent(document, 'mousewheel', trackMouseWheel); + if(!isOpera) addEvent(window, 'mousewheel', trackMouseWheel); + }; + + // Callback... + callback("focus"); + return true; + }; + + function onBlur(e) { + removeClass(outerWrapper, 'fd-slider-focused'); + + // Remove mousewheel events if necessary + if(mouseWheelEnabled) { + removeEvent(document, 'mousewheel', trackMouseWheel); + removeEvent(window, 'DOMMouseScroll', trackMouseWheel); + if(!isOpera) removeEvent(window, 'mousewheel', trackMouseWheel); + }; + + kbEnabled = true; + + // Callback... + callback("blur"); + }; + + // MOUSEWHEEL events + function trackMouseWheel(e) { + if(!kbEnabled) return; + e = e || window.event; + var delta = 0; + + if (e.wheelDelta) { + delta = e.wheelDelta/120; + // Older versions of Opera require a small hack to inverse the delta + if (isOpera && window.opera.version() < 9.2) delta = -delta; + } else if(e.detail) { + delta = -e.detail/3; + }; + + if(vertical) { delta = -delta; }; + + if(delta) { + var value = getWorkingValueFromInput(); + + value += (delta < 0) ? -step : step; + + userSet = true; + valueToPixels(getValidValue(value)); + }; + + return stopEvent(e); + }; + + // KEYBOARD events + function onKeyPress(e) { + e = e || window.event; + // Let all non-hijacked keyboard events pass + if((e.keyCode >= 33 && e.keyCode <= 40) || !kbEnabled || e.keyCode == 45 || e.keyCode == 46) { + return stopEvent(e); + }; + return true; + }; + + function onKeyDown(e) { + if(!kbEnabled) return true; + + e = e || window.event; + var kc = e.keyCode != null ? e.keyCode : e.charCode; + + if ( kc < 33 || (kc > 40 && (kc != 45 && kc != 46))) return true; + + var value = getWorkingValueFromInput(); + + if( kc == 37 || kc == 40 || kc == 46 || kc == 34) { + // left, down, ins, page down + value -= (e.ctrlKey || kc == 34 ? +maxStep : +step); + } else if( kc == 39 || kc == 38 || kc == 45 || kc == 33) { + // right, up, del, page up + value += (e.ctrlKey || kc == 33 ? +maxStep : +step); + } else if( kc == 35 ) { + // max + value = rMax; + } else if( kc == 36 ) { + // min + value = rMin; + }; + + userSet = true; + valueToPixels(getValidValue(value)); + + callback("update"); + + // Opera doesn't let us cancel key events so the up/down arrows and home/end buttons will scroll the screen - which sucks + preventDefault(e); + }; + + // MOUSE & TOUCH events + + // Mouseover the slider + function onMouseOver(e) { + addClass(outerWrapper, 'fd-slider-hover'); + }; + + // Mouseout of the slider + function onMouseOut(e) { + // Should really check we are not still in the slider + removeClass(outerWrapper, 'fd-slider-hover'); + }; + + // Mousedown on the slider + function onMouseDown(e) { + e = e || window.event; + + // Stop page scrolling + preventDefault(e); + + // Grab the event target + var targ; + if (e.target) targ = e.target; + else if (e.srcElement) targ = e.srcElement; + if(targ.nodeType == 3) targ = targ.parentNode; + + // Are we using touchEvents + if(e.touches) { + // Skip gestures + if(e.targetTouches && e.targetTouches.length != 1) { + return false; + }; + + e = e.touches[0]; + touchEvents = true; + }; + + // Stop any animation timers + clearTimeout(timer); + timer = null; + + // Not keyboard enabled + kbEnabled = false; + + // User has set a value + userSet = true; + + // Handle mousedown - initiate drag + if(targ.className.search("fd-slider-handle") != -1) { + mousePos = vertical ? e.clientY : e.clientX; + handlePos = parseInt(vertical ? handle.offsetTop : handle.offsetLeft)||0; + + // Set a value on first click even if no movement + trackMouse(e); + + if(!touchEvents) { + addEvent(document, 'mousemove', trackMouse); + addEvent(document, 'mouseup', stopDrag); + } else { + addEvent(document, 'touchmove', trackMouse); + addEvent(document, 'touchend', stopDrag); + // Remove mouseEvents to stop them firing after the touch event + removeEvent(outerWrapper, "mousedown", onMouseDown); + }; + + addClass(outerWrapper, 'fd-slider-active'); + addClass(document.body, "fd-slider-drag-" + (vertical ? "vertical" : "horizontal")); + + // Wrapper mousedown - initiate animation to click point + } else { + locate(); + + var posx = 0, + sLft = 0, + sTop = 0; + + // Internet Explorer doctype woes + if (document.documentElement && document.documentElement.scrollTop) { + sTop = document.documentElement.scrollTop; + sLft = document.documentElement.scrollLeft; + } else if (document.body) { + sTop = document.body.scrollTop; + sLft = document.body.scrollLeft; + }; + + if (e.pageX) posx = vertical ? e.pageY : e.pageX; + else if (e.clientX) posx = vertical ? e.clientY + sTop : e.clientX + sLft; + + posx -= vertical ? y + Math.round(handle.offsetHeight / 2) : x + Math.round(handle.offsetWidth / 2); + posx = snapToPxValue(posx); + + // Tween animation to click point + if(animation == "tween") { + addClass(outerWrapper, 'fd-slider-active'); + tweenTo(posx); + // Progressive increment to click point + } else if(animation == "timed") { + addClass(outerWrapper, 'fd-slider-active'); + addEvent(document, touchEvents ? 'touchend' : 'mouseup', onDocMouseUp); + destPos = posx; + onTimer(); + // Immediate jump to click point + } else { + pixelsToValue(posx); + //addEvent(document, touchEvents ? 'touchend' : 'mouseup', onMouseUp); + }; + }; + + return stopEvent(e); + }; + + // Progressive increment to click point - clear the animation timer and remove the mouseup/touchend event + function onDocMouseUp( e ) { + e = e || window.event; + + preventDefault(e); + removeEvent(document, touchEvents ? 'touchend' : 'mouseup', onDocMouseUp); + removeClass(outerWrapper, "fd-slider-active"); + + clearTimeout(timer); + timer = null; + kbEnabled = true; + + return stopEvent(e); + }; + + // Mouseup or touchend event on the document to stop drag + function stopDrag(e) { + e = e || window.event; + + preventDefault(e); + + if(touchEvents) { + removeEvent(document, 'touchmove', trackMouse); + removeEvent(document, 'touchend', stopDrag); + } else { + removeEvent(document, 'mousemove', trackMouse); + removeEvent(document, 'mouseup', stopDrag); + }; + + kbEnabled = true; + removeClass(document.body, "fd-slider-drag-" + (vertical ? "vertical" : "horizontal")); + removeClass(outerWrapper, "fd-slider-active"); + + return stopEvent(e); + }; + + // Mousemove or touchmove event on the drag handle + function trackMouse(e) { + e = e || window.event; + + preventDefault(e); + + if(e.touches) { + // Skip gestures + if(e.targetTouches && e.targetTouches.length != 1) { + return false; + }; + e = e.touches[0]; + }; + + pixelsToValue(snapToPxValue(handlePos + (vertical ? e.clientY - mousePos : e.clientX - mousePos))); + + return false; + }; + + // Increments the slider by "inc" steps + function increment(inc) { + var value = getWorkingValueFromInput(); + userSet = true; + value += inc * step; + valueToPixels(getValidValue(value)); + }; + + // Attempts to locate the on-screen position of the slider + function locate(){ + var curleft = 0, + curtop = 0, + obj = outerWrapper; + + // Try catch for IE's benefit + try { + while (obj.offsetParent) { + curleft += obj.offsetLeft; + curtop += obj.offsetTop; + obj = obj.offsetParent; + }; + } catch(err) {}; + x = curleft; + y = curtop; + }; + + // Used during the progressive animation to click point + function onTimer() { + var xtmp = parseInt(vertical ? handle.offsetTop : handle.offsetLeft, 10); + xtmp = Math.round((destPos < xtmp) ? Math.max(destPos, Math.floor(xtmp - stepPx)) : Math.min(destPos, Math.ceil(xtmp + stepPx))); + + pixelsToValue(snapToPxValue(xtmp)); + if(xtmp != destPos) timer = setTimeout(onTimer, steps > 20 ? 50 : 100); + else { + kbEnabled = true; + removeClass(outerWrapper, "fd-slider-active"); + + callback("finalise"); + }; + }; + + var tween = function(){ + frame++; + var c = tweenC, + d = 20, + t = frame, + b = tweenB, + x = Math.ceil((t==d) ? b+c : c * (-Math.pow(2, -10 * t/d) + 1) + b); + + pixelsToValue(t == d ? tweenX : x); + + if(t!=d) { + // Call the "move" callback on each animation increment + callback("move"); + timer = setTimeout(tween, 20); + } else { + clearTimeout(timer); + timer = null; + kbEnabled = true; + + removeClass(outerWrapper, "fd-slider-focused"); + removeClass(outerWrapper, "fd-slider-active"); + + // Call the "finalise" callback whenever the animation is complete + callback("finalise"); + }; + }; + + function tweenTo(tx){ + kbEnabled = false; + tweenX = parseInt(tx, 10); + tweenB = parseInt(vertical ? handle.offsetTop : handle.offsetLeft, 10); + tweenC = tweenX - tweenB; + tweenD = 20; + frame = 0; + + if(!timer) { timer = setTimeout(tween, 20); }; + }; + + // Returns a value within the range + function checkValue(value) { + if(isNaN(value) || value === "" || typeof value == "undefined") { + userSet = false; + return defaultVal; + } else if(value < Math.min(rMin,rMax)) { + userSet = false; + return Math.min(rMin,rMax); + } else if(value > Math.max(rMin,rMax)) { + userSet = false; + return Math.max(rMin,rMax); + }; + userSet = true; + return value; + }; + + // Returns a value within a range - uses the form element value as base + function getWorkingValueFromInput() { + return getValidValue(tagName == "input" ? parseFloat(inp.value) : inp.selectedIndex); + }; + + // Returns a value within the range + function getValidValue(value) { + return (isNaN(value) || value === "" || typeof value == "undefined") ? defaultVal : Math.min(Math.max(value, Math.min(rMin,rMax)), Math.max(rMin,rMax)); + }; + + // Calculates value according to pixel position of slider handle + function pixelsToValue(px) { + var val = getValidValue(scale ? percentToValue(pixelsToPercent(px)) : vertical ? max - (Math.round(px / stepPx) * step) : min + (Math.round(px / stepPx) * step)); + + handle.style[vertical ? "top" : "left"] = (px || 0) + "px"; + redrawRange(); + setInputValue((tagName == "select" || step == 1) ? Math.round(val) : val); + }; + + // Calculates pixel position according to form element value + function valueToPixels(val) { + var clearVal = false, + value; + + // Allow empty values for non-polyfill sliders + if((typeof val == "undefined" || isNaN(val) || val === "") && tagName == "input" && !(html5Shim || forceValue)) { + value = defaultVal; + clearVal = true; + userSet = false; + } else { + value = checkValue(val); + }; + + handle.style[vertical ? "top" : "left"] = (scale ? percentToPixels(valueToPercent(value)) : vertical ? Math.round(((max - value) / step) * stepPx) : Math.round(((value - min) / step) * stepPx)) + "px"; + redrawRange(); + setInputValue(clearVal ? "" : value); + }; + + // Rounds a pixel value to the nearest "snap" point on the slider scale + function snapToPxValue(px) { + if(scale) { + return Math.max(Math.min(rMaxPx, px), rMinPx); + } else { + var rem = px % stepPx; + if(rem && rem >= (stepPx / 2)) { px += (stepPx - rem); } + else { px -= rem; }; + + if(px < Math.min(Math.abs(rMinPx), Math.abs(rMaxPx))) px = Math.min(Math.abs(rMinPx), Math.abs(rMaxPx)); + else if(px > Math.max(Math.abs(rMinPx), Math.abs(rMaxPx))) px = Math.max(Math.abs(rMinPx), Math.abs(rMaxPx)); + + return Math.min(Math.max(px, 0), rMaxPx); + }; + }; + + // Calculates a value according to percentage of distance handle has travelled + function percentToValue(pct) { + var st = 0, + fr = min, + value; + + for(var s in scale) { + if(!scale.hasOwnProperty(s)) { + continue; + }; + + if(pct >= st && pct <= +s ) { + value = fr + ((pct - st) * (+scale[s] - fr) ) / (+s - st); + }; + + st = +s; + fr = +scale[s]; + }; + + return value; + }; + + // Calculates the percentage handle position according to form element value + function valueToPercent(value) { + var st = 0, + fr = min, + pct = 0; + + for(var s in scale) { + if(!scale.hasOwnProperty(s)) { + continue; + }; + + if(value >= fr && value <= +scale[s]){ + pct = st + (value - fr) * (+s - st) / (+scale[s] - fr); + }; + + st = +s; + fr = +scale[s]; + }; + + return pct; + }; + + function percentToPixels(percent) { + return ((outerWrapper[vertical ? "offsetHeight" : "offsetWidth"] - handle[vertical ? "offsetHeight" : "offsetWidth"]) / 100) * percent; + }; + + function pixelsToPercent(pixels) { + return pixels / ((outerWrapper[vertical ? "offsetHeight" : "offsetWidth"] - outerWrapper[handle ? "offsetHeight" : "offsetWidth"]) / 100); + }; + + // Sets the form element with a valid value + function setInputValue(val) { + callback("update"); + + // If the user has not set this value or has entered an incorrect value then set a class + // to enable styling of the slider + if(!userSet) { + addClass(outerWrapper, "fd-slider-no-value"); + } else { + removeClass(outerWrapper, "fd-slider-no-value"); + }; + + if(tagName == "select") { + try { + val = parseInt(val, 10); + if(inp.selectedIndex === val) return; + inp.options[val].selected = true; + } catch (err) {}; + } else { + if(val != "") { + val = (min + (Math.round((val - min) / step) * step)).toFixed(precision); + }; + if(inp.value === val) { + return; + }; + inp.value = val; + }; + + updateAriaValues(); + callback("change"); + }; + + function checkInputValue(value) { + return !(isNaN(value) || value === "" || value < Math.min(rMin,rMax) || value > Math.max(rMin,rMax)); + }; + + function setSliderRange(newMin, newMax) { + if(rMin > rMax) { + newMin = Math.min(min, Math.max(newMin, newMax)); + newMax = Math.max(max, Math.min(newMin, newMax)); + rMin = Math.max(newMin, newMax); + rMax = Math.min(newMin, newMax); + } else { + newMin = Math.max(min, Math.min(newMin, newMax)); + newMax = Math.min(max, Math.max(newMin, newMax)); + rMin = Math.min(newMin, newMax); + rMax = Math.max(newMin, newMax); + }; + + if(defaultVal < Math.min(rMin, rMax)) defaultVal = Math.min(rMin, rMax); + else if(defaultVal > Math.max(rMin, rMax)) defaultVal = Math.max(rMin, rMax); + + handle.setAttribute("aria-valuemin", rMin); + handle.setAttribute("aria-valuemax", rMax); + + checkValue(tagName == "input" ? parseFloat(inp.value) : inp.selectedIndex); + redraw(); + }; + + function redrawRange() { + if(noRangeBar) { + return; + }; + if(vertical) { + rangeBar.style["height"] = (bar.offsetHeight - handle.offsetTop) + "px"; + } else { + rangeBar.style["width"] = handle.offsetLeft + "px"; + }; + }; + + function findLabel() { + var label = false, + labelList = document.getElementsByTagName('label'); + // loop through label array attempting to match each 'for' attribute to the id of the current element + for(var i = 0, lbl; lbl = labelList[i]; i++) { + // Internet Explorer requires the htmlFor test + if((lbl['htmlFor'] && lbl['htmlFor'] == inp.id) || (lbl.getAttribute('for') == inp.id)) { + label = lbl; + break; + }; + }; + + if(label && !label.id) { label.id = inp.id + "_label"; }; + return label; + }; + + function updateAriaValues() { + handle.setAttribute("aria-valuenow", tagName == "select" ? inp.options[inp.selectedIndex].value : inp.value); + handle.setAttribute("aria-valuetext", tagName == "select" ? (inp.options[inp.selectedIndex].text ? inp.options[inp.selectedIndex].text : inp.options[inp.selectedIndex].value) : inp.value); + }; + + function onInputChange(e) { + userSet = true; + valueToPixels(tagName == "input" ? parseFloat(inp.value) : inp.selectedIndex); + updateAriaValues(); + }; + + function valueSet(tf) { + userSet = !!tf; + }; + + (function() { + + if(html5Shim || hideInput) { + addClass(inp, "fd-form-element-hidden"); + } else { + addEvent(inp, 'change', onInputChange); + }; + + // Add stepUp & stepDown methods to input element if using the html5Shim + if(html5Shim) { + inp.stepUp = function(n) { increment(n||1); }; + inp.stepDown = function(n) { increment(n||-1); }; + }; + + outerWrapper = document.createElement('span'); + outerWrapper.className = "fd-slider" + (vertical ? "-vertical " : " ") + (!html5Shim ? " fd-slider-no-value " : "") + classNames; + outerWrapper.id = "fd-slider-" + inp.id; + + if(vertical && inpHeight) { + outerWrapper.style.height = inpHeight + "px"; + }; + + wrapper = document.createElement('span'); + wrapper.className = "fd-slider-inner"; + + bar = document.createElement('span'); + bar.className = "fd-slider-bar"; + + if(!noRangeBar) { + rangeBar = document.createElement('span'); + rangeBar.className = "fd-slider-range"; + }; + + if(fullARIA) { + handle = document.createElement('span'); + handle.tabIndex = 0; + } else { + handle = document.createElement('a'); + handle.setAttribute("href", "#"); + }; + + handle.className = "fd-slider-handle"; + handle.appendChild(document.createTextNode(String.fromCharCode(160))); + + outerWrapper.appendChild(wrapper); + if(!noRangeBar) { + outerWrapper.appendChild(rangeBar); + }; + outerWrapper.appendChild(bar); + outerWrapper.appendChild(handle); + + inp.parentNode.insertBefore(outerWrapper, inp); + + /*@cc_on@*/ + /*@if(@_win32) + handle.unselectable = "on"; + if(!noRangeBar) rangeBar.unselectable = "on"; + bar.unselectable = "on"; + wrapper.unselectable = "on"; + outerWrapper.unselectable = "on"; + /*@end@*/ + + // Add ARIA accessibility info programmatically + outerWrapper.setAttribute("role", "application"); + + handle.setAttribute("role", "slider"); + handle.setAttribute("aria-valuemin", tagName == "select" ? inp.options[0].value : min); + handle.setAttribute("aria-valuemax", tagName == "select" ? inp.options[inp.options.length - 1].value : max); + + var lbl = findLabel(); + if(lbl) { + handle.setAttribute("aria-labelledby", lbl.id); + handle.id = "fd-slider-handle-" + inp.id; + /*@cc_on + /*@if(@_win32) + lbl.setAttribute("htmlFor", handle.id); + @else @*/ + lbl.setAttribute("for", handle.id); + /*@end + @*/ + }; + + // Are there page instructions + if(document.getElementById(describedBy)) { + handle.setAttribute("aria-describedby", describedBy); + }; + + // Is the form element initially disabled + if(inp.getAttribute("disabled") == true) { + disableSlider(true); + } else { + enableSlider(true); + }; + + // Does an initial form element value mean the user has set a valid value? + // Note: This only works onload on IE + if(varSetRules.onvalue) { + userSet = true; + checkValue(tagName == "input" ? parseFloat(inp.value) : inp.selectedIndex); + }; + + updateAriaValues(); + callback("create"); + redraw(); + })(); + + return { + onResize: function(e) { if(outerWrapper.offsetHeight != sliderH || outerWrapper.offsetWidth != sliderW) { redraw(); }; }, + destroy: function() { destroySlider(); }, + reset: function() { valueToPixels(tagName == "input" ? parseFloat(inp.value) : inp.selectedIndex); }, + stepUp: function(n) { increment(Math.abs(n)||1); }, + stepDown: function(n) { increment(-Math.abs(n)||-1); }, + increment: function(n) { increment(n); }, + disable: function() { disableSlider(); }, + enable: function() { enableSlider(); }, + setRange: function(mi, mx) { setSliderRange(mi, mx); }, + getValueSet: function() { return !!userSet; }, + setValueSet: function(tf) { valueSet(tf); }, + ieCheckValue: function() { if(varSetRules.onvalue) { userSet = true; checkValue(tagName == "input" ? parseFloat(inp.value) : inp.selectedIndex); updateAriaValues(); redraw(); }; } + }; + }; + + addEvent(window, "load", init); + addEvent(window, "resize", resize); + addEvent(window, "unload", unload); + + // Have we been passed JSON within the including script tag + (function() { + var scriptFiles = document.getElementsByTagName('script'), + scriptInner = String(scriptFiles[scriptFiles.length - 1].innerHTML).replace(/[\n\r\s\t]+/g, " ").replace(/^\s+/, "").replace(/\s+$/, ""), + json = parseJSON(scriptInner); + + if(typeof json === "object" && !("err" in json)) { + affectJSON(json); + }; + })(); + + // Add oldie class if needed for IE < 9 + /*@cc_on + @if (@_jscript_version < 9) + addClass(document.documentElement, "oldie"); + @end + @*/ + + return { + createSlider: function(opts) { createSlider(opts); }, + destroyAll: function() { destroyAllsliders(); }, + destroySlider: function(id) { return destroySingleSlider(id); }, + redrawAll: function() { resize(); }, + increment: function(id, numSteps) { if(!(id in sliders)) { return false; }; sliders[id].increment(numSteps); }, + stepUp: function(id, n) { if(!(id in sliders)) { return false; }; sliders[id].stepUp(Math.abs(n)||1); }, + stepDown: function(id, n) { if(!(id in sliders)) { return false; }; sliders[id].stepDown(-Math.abs(n)||-1); }, + setRange: function(id, newMin, newMax) { if(!(id in sliders)) { return false; }; sliders[id].setRange(newMin, newMax); }, + addEvent: addEvent, + removeEvent: removeEvent, + stopEvent: stopEvent, + updateSlider: function(id) { if(!(id in sliders)) { return false; }; sliders[id].reset(); }, + onDomReady: function() { onDomReady(); }, + disable: function(id) { if(!(id in sliders)) { return false; }; sliders[id].disable(); }, + enable: function(id) { if(!(id in sliders)) { return false; }; sliders[id].enable(); }, + getValueSet: function() { return getValueSet(); }, + setValueSet: function(a, tf) { setValueSet(a, tf); }, + setGlobalVariables: function(json) { affectJSON(json); }, + removeOnload: function() { removeOnLoadEvent(); } + }; +})(); \ No newline at end of file diff --git a/sample/js/jquery-1.11.1.min.js b/sample/js/jquery-1.11.1.min.js new file mode 100755 index 00000000..ab28a247 --- /dev/null +++ b/sample/js/jquery-1.11.1.min.js @@ -0,0 +1,4 @@ +/*! jQuery v1.11.1 | (c) 2005, 2014 jQuery Foundation, Inc. | jquery.org/license */ +!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=c.slice,e=c.concat,f=c.push,g=c.indexOf,h={},i=h.toString,j=h.hasOwnProperty,k={},l="1.11.1",m=function(a,b){return new m.fn.init(a,b)},n=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,o=/^-ms-/,p=/-([\da-z])/gi,q=function(a,b){return b.toUpperCase()};m.fn=m.prototype={jquery:l,constructor:m,selector:"",length:0,toArray:function(){return d.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:d.call(this)},pushStack:function(a){var b=m.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a,b){return m.each(this,a,b)},map:function(a){return this.pushStack(m.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(d.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor(null)},push:f,sort:c.sort,splice:c.splice},m.extend=m.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||m.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(e=arguments[h]))for(d in e)a=g[d],c=e[d],g!==c&&(j&&c&&(m.isPlainObject(c)||(b=m.isArray(c)))?(b?(b=!1,f=a&&m.isArray(a)?a:[]):f=a&&m.isPlainObject(a)?a:{},g[d]=m.extend(j,f,c)):void 0!==c&&(g[d]=c));return g},m.extend({expando:"jQuery"+(l+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===m.type(a)},isArray:Array.isArray||function(a){return"array"===m.type(a)},isWindow:function(a){return null!=a&&a==a.window},isNumeric:function(a){return!m.isArray(a)&&a-parseFloat(a)>=0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},isPlainObject:function(a){var b;if(!a||"object"!==m.type(a)||a.nodeType||m.isWindow(a))return!1;try{if(a.constructor&&!j.call(a,"constructor")&&!j.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}if(k.ownLast)for(b in a)return j.call(a,b);for(b in a);return void 0===b||j.call(a,b)},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?h[i.call(a)]||"object":typeof a},globalEval:function(b){b&&m.trim(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(o,"ms-").replace(p,q)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b,c){var d,e=0,f=a.length,g=r(a);if(c){if(g){for(;f>e;e++)if(d=b.apply(a[e],c),d===!1)break}else for(e in a)if(d=b.apply(a[e],c),d===!1)break}else if(g){for(;f>e;e++)if(d=b.call(a[e],e,a[e]),d===!1)break}else for(e in a)if(d=b.call(a[e],e,a[e]),d===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(n,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(r(Object(a))?m.merge(c,"string"==typeof a?[a]:a):f.call(c,a)),c},inArray:function(a,b,c){var d;if(b){if(g)return g.call(b,a,c);for(d=b.length,c=c?0>c?Math.max(0,d+c):c:0;d>c;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,b){var c=+b.length,d=0,e=a.length;while(c>d)a[e++]=b[d++];if(c!==c)while(void 0!==b[d])a[e++]=b[d++];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,f=0,g=a.length,h=r(a),i=[];if(h)for(;g>f;f++)d=b(a[f],f,c),null!=d&&i.push(d);else for(f in a)d=b(a[f],f,c),null!=d&&i.push(d);return e.apply([],i)},guid:1,proxy:function(a,b){var c,e,f;return"string"==typeof b&&(f=a[b],b=a,a=f),m.isFunction(a)?(c=d.call(arguments,2),e=function(){return a.apply(b||this,c.concat(d.call(arguments)))},e.guid=a.guid=a.guid||m.guid++,e):void 0},now:function(){return+new Date},support:k}),m.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(a,b){h["[object "+b+"]"]=b.toLowerCase()});function r(a){var b=a.length,c=m.type(a);return"function"===c||m.isWindow(a)?!1:1===a.nodeType&&b?!0:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var s=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+-new Date,v=a.document,w=0,x=0,y=gb(),z=gb(),A=gb(),B=function(a,b){return a===b&&(l=!0),0},C="undefined",D=1<<31,E={}.hasOwnProperty,F=[],G=F.pop,H=F.push,I=F.push,J=F.slice,K=F.indexOf||function(a){for(var b=0,c=this.length;c>b;b++)if(this[b]===a)return b;return-1},L="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",M="[\\x20\\t\\r\\n\\f]",N="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",O=N.replace("w","w#"),P="\\["+M+"*("+N+")(?:"+M+"*([*^$|!~]?=)"+M+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+O+"))|)"+M+"*\\]",Q=":("+N+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+P+")*)|.*)\\)|)",R=new RegExp("^"+M+"+|((?:^|[^\\\\])(?:\\\\.)*)"+M+"+$","g"),S=new RegExp("^"+M+"*,"+M+"*"),T=new RegExp("^"+M+"*([>+~]|"+M+")"+M+"*"),U=new RegExp("="+M+"*([^\\]'\"]*?)"+M+"*\\]","g"),V=new RegExp(Q),W=new RegExp("^"+O+"$"),X={ID:new RegExp("^#("+N+")"),CLASS:new RegExp("^\\.("+N+")"),TAG:new RegExp("^("+N.replace("w","w*")+")"),ATTR:new RegExp("^"+P),PSEUDO:new RegExp("^"+Q),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+L+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/^(?:input|select|textarea|button)$/i,Z=/^h\d$/i,$=/^[^{]+\{\s*\[native \w/,_=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ab=/[+~]/,bb=/'|\\/g,cb=new RegExp("\\\\([\\da-f]{1,6}"+M+"?|("+M+")|.)","ig"),db=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)};try{I.apply(F=J.call(v.childNodes),v.childNodes),F[v.childNodes.length].nodeType}catch(eb){I={apply:F.length?function(a,b){H.apply(a,J.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function fb(a,b,d,e){var f,h,j,k,l,o,r,s,w,x;if((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,d=d||[],!a||"string"!=typeof a)return d;if(1!==(k=b.nodeType)&&9!==k)return[];if(p&&!e){if(f=_.exec(a))if(j=f[1]){if(9===k){if(h=b.getElementById(j),!h||!h.parentNode)return d;if(h.id===j)return d.push(h),d}else if(b.ownerDocument&&(h=b.ownerDocument.getElementById(j))&&t(b,h)&&h.id===j)return d.push(h),d}else{if(f[2])return I.apply(d,b.getElementsByTagName(a)),d;if((j=f[3])&&c.getElementsByClassName&&b.getElementsByClassName)return I.apply(d,b.getElementsByClassName(j)),d}if(c.qsa&&(!q||!q.test(a))){if(s=r=u,w=b,x=9===k&&a,1===k&&"object"!==b.nodeName.toLowerCase()){o=g(a),(r=b.getAttribute("id"))?s=r.replace(bb,"\\$&"):b.setAttribute("id",s),s="[id='"+s+"'] ",l=o.length;while(l--)o[l]=s+qb(o[l]);w=ab.test(a)&&ob(b.parentNode)||b,x=o.join(",")}if(x)try{return I.apply(d,w.querySelectorAll(x)),d}catch(y){}finally{r||b.removeAttribute("id")}}}return i(a.replace(R,"$1"),b,d,e)}function gb(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function hb(a){return a[u]=!0,a}function ib(a){var b=n.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function jb(a,b){var c=a.split("|"),e=a.length;while(e--)d.attrHandle[c[e]]=b}function kb(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||D)-(~a.sourceIndex||D);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function lb(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function mb(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function nb(a){return hb(function(b){return b=+b,hb(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function ob(a){return a&&typeof a.getElementsByTagName!==C&&a}c=fb.support={},f=fb.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=fb.setDocument=function(a){var b,e=a?a.ownerDocument||a:v,g=e.defaultView;return e!==n&&9===e.nodeType&&e.documentElement?(n=e,o=e.documentElement,p=!f(e),g&&g!==g.top&&(g.addEventListener?g.addEventListener("unload",function(){m()},!1):g.attachEvent&&g.attachEvent("onunload",function(){m()})),c.attributes=ib(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ib(function(a){return a.appendChild(e.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=$.test(e.getElementsByClassName)&&ib(function(a){return a.innerHTML="
",a.firstChild.className="i",2===a.getElementsByClassName("i").length}),c.getById=ib(function(a){return o.appendChild(a).id=u,!e.getElementsByName||!e.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if(typeof b.getElementById!==C&&p){var c=b.getElementById(a);return c&&c.parentNode?[c]:[]}},d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){var c=typeof a.getAttributeNode!==C&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return typeof b.getElementsByTagName!==C?b.getElementsByTagName(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return typeof b.getElementsByClassName!==C&&p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=$.test(e.querySelectorAll))&&(ib(function(a){a.innerHTML="",a.querySelectorAll("[msallowclip^='']").length&&q.push("[*^$]="+M+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+M+"*(?:value|"+L+")"),a.querySelectorAll(":checked").length||q.push(":checked")}),ib(function(a){var b=e.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+M+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=$.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ib(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",Q)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=$.test(o.compareDocumentPosition),t=b||$.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===e||a.ownerDocument===v&&t(v,a)?-1:b===e||b.ownerDocument===v&&t(v,b)?1:k?K.call(k,a)-K.call(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,f=a.parentNode,g=b.parentNode,h=[a],i=[b];if(!f||!g)return a===e?-1:b===e?1:f?-1:g?1:k?K.call(k,a)-K.call(k,b):0;if(f===g)return kb(a,b);c=a;while(c=c.parentNode)h.unshift(c);c=b;while(c=c.parentNode)i.unshift(c);while(h[d]===i[d])d++;return d?kb(h[d],i[d]):h[d]===v?-1:i[d]===v?1:0},e):n},fb.matches=function(a,b){return fb(a,null,null,b)},fb.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(U,"='$1']"),!(!c.matchesSelector||!p||r&&r.test(b)||q&&q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return fb(b,n,null,[a]).length>0},fb.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},fb.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&E.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},fb.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},fb.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=fb.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=fb.selectors={cacheLength:50,createPseudo:hb,match:X,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(cb,db),a[3]=(a[3]||a[4]||a[5]||"").replace(cb,db),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||fb.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&fb.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return X.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&V.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(cb,db).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+M+")"+a+"("+M+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||typeof a.getAttribute!==C&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=fb.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h;if(q){if(f){while(p){l=b;while(l=l[p])if(h?l.nodeName.toLowerCase()===r:1===l.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){k=q[u]||(q[u]={}),j=k[a]||[],n=j[0]===w&&j[1],m=j[0]===w&&j[2],l=n&&q.childNodes[n];while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if(1===l.nodeType&&++m&&l===b){k[a]=[w,n,m];break}}else if(s&&(j=(b[u]||(b[u]={}))[a])&&j[0]===w)m=j[1];else while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if((h?l.nodeName.toLowerCase()===r:1===l.nodeType)&&++m&&(s&&((l[u]||(l[u]={}))[a]=[w,m]),l===b))break;return m-=e,m===d||m%d===0&&m/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||fb.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?hb(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=K.call(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:hb(function(a){var b=[],c=[],d=h(a.replace(R,"$1"));return d[u]?hb(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),!c.pop()}}),has:hb(function(a){return function(b){return fb(a,b).length>0}}),contains:hb(function(a){return function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:hb(function(a){return W.test(a||"")||fb.error("unsupported lang: "+a),a=a.replace(cb,db).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return Z.test(a.nodeName)},input:function(a){return Y.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:nb(function(){return[0]}),last:nb(function(a,b){return[b-1]}),eq:nb(function(a,b,c){return[0>c?c+b:c]}),even:nb(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:nb(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:nb(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:nb(function(a,b,c){for(var d=0>c?c+b:c;++db;b++)d+=a[b].value;return d}function rb(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j=[w,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(i=b[u]||(b[u]={}),(h=i[d])&&h[0]===w&&h[1]===f)return j[2]=h[2];if(i[d]=j,j[2]=a(b,c,g))return!0}}}function sb(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function tb(a,b,c){for(var d=0,e=b.length;e>d;d++)fb(a,b[d],c);return c}function ub(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(!c||c(f,d,e))&&(g.push(f),j&&b.push(h));return g}function vb(a,b,c,d,e,f){return d&&!d[u]&&(d=vb(d)),e&&!e[u]&&(e=vb(e,f)),hb(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||tb(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:ub(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=ub(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?K.call(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=ub(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):I.apply(g,r)})}function wb(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=rb(function(a){return a===b},h,!0),l=rb(function(a){return K.call(b,a)>-1},h,!0),m=[function(a,c,d){return!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d))}];f>i;i++)if(c=d.relative[a[i].type])m=[rb(sb(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;return vb(i>1&&sb(m),i>1&&qb(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(R,"$1"),c,e>i&&wb(a.slice(i,e)),f>e&&wb(a=a.slice(e)),f>e&&qb(a))}m.push(c)}return sb(m)}function xb(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,m,o,p=0,q="0",r=f&&[],s=[],t=j,u=f||e&&d.find.TAG("*",k),v=w+=null==t?1:Math.random()||.1,x=u.length;for(k&&(j=g!==n&&g);q!==x&&null!=(l=u[q]);q++){if(e&&l){m=0;while(o=a[m++])if(o(l,g,h)){i.push(l);break}k&&(w=v)}c&&((l=!o&&l)&&p--,f&&r.push(l))}if(p+=q,c&&q!==p){m=0;while(o=b[m++])o(r,s,g,h);if(f){if(p>0)while(q--)r[q]||s[q]||(s[q]=G.call(i));s=ub(s)}I.apply(i,s),k&&!f&&s.length>0&&p+b.length>1&&fb.uniqueSort(i)}return k&&(w=v,j=t),r};return c?hb(f):f}return h=fb.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=wb(b[c]),f[u]?d.push(f):e.push(f);f=A(a,xb(e,d)),f.selector=a}return f},i=fb.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(cb,db),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=X.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(cb,db),ab.test(j[0].type)&&ob(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&qb(j),!a)return I.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,ab.test(a)&&ob(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ib(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),ib(function(a){return a.innerHTML="","#"===a.firstChild.getAttribute("href")})||jb("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ib(function(a){return a.innerHTML="",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||jb("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),ib(function(a){return null==a.getAttribute("disabled")})||jb(L,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),fb}(a);m.find=s,m.expr=s.selectors,m.expr[":"]=m.expr.pseudos,m.unique=s.uniqueSort,m.text=s.getText,m.isXMLDoc=s.isXML,m.contains=s.contains;var t=m.expr.match.needsContext,u=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,v=/^.[^:#\[\.,]*$/;function w(a,b,c){if(m.isFunction(b))return m.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return m.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(v.test(b))return m.filter(b,a,c);b=m.filter(b,a)}return m.grep(a,function(a){return m.inArray(a,b)>=0!==c})}m.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?m.find.matchesSelector(d,a)?[d]:[]:m.find.matches(a,m.grep(b,function(a){return 1===a.nodeType}))},m.fn.extend({find:function(a){var b,c=[],d=this,e=d.length;if("string"!=typeof a)return this.pushStack(m(a).filter(function(){for(b=0;e>b;b++)if(m.contains(d[b],this))return!0}));for(b=0;e>b;b++)m.find(a,d[b],c);return c=this.pushStack(e>1?m.unique(c):c),c.selector=this.selector?this.selector+" "+a:a,c},filter:function(a){return this.pushStack(w(this,a||[],!1))},not:function(a){return this.pushStack(w(this,a||[],!0))},is:function(a){return!!w(this,"string"==typeof a&&t.test(a)?m(a):a||[],!1).length}});var x,y=a.document,z=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,A=m.fn.init=function(a,b){var c,d;if(!a)return this;if("string"==typeof a){if(c="<"===a.charAt(0)&&">"===a.charAt(a.length-1)&&a.length>=3?[null,a,null]:z.exec(a),!c||!c[1]&&b)return!b||b.jquery?(b||x).find(a):this.constructor(b).find(a);if(c[1]){if(b=b instanceof m?b[0]:b,m.merge(this,m.parseHTML(c[1],b&&b.nodeType?b.ownerDocument||b:y,!0)),u.test(c[1])&&m.isPlainObject(b))for(c in b)m.isFunction(this[c])?this[c](b[c]):this.attr(c,b[c]);return this}if(d=y.getElementById(c[2]),d&&d.parentNode){if(d.id!==c[2])return x.find(a);this.length=1,this[0]=d}return this.context=y,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):m.isFunction(a)?"undefined"!=typeof x.ready?x.ready(a):a(m):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),m.makeArray(a,this))};A.prototype=m.fn,x=m(y);var B=/^(?:parents|prev(?:Until|All))/,C={children:!0,contents:!0,next:!0,prev:!0};m.extend({dir:function(a,b,c){var d=[],e=a[b];while(e&&9!==e.nodeType&&(void 0===c||1!==e.nodeType||!m(e).is(c)))1===e.nodeType&&d.push(e),e=e[b];return d},sibling:function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c}}),m.fn.extend({has:function(a){var b,c=m(a,this),d=c.length;return this.filter(function(){for(b=0;d>b;b++)if(m.contains(this,c[b]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=t.test(a)||"string"!=typeof a?m(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&m.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?m.unique(f):f)},index:function(a){return a?"string"==typeof a?m.inArray(this[0],m(a)):m.inArray(a.jquery?a[0]:a,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(m.unique(m.merge(this.get(),m(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function D(a,b){do a=a[b];while(a&&1!==a.nodeType);return a}m.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return m.dir(a,"parentNode")},parentsUntil:function(a,b,c){return m.dir(a,"parentNode",c)},next:function(a){return D(a,"nextSibling")},prev:function(a){return D(a,"previousSibling")},nextAll:function(a){return m.dir(a,"nextSibling")},prevAll:function(a){return m.dir(a,"previousSibling")},nextUntil:function(a,b,c){return m.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return m.dir(a,"previousSibling",c)},siblings:function(a){return m.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return m.sibling(a.firstChild)},contents:function(a){return m.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:m.merge([],a.childNodes)}},function(a,b){m.fn[a]=function(c,d){var e=m.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=m.filter(d,e)),this.length>1&&(C[a]||(e=m.unique(e)),B.test(a)&&(e=e.reverse())),this.pushStack(e)}});var E=/\S+/g,F={};function G(a){var b=F[a]={};return m.each(a.match(E)||[],function(a,c){b[c]=!0}),b}m.Callbacks=function(a){a="string"==typeof a?F[a]||G(a):m.extend({},a);var b,c,d,e,f,g,h=[],i=!a.once&&[],j=function(l){for(c=a.memory&&l,d=!0,f=g||0,g=0,e=h.length,b=!0;h&&e>f;f++)if(h[f].apply(l[0],l[1])===!1&&a.stopOnFalse){c=!1;break}b=!1,h&&(i?i.length&&j(i.shift()):c?h=[]:k.disable())},k={add:function(){if(h){var d=h.length;!function f(b){m.each(b,function(b,c){var d=m.type(c);"function"===d?a.unique&&k.has(c)||h.push(c):c&&c.length&&"string"!==d&&f(c)})}(arguments),b?e=h.length:c&&(g=d,j(c))}return this},remove:function(){return h&&m.each(arguments,function(a,c){var d;while((d=m.inArray(c,h,d))>-1)h.splice(d,1),b&&(e>=d&&e--,f>=d&&f--)}),this},has:function(a){return a?m.inArray(a,h)>-1:!(!h||!h.length)},empty:function(){return h=[],e=0,this},disable:function(){return h=i=c=void 0,this},disabled:function(){return!h},lock:function(){return i=void 0,c||k.disable(),this},locked:function(){return!i},fireWith:function(a,c){return!h||d&&!i||(c=c||[],c=[a,c.slice?c.slice():c],b?i.push(c):j(c)),this},fire:function(){return k.fireWith(this,arguments),this},fired:function(){return!!d}};return k},m.extend({Deferred:function(a){var b=[["resolve","done",m.Callbacks("once memory"),"resolved"],["reject","fail",m.Callbacks("once memory"),"rejected"],["notify","progress",m.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return m.Deferred(function(c){m.each(b,function(b,f){var g=m.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&m.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?m.extend(a,d):d}},e={};return d.pipe=d.then,m.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=d.call(arguments),e=c.length,f=1!==e||a&&m.isFunction(a.promise)?e:0,g=1===f?a:m.Deferred(),h=function(a,b,c){return function(e){b[a]=this,c[a]=arguments.length>1?d.call(arguments):e,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(e>1)for(i=new Array(e),j=new Array(e),k=new Array(e);e>b;b++)c[b]&&m.isFunction(c[b].promise)?c[b].promise().done(h(b,k,c)).fail(g.reject).progress(h(b,j,i)):--f;return f||g.resolveWith(k,c),g.promise()}});var H;m.fn.ready=function(a){return m.ready.promise().done(a),this},m.extend({isReady:!1,readyWait:1,holdReady:function(a){a?m.readyWait++:m.ready(!0)},ready:function(a){if(a===!0?!--m.readyWait:!m.isReady){if(!y.body)return setTimeout(m.ready);m.isReady=!0,a!==!0&&--m.readyWait>0||(H.resolveWith(y,[m]),m.fn.triggerHandler&&(m(y).triggerHandler("ready"),m(y).off("ready")))}}});function I(){y.addEventListener?(y.removeEventListener("DOMContentLoaded",J,!1),a.removeEventListener("load",J,!1)):(y.detachEvent("onreadystatechange",J),a.detachEvent("onload",J))}function J(){(y.addEventListener||"load"===event.type||"complete"===y.readyState)&&(I(),m.ready())}m.ready.promise=function(b){if(!H)if(H=m.Deferred(),"complete"===y.readyState)setTimeout(m.ready);else if(y.addEventListener)y.addEventListener("DOMContentLoaded",J,!1),a.addEventListener("load",J,!1);else{y.attachEvent("onreadystatechange",J),a.attachEvent("onload",J);var c=!1;try{c=null==a.frameElement&&y.documentElement}catch(d){}c&&c.doScroll&&!function e(){if(!m.isReady){try{c.doScroll("left")}catch(a){return setTimeout(e,50)}I(),m.ready()}}()}return H.promise(b)};var K="undefined",L;for(L in m(k))break;k.ownLast="0"!==L,k.inlineBlockNeedsLayout=!1,m(function(){var a,b,c,d;c=y.getElementsByTagName("body")[0],c&&c.style&&(b=y.createElement("div"),d=y.createElement("div"),d.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(d).appendChild(b),typeof b.style.zoom!==K&&(b.style.cssText="display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1",k.inlineBlockNeedsLayout=a=3===b.offsetWidth,a&&(c.style.zoom=1)),c.removeChild(d))}),function(){var a=y.createElement("div");if(null==k.deleteExpando){k.deleteExpando=!0;try{delete a.test}catch(b){k.deleteExpando=!1}}a=null}(),m.acceptData=function(a){var b=m.noData[(a.nodeName+" ").toLowerCase()],c=+a.nodeType||1;return 1!==c&&9!==c?!1:!b||b!==!0&&a.getAttribute("classid")===b};var M=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,N=/([A-Z])/g;function O(a,b,c){if(void 0===c&&1===a.nodeType){var d="data-"+b.replace(N,"-$1").toLowerCase();if(c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:M.test(c)?m.parseJSON(c):c}catch(e){}m.data(a,b,c)}else c=void 0}return c}function P(a){var b;for(b in a)if(("data"!==b||!m.isEmptyObject(a[b]))&&"toJSON"!==b)return!1;return!0}function Q(a,b,d,e){if(m.acceptData(a)){var f,g,h=m.expando,i=a.nodeType,j=i?m.cache:a,k=i?a[h]:a[h]&&h; +if(k&&j[k]&&(e||j[k].data)||void 0!==d||"string"!=typeof b)return k||(k=i?a[h]=c.pop()||m.guid++:h),j[k]||(j[k]=i?{}:{toJSON:m.noop}),("object"==typeof b||"function"==typeof b)&&(e?j[k]=m.extend(j[k],b):j[k].data=m.extend(j[k].data,b)),g=j[k],e||(g.data||(g.data={}),g=g.data),void 0!==d&&(g[m.camelCase(b)]=d),"string"==typeof b?(f=g[b],null==f&&(f=g[m.camelCase(b)])):f=g,f}}function R(a,b,c){if(m.acceptData(a)){var d,e,f=a.nodeType,g=f?m.cache:a,h=f?a[m.expando]:m.expando;if(g[h]){if(b&&(d=c?g[h]:g[h].data)){m.isArray(b)?b=b.concat(m.map(b,m.camelCase)):b in d?b=[b]:(b=m.camelCase(b),b=b in d?[b]:b.split(" ")),e=b.length;while(e--)delete d[b[e]];if(c?!P(d):!m.isEmptyObject(d))return}(c||(delete g[h].data,P(g[h])))&&(f?m.cleanData([a],!0):k.deleteExpando||g!=g.window?delete g[h]:g[h]=null)}}}m.extend({cache:{},noData:{"applet ":!0,"embed ":!0,"object ":"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(a){return a=a.nodeType?m.cache[a[m.expando]]:a[m.expando],!!a&&!P(a)},data:function(a,b,c){return Q(a,b,c)},removeData:function(a,b){return R(a,b)},_data:function(a,b,c){return Q(a,b,c,!0)},_removeData:function(a,b){return R(a,b,!0)}}),m.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=m.data(f),1===f.nodeType&&!m._data(f,"parsedAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=m.camelCase(d.slice(5)),O(f,d,e[d])));m._data(f,"parsedAttrs",!0)}return e}return"object"==typeof a?this.each(function(){m.data(this,a)}):arguments.length>1?this.each(function(){m.data(this,a,b)}):f?O(f,a,m.data(f,a)):void 0},removeData:function(a){return this.each(function(){m.removeData(this,a)})}}),m.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=m._data(a,b),c&&(!d||m.isArray(c)?d=m._data(a,b,m.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=m.queue(a,b),d=c.length,e=c.shift(),f=m._queueHooks(a,b),g=function(){m.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return m._data(a,c)||m._data(a,c,{empty:m.Callbacks("once memory").add(function(){m._removeData(a,b+"queue"),m._removeData(a,c)})})}}),m.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.lengthh;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f},W=/^(?:checkbox|radio)$/i;!function(){var a=y.createElement("input"),b=y.createElement("div"),c=y.createDocumentFragment();if(b.innerHTML="
a",k.leadingWhitespace=3===b.firstChild.nodeType,k.tbody=!b.getElementsByTagName("tbody").length,k.htmlSerialize=!!b.getElementsByTagName("link").length,k.html5Clone="<:nav>"!==y.createElement("nav").cloneNode(!0).outerHTML,a.type="checkbox",a.checked=!0,c.appendChild(a),k.appendChecked=a.checked,b.innerHTML="",k.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue,c.appendChild(b),b.innerHTML="",k.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,k.noCloneEvent=!0,b.attachEvent&&(b.attachEvent("onclick",function(){k.noCloneEvent=!1}),b.cloneNode(!0).click()),null==k.deleteExpando){k.deleteExpando=!0;try{delete b.test}catch(d){k.deleteExpando=!1}}}(),function(){var b,c,d=y.createElement("div");for(b in{submit:!0,change:!0,focusin:!0})c="on"+b,(k[b+"Bubbles"]=c in a)||(d.setAttribute(c,"t"),k[b+"Bubbles"]=d.attributes[c].expando===!1);d=null}();var X=/^(?:input|select|textarea)$/i,Y=/^key/,Z=/^(?:mouse|pointer|contextmenu)|click/,$=/^(?:focusinfocus|focusoutblur)$/,_=/^([^.]*)(?:\.(.+)|)$/;function ab(){return!0}function bb(){return!1}function cb(){try{return y.activeElement}catch(a){}}m.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,n,o,p,q,r=m._data(a);if(r){c.handler&&(i=c,c=i.handler,e=i.selector),c.guid||(c.guid=m.guid++),(g=r.events)||(g=r.events={}),(k=r.handle)||(k=r.handle=function(a){return typeof m===K||a&&m.event.triggered===a.type?void 0:m.event.dispatch.apply(k.elem,arguments)},k.elem=a),b=(b||"").match(E)||[""],h=b.length;while(h--)f=_.exec(b[h])||[],o=q=f[1],p=(f[2]||"").split(".").sort(),o&&(j=m.event.special[o]||{},o=(e?j.delegateType:j.bindType)||o,j=m.event.special[o]||{},l=m.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&m.expr.match.needsContext.test(e),namespace:p.join(".")},i),(n=g[o])||(n=g[o]=[],n.delegateCount=0,j.setup&&j.setup.call(a,d,p,k)!==!1||(a.addEventListener?a.addEventListener(o,k,!1):a.attachEvent&&a.attachEvent("on"+o,k))),j.add&&(j.add.call(a,l),l.handler.guid||(l.handler.guid=c.guid)),e?n.splice(n.delegateCount++,0,l):n.push(l),m.event.global[o]=!0);a=null}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,n,o,p,q,r=m.hasData(a)&&m._data(a);if(r&&(k=r.events)){b=(b||"").match(E)||[""],j=b.length;while(j--)if(h=_.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=m.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,n=k[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),i=f=n.length;while(f--)g=n[f],!e&&q!==g.origType||c&&c.guid!==g.guid||h&&!h.test(g.namespace)||d&&d!==g.selector&&("**"!==d||!g.selector)||(n.splice(f,1),g.selector&&n.delegateCount--,l.remove&&l.remove.call(a,g));i&&!n.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||m.removeEvent(a,o,r.handle),delete k[o])}else for(o in k)m.event.remove(a,o+b[j],c,d,!0);m.isEmptyObject(k)&&(delete r.handle,m._removeData(a,"events"))}},trigger:function(b,c,d,e){var f,g,h,i,k,l,n,o=[d||y],p=j.call(b,"type")?b.type:b,q=j.call(b,"namespace")?b.namespace.split("."):[];if(h=l=d=d||y,3!==d.nodeType&&8!==d.nodeType&&!$.test(p+m.event.triggered)&&(p.indexOf(".")>=0&&(q=p.split("."),p=q.shift(),q.sort()),g=p.indexOf(":")<0&&"on"+p,b=b[m.expando]?b:new m.Event(p,"object"==typeof b&&b),b.isTrigger=e?2:3,b.namespace=q.join("."),b.namespace_re=b.namespace?new RegExp("(^|\\.)"+q.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=d),c=null==c?[b]:m.makeArray(c,[b]),k=m.event.special[p]||{},e||!k.trigger||k.trigger.apply(d,c)!==!1)){if(!e&&!k.noBubble&&!m.isWindow(d)){for(i=k.delegateType||p,$.test(i+p)||(h=h.parentNode);h;h=h.parentNode)o.push(h),l=h;l===(d.ownerDocument||y)&&o.push(l.defaultView||l.parentWindow||a)}n=0;while((h=o[n++])&&!b.isPropagationStopped())b.type=n>1?i:k.bindType||p,f=(m._data(h,"events")||{})[b.type]&&m._data(h,"handle"),f&&f.apply(h,c),f=g&&h[g],f&&f.apply&&m.acceptData(h)&&(b.result=f.apply(h,c),b.result===!1&&b.preventDefault());if(b.type=p,!e&&!b.isDefaultPrevented()&&(!k._default||k._default.apply(o.pop(),c)===!1)&&m.acceptData(d)&&g&&d[p]&&!m.isWindow(d)){l=d[g],l&&(d[g]=null),m.event.triggered=p;try{d[p]()}catch(r){}m.event.triggered=void 0,l&&(d[g]=l)}return b.result}},dispatch:function(a){a=m.event.fix(a);var b,c,e,f,g,h=[],i=d.call(arguments),j=(m._data(this,"events")||{})[a.type]||[],k=m.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=m.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,g=0;while((e=f.handlers[g++])&&!a.isImmediatePropagationStopped())(!a.namespace_re||a.namespace_re.test(e.namespace))&&(a.handleObj=e,a.data=e.data,c=((m.event.special[e.origType]||{}).handle||e.handler).apply(f.elem,i),void 0!==c&&(a.result=c)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&(!a.button||"click"!==a.type))for(;i!=this;i=i.parentNode||this)if(1===i.nodeType&&(i.disabled!==!0||"click"!==a.type)){for(e=[],f=0;h>f;f++)d=b[f],c=d.selector+" ",void 0===e[c]&&(e[c]=d.needsContext?m(c,this).index(i)>=0:m.find(c,this,null,[i]).length),e[c]&&e.push(d);e.length&&g.push({elem:i,handlers:e})}return h]","i"),hb=/^\s+/,ib=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,jb=/<([\w:]+)/,kb=/\s*$/g,rb={option:[1,""],legend:[1,"
","
"],area:[1,"",""],param:[1,"",""],thead:[1,"","
"],tr:[2,"","
"],col:[2,"","
"],td:[3,"","
"],_default:k.htmlSerialize?[0,"",""]:[1,"X
","
"]},sb=db(y),tb=sb.appendChild(y.createElement("div"));rb.optgroup=rb.option,rb.tbody=rb.tfoot=rb.colgroup=rb.caption=rb.thead,rb.th=rb.td;function ub(a,b){var c,d,e=0,f=typeof a.getElementsByTagName!==K?a.getElementsByTagName(b||"*"):typeof a.querySelectorAll!==K?a.querySelectorAll(b||"*"):void 0;if(!f)for(f=[],c=a.childNodes||a;null!=(d=c[e]);e++)!b||m.nodeName(d,b)?f.push(d):m.merge(f,ub(d,b));return void 0===b||b&&m.nodeName(a,b)?m.merge([a],f):f}function vb(a){W.test(a.type)&&(a.defaultChecked=a.checked)}function wb(a,b){return m.nodeName(a,"table")&&m.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function xb(a){return a.type=(null!==m.find.attr(a,"type"))+"/"+a.type,a}function yb(a){var b=pb.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function zb(a,b){for(var c,d=0;null!=(c=a[d]);d++)m._data(c,"globalEval",!b||m._data(b[d],"globalEval"))}function Ab(a,b){if(1===b.nodeType&&m.hasData(a)){var c,d,e,f=m._data(a),g=m._data(b,f),h=f.events;if(h){delete g.handle,g.events={};for(c in h)for(d=0,e=h[c].length;e>d;d++)m.event.add(b,c,h[c][d])}g.data&&(g.data=m.extend({},g.data))}}function Bb(a,b){var c,d,e;if(1===b.nodeType){if(c=b.nodeName.toLowerCase(),!k.noCloneEvent&&b[m.expando]){e=m._data(b);for(d in e.events)m.removeEvent(b,d,e.handle);b.removeAttribute(m.expando)}"script"===c&&b.text!==a.text?(xb(b).text=a.text,yb(b)):"object"===c?(b.parentNode&&(b.outerHTML=a.outerHTML),k.html5Clone&&a.innerHTML&&!m.trim(b.innerHTML)&&(b.innerHTML=a.innerHTML)):"input"===c&&W.test(a.type)?(b.defaultChecked=b.checked=a.checked,b.value!==a.value&&(b.value=a.value)):"option"===c?b.defaultSelected=b.selected=a.defaultSelected:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}}m.extend({clone:function(a,b,c){var d,e,f,g,h,i=m.contains(a.ownerDocument,a);if(k.html5Clone||m.isXMLDoc(a)||!gb.test("<"+a.nodeName+">")?f=a.cloneNode(!0):(tb.innerHTML=a.outerHTML,tb.removeChild(f=tb.firstChild)),!(k.noCloneEvent&&k.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||m.isXMLDoc(a)))for(d=ub(f),h=ub(a),g=0;null!=(e=h[g]);++g)d[g]&&Bb(e,d[g]);if(b)if(c)for(h=h||ub(a),d=d||ub(f),g=0;null!=(e=h[g]);g++)Ab(e,d[g]);else Ab(a,f);return d=ub(f,"script"),d.length>0&&zb(d,!i&&ub(a,"script")),d=h=e=null,f},buildFragment:function(a,b,c,d){for(var e,f,g,h,i,j,l,n=a.length,o=db(b),p=[],q=0;n>q;q++)if(f=a[q],f||0===f)if("object"===m.type(f))m.merge(p,f.nodeType?[f]:f);else if(lb.test(f)){h=h||o.appendChild(b.createElement("div")),i=(jb.exec(f)||["",""])[1].toLowerCase(),l=rb[i]||rb._default,h.innerHTML=l[1]+f.replace(ib,"<$1>")+l[2],e=l[0];while(e--)h=h.lastChild;if(!k.leadingWhitespace&&hb.test(f)&&p.push(b.createTextNode(hb.exec(f)[0])),!k.tbody){f="table"!==i||kb.test(f)?""!==l[1]||kb.test(f)?0:h:h.firstChild,e=f&&f.childNodes.length;while(e--)m.nodeName(j=f.childNodes[e],"tbody")&&!j.childNodes.length&&f.removeChild(j)}m.merge(p,h.childNodes),h.textContent="";while(h.firstChild)h.removeChild(h.firstChild);h=o.lastChild}else p.push(b.createTextNode(f));h&&o.removeChild(h),k.appendChecked||m.grep(ub(p,"input"),vb),q=0;while(f=p[q++])if((!d||-1===m.inArray(f,d))&&(g=m.contains(f.ownerDocument,f),h=ub(o.appendChild(f),"script"),g&&zb(h),c)){e=0;while(f=h[e++])ob.test(f.type||"")&&c.push(f)}return h=null,o},cleanData:function(a,b){for(var d,e,f,g,h=0,i=m.expando,j=m.cache,l=k.deleteExpando,n=m.event.special;null!=(d=a[h]);h++)if((b||m.acceptData(d))&&(f=d[i],g=f&&j[f])){if(g.events)for(e in g.events)n[e]?m.event.remove(d,e):m.removeEvent(d,e,g.handle);j[f]&&(delete j[f],l?delete d[i]:typeof d.removeAttribute!==K?d.removeAttribute(i):d[i]=null,c.push(f))}}}),m.fn.extend({text:function(a){return V(this,function(a){return void 0===a?m.text(this):this.empty().append((this[0]&&this[0].ownerDocument||y).createTextNode(a))},null,a,arguments.length)},append:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=wb(this,a);b.appendChild(a)}})},prepend:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=wb(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},remove:function(a,b){for(var c,d=a?m.filter(a,this):this,e=0;null!=(c=d[e]);e++)b||1!==c.nodeType||m.cleanData(ub(c)),c.parentNode&&(b&&m.contains(c.ownerDocument,c)&&zb(ub(c,"script")),c.parentNode.removeChild(c));return this},empty:function(){for(var a,b=0;null!=(a=this[b]);b++){1===a.nodeType&&m.cleanData(ub(a,!1));while(a.firstChild)a.removeChild(a.firstChild);a.options&&m.nodeName(a,"select")&&(a.options.length=0)}return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return m.clone(this,a,b)})},html:function(a){return V(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a)return 1===b.nodeType?b.innerHTML.replace(fb,""):void 0;if(!("string"!=typeof a||mb.test(a)||!k.htmlSerialize&&gb.test(a)||!k.leadingWhitespace&&hb.test(a)||rb[(jb.exec(a)||["",""])[1].toLowerCase()])){a=a.replace(ib,"<$1>");try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(m.cleanData(ub(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=arguments[0];return this.domManip(arguments,function(b){a=this.parentNode,m.cleanData(ub(this)),a&&a.replaceChild(b,this)}),a&&(a.length||a.nodeType)?this:this.remove()},detach:function(a){return this.remove(a,!0)},domManip:function(a,b){a=e.apply([],a);var c,d,f,g,h,i,j=0,l=this.length,n=this,o=l-1,p=a[0],q=m.isFunction(p);if(q||l>1&&"string"==typeof p&&!k.checkClone&&nb.test(p))return this.each(function(c){var d=n.eq(c);q&&(a[0]=p.call(this,c,d.html())),d.domManip(a,b)});if(l&&(i=m.buildFragment(a,this[0].ownerDocument,!1,this),c=i.firstChild,1===i.childNodes.length&&(i=c),c)){for(g=m.map(ub(i,"script"),xb),f=g.length;l>j;j++)d=i,j!==o&&(d=m.clone(d,!0,!0),f&&m.merge(g,ub(d,"script"))),b.call(this[j],d,j);if(f)for(h=g[g.length-1].ownerDocument,m.map(g,yb),j=0;f>j;j++)d=g[j],ob.test(d.type||"")&&!m._data(d,"globalEval")&&m.contains(h,d)&&(d.src?m._evalUrl&&m._evalUrl(d.src):m.globalEval((d.text||d.textContent||d.innerHTML||"").replace(qb,"")));i=c=null}return this}}),m.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){m.fn[a]=function(a){for(var c,d=0,e=[],g=m(a),h=g.length-1;h>=d;d++)c=d===h?this:this.clone(!0),m(g[d])[b](c),f.apply(e,c.get());return this.pushStack(e)}});var Cb,Db={};function Eb(b,c){var d,e=m(c.createElement(b)).appendTo(c.body),f=a.getDefaultComputedStyle&&(d=a.getDefaultComputedStyle(e[0]))?d.display:m.css(e[0],"display");return e.detach(),f}function Fb(a){var b=y,c=Db[a];return c||(c=Eb(a,b),"none"!==c&&c||(Cb=(Cb||m("