├── README.md ├── imgs └── arrow_p.png ├── index.html ├── js ├── config.js ├── main-500.js ├── main.js └── jquery.js └── css └── main.css /README.md: -------------------------------------------------------------------------------- 1 | ## 时时彩 2 | 3 | DEMO地址: -------------------------------------------------------------------------------- /imgs/arrow_p.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/demo-platform/ssc/HEAD/imgs/arrow_p.png -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 时时彩 DEMO 8 | 9 | 10 | 11 | 12 | 14 |
15 | 16 |
17 | 18 |
19 | 20 |
21 | 22 |
23 | 24 |
25 |

『提醒』请将文件的内容粘贴到文本框里,一行一注。

26 | 27 |
28 | 29 |
30 |

『您选择了 0 注,共 0.00 元』

31 |

如中奖,奖金 0.00 元,盈利 0.00 元.

32 |

33 | 39 | ↓ 确认选号并添加到投注区 40 | 清空全部 41 |

42 |
43 |
44 | 45 |
46 |
47 | 48 |

49 | 清空列表 50 | 单倍下注:0 ,金额:0.00 元,您选择了 51 | -+ 倍。 52 |
注:倍率不大于1000 53 |

54 |
55 |
56 | 57 | Fork me on GitHub 58 | 59 | 60 | 61 | 66 | 67 | 71 | 72 | 73 | -------------------------------------------------------------------------------- /js/config.js: -------------------------------------------------------------------------------- 1 | window.ConfigParam = { 2 | total: 10, 3 | stars: 5 4 | } 5 | 6 | /** 7 | * [ConfigDOM 渲染DOM所需数据] 8 | * 9 | * 数据类型分为两种,一种是无分组(group)属性,如一星; 一种是包含分组,如二星。 10 | * @type {Object} 11 | */ 12 | window.ConfigDOM = { 13 | 14 | "一星": [{ 15 | m: "标准选号", 16 | intro: "从个位选择1个或多个号码,选号与开奖号码个位一致即中奖11元。", 17 | type: "一星", 18 | pos: [1, 1] 19 | }], 20 | 21 | "二星": [{ 22 | group: "直选", 23 | data: [{ 24 | m: "标准选号", 25 | intro: "从00~99中任选1个或多个2位数,与开奖号码后两位相同则中奖116.00元。", 26 | type: "两星直选", 27 | pos: [2, 1] 28 | },{ 29 | m: "手工录入", 30 | intro: "任选2个号码组成一注有效注,与开奖号码后两位相同则中奖116.00元。", 31 | type: "两星直选", 32 | pos: [2, 2] 33 | }] 34 | },{ 35 | group: "组选", 36 | data: [{ 37 | m: "组选包号", 38 | intro: "至少选择2个号码,开奖号码后两位含在选号中则中奖(若只选两个号,开奖号后两位为对子时不中奖)。十位个位如果为对子,奖金为116元,非对子奖金58元。", 39 | type: "两星组选包号", 40 | pos: [2, 3] 41 | },{ 42 | m: "组选和值", 43 | intro: "开奖号码十位和个位的和值与您选好一致则中奖。十位个位如果为对子,奖金为116元,非对子奖金58元。", 44 | type: "两星组选和值", 45 | pos: [2, 4] 46 | },{ 47 | m: "组选胆拖", 48 | intro: "从0~9中任选1个胆码,多个拖码进行投注,开奖号码后两位含在选号中则中奖(若只选两个号,开奖号后两位为对子时不中奖)。十位个位如果为对子,奖金为116元,非对子奖金58元。", 49 | type: "两星组选胆拖", 50 | pos: [2, 5] 51 | },{ 52 | m: "手工录入", 53 | intro: "任选2个号码组成一注有效注,开奖号码后两位不为对子且含在选号中则中奖,奖金58元。", 54 | type: "两星组选", 55 | pos: [2, 6] 56 | }] 57 | }], 58 | 59 | "三星直选": [{ 60 | m: "标准选号", 61 | intro: "从三位各选1个或多个号码,选号与开奖号后三位按位一致即中1160元。", 62 | type: "三星直选", 63 | pos: [3, 1] 64 | },{ 65 | m: "和值选号", 66 | intro: "所选和值与开奖号码和值一致,即中奖1160元。", 67 | type: "三星直选和值", 68 | pos: [3, 2] 69 | },{ 70 | m: "直选胆拖", 71 | intro: "选1-2个胆码,多个拖码,胆码对,剩下的开奖数字全部包含在拖码中,即中奖1160元,直选胆拖不包含组三和豹子。 ", 72 | type: "三星直选胆拖", 73 | pos: [3, 3] 74 | },{ 75 | m: "直选跨度", 76 | intro: "至少从0-9中选择1个跨度,所选跨度与开奖号码跨度一致,即中奖1160元。", 77 | type: "三星直选跨度", 78 | pos: [3, 4] 79 | },{ 80 | m: "手工录入", 81 | intro: "任选3个号码组成一注有效注,选号与开奖号后三位按位一致即中1160元。", 82 | type: "三星直选", 83 | pos: [3, 5] 84 | }], 85 | 86 | "三星组选": [{ 87 | group: "组三", 88 | data: [{ 89 | m: "标准", 90 | intro: "3个数字有两个数字相同,与开奖号后三位相同即中奖,奖金385元。", 91 | type: "三星组三组选", 92 | pos: [4, 1] 93 | },{ 94 | m: "包号", 95 | intro: "至少选择2个号码,开奖号码为组三且含在包号号码中即中奖385元。", 96 | type: "三星组三包号", 97 | pos: [4, 2] 98 | },{ 99 | m: "和值", 100 | intro: "请从1-26中选择组选三和值,单注奖金385元。", 101 | type: "三星组三和值", 102 | pos: [4, 3] 103 | },{ 104 | m: "手工录入", 105 | intro: "任选一个非豹子的3个号码组成一注有效注,组三385元 / 组六190元。", 106 | type: "三星组选", 107 | pos: [4, 4] 108 | }] 109 | },{ 110 | group: "组六", 111 | data: [{ 112 | m: "包号", 113 | intro: "至少选择3个号码,开奖号码为组六且含在包号号码中即中奖190元。", 114 | type: "三星组六组选", 115 | pos: [4, 5] 116 | },{ 117 | m: "和值", 118 | intro: "请从3-24中选择组选六和值,单注奖金190元。", 119 | type: "三星组六和值", 120 | pos: [4, 6] 121 | },{ 122 | m: "胆拖", 123 | intro: "从0~9中任选1-2个胆码,多个拖码进行投注,开奖号码为组六且含在包号号码中即中奖190元。", 124 | type: "三星组六胆拖", 125 | pos: [4, 7] 126 | },{ 127 | m: "手工录入", 128 | intro: "任选一个非豹子的3个号码组成一注有效注,组三385元 / 组六190元。", 129 | type: "三星组六组选", 130 | pos: [4, 8] 131 | }] 132 | }], 133 | 134 | "四星": [{ 135 | m: "标准选号", 136 | intro: "从四位各选1个或多个号码,选号与开奖号后四位按位一致即中1万元,与中间三位或后三位按位一致即中88元!。", 137 | type: "四星直选", 138 | pos: [5, 1] 139 | }], 140 | 141 | "五星": [{ 142 | group: "直选", 143 | data: [{ 144 | m: "标准选号", 145 | intro: "从00000~99999中任选1个或多个5位数,单注奖金11.6万元。", 146 | type: "五星直选", 147 | pos: [6, 1] 148 | },{ 149 | m: "手工录入", 150 | intro: "任选5个号码组成一注有效注,单注奖金11.6万元。", 151 | type: "五星直选", 152 | pos: [6, 2] 153 | }] 154 | },{ 155 | group: "通选", 156 | data: [{ 157 | m: "标准选号", 158 | intro: "从五位各选1个号码,选号与开奖号按位一致即中2万元,前三或后三位按位一致即中200元,前二或后二位按位一致即中30元。", 159 | type: "五星通选", 160 | pos: [6, 3] 161 | },{ 162 | m: "手工录入", 163 | intro: "任选5个号码组成一注有效注,选号与开奖号按位一致即中2万元,前三或后三位按位一致即中200元,前二或后二位按位一致即中30元。", 164 | type: "五星通选", 165 | pos: [6, 4] 166 | }] 167 | }], 168 | 169 | "大小单双": [{ 170 | m: "标准选号", 171 | intro: "选择开奖号码的个、十两位号码属性,单注奖金4.00元。", 172 | type: "大小单双", 173 | pos: [7, 1] 174 | }], 175 | 176 | "任选一": [{ 177 | m: "标准选号", 178 | intro: "从5位中定位选择1个或多个号码,单注奖金11.00元。", 179 | type: "任选一", 180 | pos: [8, 1] 181 | }], 182 | 183 | "任选二": [{ 184 | m: "标准选号", 185 | intro: "从5位中定位选择2个或更多号码,单注奖金116.00元。", 186 | type: "任选二", 187 | pos: [9, 1] 188 | }] 189 | }; -------------------------------------------------------------------------------- /css/main.css: -------------------------------------------------------------------------------- 1 | body, div, a, ul, li, strong,input,form,label,p,tr,td,th { 2 | padding:0; 3 | margin:0; 4 | } 5 | 6 | body { 7 | font: 12px/1.2 '宋体',tahoma; 8 | padding-bottom: 50px; 9 | } 10 | ul, li { 11 | list-style: none; 12 | } 13 | p { 14 | line-height: 24px; 15 | } 16 | a { 17 | color: #000; 18 | text-decoration: none; 19 | cursor: pointer; 20 | } 21 | 22 | /** { 23 | transition: all 0.4s ease; 24 | -webkit-transition: all 0.4s ease; 25 | -moz-transition: all 0.4s ease; 26 | -o-transition: all 0.4s ease; 27 | }*/ 28 | 29 | input { 30 | vertical-align: middle; 31 | } 32 | input[type=radio]{ 33 | vertical-align: bottom; 34 | *vertical-align: middle; 35 | } 36 | 37 | 38 | .ssc-box { 39 | border: 1px solid #FFB64B; 40 | border-top: 3px solid #F28B22; 41 | width: 740px; 42 | margin: 30px auto; 43 | user-select: none; 44 | -webkit-user-select: none; 45 | -moz-user-select: none; 46 | -ms-user-select: none; 47 | -o-user-select: none; 48 | } 49 | .ssc-num { 50 | padding-top: 10px; 51 | padding-left: 15px; 52 | background: #FFFAF7; 53 | border-bottom: 1px solid #FFB64B; 54 | color: #CCC; 55 | } 56 | .ssc-num a { 57 | font-weight: bold; 58 | display: inline-block; 59 | padding: 3px 10px; 60 | line-height: 20px; 61 | color: #CA6100; 62 | border: 1px solid transparent; 63 | border-top-left-radius: 3px; 64 | border-top-right-radius: 3px; 65 | } 66 | .ssc-num a:hover { 67 | color: red; 68 | } 69 | a.ssc-num_on { 70 | border: 1px solid #FFB64B; 71 | border-bottom: none; 72 | background: #FFF4E7; 73 | } 74 | .ssc-container { 75 | padding: 20px; 76 | padding-top: 0; 77 | padding-bottom: 30px; 78 | user-select: none; 79 | -webkit-user-select: none; 80 | } 81 | .ssc-type { 82 | padding: 15px 20px; 83 | background: url(../imgs/arrow_p.png) no-repeat bottom center; 84 | padding-bottom: 50px; 85 | } 86 | .ssc-type-choose span { 87 | display: inline-block; 88 | margin-right: 15px; 89 | } 90 | .ssc-type-choose strong { 91 | color: red; 92 | } 93 | .ssc-type-choose label { 94 | margin-right: 6px; 95 | cursor: pointer; 96 | } 97 | .ssc-tip { 98 | margin-top: 10px; 99 | color: #888; 100 | } 101 | .ssc-tip span { 102 | color: red; 103 | } 104 | .ssc-recent-btn{ 105 | text-align: center; 106 | } 107 | .ssc-recent-btn span { 108 | display: inline-block; 109 | margin-right: 20px; 110 | background: #EEE; 111 | cursor: pointer; 112 | padding: 5px 18px; 113 | color: #0F3F94; 114 | } 115 | .ssc-selector-item { 116 | margin: 10px 0; 117 | } 118 | .ssc-selector-item span { 119 | display: inline-block; 120 | text-align: center; 121 | margin-right: 2px; 122 | } 123 | .ssc-selector-item strong { 124 | display: block; 125 | width: 26px; 126 | height: 26px; 127 | line-height: 26px; 128 | text-align: center; 129 | background: #EEE; 130 | border-radius: 13px; 131 | cursor: pointer; 132 | box-shadow: 1px 1px 3px #CCC; 133 | font-size: 12px; 134 | margin-bottom: 10px; 135 | color: #555; 136 | } 137 | .ssc-selector-item a.btn { 138 | display: inline-block; 139 | vertical-align: top; 140 | border: 1px solid #CCC; 141 | padding: 2px 5px; 142 | background: #EEE; 143 | margin-top: 2px; 144 | border-radius: 2px; 145 | margin-left: 3px; 146 | } 147 | strong.ssc-selector-item_on, strong.ssc-selector-item_gray.ssc-selector-item_on { 148 | background: #49A0FF; 149 | color: #EEE; 150 | box-shadow: 1px 1px 3px #000; 151 | } 152 | strong.ssc-selector-item_gray{ 153 | background: #CCC; 154 | color: #888; 155 | } 156 | .ssc-selector-item span em { 157 | display: block; 158 | font-size: 12px; 159 | font-style: normal; 160 | color: #888; 161 | } 162 | .CSI_label { 163 | text-align: center; 164 | } 165 | .CSI_label i { 166 | display: inline-block; 167 | font-style: normal; 168 | background: #EEE; 169 | padding: 4px 10px; 170 | margin-bottom: 11px; 171 | } 172 | .ssc-main { 173 | padding-left: 20px; 174 | } 175 | .ssc-main-choose { 176 | padding-bottom: 50px; 177 | padding-left: 60px; 178 | background: url(../imgs/arrow_p.png) no-repeat bottom center; 179 | } 180 | .ssc-main-choose-text { 181 | display: none; 182 | width: 560px; 183 | margin: 0 auto; 184 | } 185 | .ssc-main-choose-text textarea { 186 | width: 100%; 187 | height: 120px; 188 | margin-bottom: 15px; 189 | resize: none; 190 | overflow-y: auto; 191 | } 192 | .ssc-main-choose-text p span { 193 | color: red; 194 | font-weight: bold; 195 | line-height: 30px; 196 | } 197 | .ssc-selector-item select, select.CSR_select { 198 | display: inline-block; 199 | vertical-align: top; 200 | font-size: 12px; 201 | color: #494949; 202 | border-color: #AFAFAF; 203 | background: #F5F5F5; 204 | border-radius: 2px; 205 | overflow: hidden; 206 | padding: 1px 2px; 207 | } 208 | .ssc-selector-res { 209 | text-align: center; 210 | overflow: hidden; 211 | } 212 | .CSR_info span { 213 | color: red; 214 | font-weight: bold; 215 | } 216 | .CSR_info { 217 | font-size: 14px; 218 | } 219 | .CSR_get { 220 | color: #888; 221 | margin-bottom: 30px; 222 | } 223 | .CSR_btn { 224 | font-size: 12px; 225 | border: 1px solid #CCC; 226 | background: #EEE; 227 | display: inline-block; 228 | line-height: 25px; 229 | padding: 0 12px; 230 | margin-right: 10px; 231 | font-weight: bold; 232 | color: #888; 233 | border-radius: 3px; 234 | cursor: default; 235 | } 236 | .CSR_btn_OK { 237 | background: #F6A035; 238 | color: #FFF; 239 | cursor: pointer; 240 | } 241 | .CSR_clear { 242 | line-height: 32px; 243 | display: inline-block; 244 | color: #777; 245 | } 246 | select.CSR_select { 247 | float: right; 248 | margin-right: 90px; 249 | margin-left: -180px; 250 | margin-bottom: 10px; 251 | margin-top: 5px; 252 | } 253 | .ssc-resluts { 254 | width: 560px; 255 | margin: 15px auto; 256 | margin-bottom: 20px; 257 | } 258 | .ssc-resluts-list { 259 | border: 1px solid #CCC; 260 | overflow-y: auto; 261 | height: 120px; 262 | } 263 | .ssc-resluts-list > div { 264 | padding: 0 10px; 265 | line-height: 24px; 266 | cursor: pointer; 267 | } 268 | .ssc-resluts-list_active { 269 | background: #F8F8F8; 270 | } 271 | .ssc-resluts-list a { 272 | float: right; 273 | color: #0F3F94; 274 | } 275 | .ssc-resluts-list span { 276 | color: #0F3F94; 277 | } 278 | .ssc-resluts-list i { 279 | color: red; 280 | font-style: normal; 281 | } 282 | .ssc-resluts-doubling { 283 | line-height: 30px; 284 | margin-top: 10px; 285 | user-select: none; 286 | -webkit-user-select: none; 287 | -ms-user-select: none; 288 | -moz-user-select: none; 289 | } 290 | .ssc-resluts-doubling strong { 291 | color: red; 292 | } 293 | .ssc-resluts-doubling em { 294 | font-style: normal; 295 | display: none; 296 | color: red; 297 | } 298 | .ssc-resluts-doubling i { 299 | font-style: normal; 300 | font-size: 24px; 301 | line-height: 20px; 302 | border: 1px solid #CCC; 303 | text-align: center; 304 | width: 20px; 305 | display: inline-block; 306 | vertical-align: middle; 307 | font-weight: bold; 308 | cursor: pointer; 309 | } 310 | .ssc-resluts-doubling input { 311 | font-style: normal; 312 | font-size: 14px; 313 | line-height: 20px; 314 | border: 1px solid #CCC; 315 | text-align: center; 316 | width: 50px; 317 | height: 20px; 318 | font-weight: bold; 319 | display: inline-block; 320 | vertical-align: middle; 321 | margin: 0 -1px; 322 | } 323 | .ssc-resluts-doubling input:focus { 324 | outline: none; 325 | } 326 | .ssc-resluts-doubling a { 327 | float: right; 328 | color: #777; 329 | } 330 | 331 | .ssc-seperator { 332 | height: 30px; 333 | line-height: 30px; 334 | overflow: hidden; 335 | border: 1px solid #B7D5F7; 336 | background: #F3F9FF; 337 | padding: 0 40px; 338 | } 339 | .ssc-seperator span { 340 | float: right; 341 | color: #888 342 | } 343 | .ssc-seperator span i { 344 | font-style: normal; 345 | color: red; 346 | } 347 | .ssc-seperator input { 348 | margin-left: 20px; 349 | vertical-align: middle; 350 | } 351 | .ssc-seperator label { 352 | color: #0F3F94; 353 | margin-left: 3px; 354 | } 355 | 356 | .ssc-pursue { 357 | overflow: hidden; 358 | border-bottom: 1px solid #CCC; 359 | } 360 | 361 | .ssc-pursue-title { 362 | display: inline-block; 363 | width: 60px; 364 | height: 270px; 365 | line-height: 270px; 366 | text-align: center; 367 | vertical-align: middle; 368 | color: #888; 369 | background: #F5F5F5; 370 | *display: inline; 371 | *float: left; 372 | } 373 | .ssc-pursue-content { 374 | display: inline-block; 375 | vertical-align: top; 376 | padding: 15px; 377 | } 378 | .CPC_choose { 379 | 380 | } 381 | .CPC_choose a { 382 | display: inline-block; 383 | width: 28px; 384 | text-align: center; 385 | border: 1px solid #CFCFCF; 386 | background: #F4F4F4; 387 | color: #0F3F94; 388 | height: 18px; 389 | line-height: 18px; 390 | margin-right: 8px; 391 | font-size: 12px; 392 | } 393 | .CPC_choose a:hover , a.CPC_choose_on { 394 | border-color: #3C7EC8; 395 | background: #3C7EC8; 396 | text-decoration: none; 397 | color: #FFF; 398 | } 399 | .CPC_choose_box { 400 | border: 1px solid #7F9DB9; 401 | width: 560px; 402 | height: 200px; 403 | margin-top: 10px; 404 | } 405 | .ssc-comfirm p { 406 | line-height: 30px; 407 | } 408 | .ssc-comfirm p span { 409 | color: red; 410 | } 411 | .ssc-comfirm-btn { 412 | display: inline-block; 413 | font-size: 20px; 414 | line-height: 30px; 415 | padding: 6px 20px; 416 | text-align: center; 417 | background: #CE2A2A; 418 | color: #FFF; 419 | margin: 0 20px 20px 0; 420 | float: right; 421 | box-shadow: 3px 3px 5px #CCC; 422 | border-radius: 8px; 423 | } 424 | .ssc-comfirm-btn:hover { 425 | background: red; 426 | color: #EEE; 427 | } 428 | .ssc-comfirm-title { 429 | height: 240px; 430 | line-height: 240px; 431 | } 432 | 433 | .CPC_table_header { 434 | background: #F3F9FF; 435 | line-height: 32px; 436 | } 437 | 438 | .CPC_table_header strong, .CPC_table_body span { 439 | font-weight: normal; 440 | display: inline-block; 441 | margin-left: 10px; 442 | } 443 | .CPC_table_header input { 444 | width: 40px; 445 | vertical-align: middle; 446 | } 447 | .CPC_choose_box table td input { 448 | vertical-align: middle; 449 | } 450 | .CPC_choose_box table td input[type=text] { 451 | width: 40px; 452 | } 453 | .CPC_choose_box table{ 454 | border:0; 455 | position: relative; 456 | } 457 | .CPC_choose_box table th{ 458 | font-size: 12px; 459 | border:0; 460 | text-align: center; 461 | 462 | } 463 | .CPC_choose_box table td{ 464 | border:0; 465 | text-align: center; 466 | font-size: 12px; 467 | } 468 | .CPC_choose_box table{ 469 | 470 | } -------------------------------------------------------------------------------- /js/main-500.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @author Barret Lee(barret.china@gmail.com) 3 | * @date 2014/07 4 | */ 5 | 6 | 7 | // 默认关闭 debug 模式 8 | var debug = false; 9 | 10 | // 关闭 debug 后,这里的 log 就不能用了 11 | var log = function(msg){ 12 | if(!debug) return; 13 | console && console.log(msg); 14 | }; 15 | 16 | // 选法的配置,x 选 x 17 | var config = { 18 | "totalNum": 11, 19 | "selectNum": 5 20 | }; 21 | 22 | 23 | /** 24 | * @description Cathectic为投注实现的一个类 25 | * 26 | */ 27 | var Cathectic = function(){ 28 | // 当前选球的个数 29 | var curNum = 1; 30 | // 当前选球方式,默认为“定位” 31 | var chooseType = "dingwei"; 32 | 33 | /** 34 | * @description 构造 select 模板的自执行函数 35 | * @param {Number} config['totalNum'] 选择的最大个数 36 | * @return {String} 返回拼接好的字符串 37 | */ 38 | var chooseTpl = function(N){ 39 | var str = [ 40 | '
', 41 | '选择号码遗漏' 42 | ]; 43 | 44 | for(var i = 1; i <= N; i++){ 45 | str.push("" + i + "8"); 46 | } 47 | 48 | str = str.concat([ 49 | '', 50 | '
' 51 | ]); 52 | return str.join("\n\t"); 53 | }(config['totalNum']); 54 | 55 | 56 | // 选择球的一个字典,后续用于对应相关的函数 57 | var selectOpts = { 58 | "all": "全部", 59 | "big": "大", 60 | "small": "小", 61 | "odd": "偶数", 62 | "even": "奇数" 63 | }; 64 | // 当前选中的 input[type=radio] 的 id 65 | var curId = "CTC_1_1"; 66 | // 中奖的金额,默认是直选一中奖奖金,为 13 67 | var basic = 13; 68 | // 一个二维数组,记录多行选中的球的数字 69 | var curRes = []; 70 | // 当前倍率 71 | var curDoubling = 1; 72 | 73 | return { 74 | /** 75 | * 初始化函数,该种写法有利于分离功能块,让层次更加清晰 76 | */ 77 | init: function(){ 78 | this.errorHandler(); 79 | this.numSelector(); 80 | this.bindResultBox(); 81 | this.bindSelector(); 82 | }, 83 | /** 84 | * 获取当前的选球数 85 | */ 86 | getCurNum: function(){ 87 | return curNum; 88 | }, 89 | /** 90 | * 获取当前选球的方式 91 | */ 92 | chooseType: function(){ 93 | return chooseType; 94 | }, 95 | /** 96 | * 获取当前倍率 97 | */ 98 | getCurDoubling: function(){ 99 | return curDoubling; 100 | }, 101 | /** 102 | * 获取当前选择的球号 103 | */ 104 | getCurRes: function(){ 105 | return curRes; 106 | }, 107 | /** 108 | * 获取当前的 input[type=radio] 的 ID 109 | */ 110 | getCurId: function(){ 111 | return curId; 112 | }, 113 | /** 114 | * 顶部 tab 的一个绑定,用于处理各种情况的数据切换 115 | */ 116 | numSelector: function(){ 117 | var self = this; 118 | 119 | $(".cathectic-num a").on("click", function(evt){ 120 | evt.preventDefault(); 121 | 122 | var $this = $(this), 123 | index = $this.index(); 124 | 125 | // 记录当前选择的球数 126 | curNum = index + 1; 127 | 128 | // 修改状态 129 | $(".cathectic-num a").removeClass("cathectic-num_on"); 130 | $this.addClass("cathectic-num_on"); 131 | 132 | // 初始化 133 | $(".cathectic-type").hide() 134 | .eq(index).show() 135 | .find("input[type=radio]") 136 | .eq(0).trigger("change") 137 | .get(0).checked = "checked"; 138 | 139 | $(".cathectic-type").eq(index) 140 | .find(".cathectic-tip").hide() 141 | .eq(0).show(); 142 | 143 | self._setMoney(); 144 | self.resetDOM(); 145 | }).eq(0).trigger("click"); 146 | 147 | $(".cathectic-type-choose input[type=radio]").on("change", function(){ 148 | var $this = $(this), 149 | id = $this.attr('id'), 150 | index = id.slice(-1); 151 | 152 | // 记录了当前 input[type=radio] 的 ID 153 | curId = id; 154 | 155 | // 拿到当前中奖的金额值 156 | basic = $this.parents(".cathectic-type") 157 | .find(".cathectic-tip").hide() 158 | .eq(index - 1).show().find("span").last().text(); 159 | 160 | // 投注方式 bool / text 161 | if(/3_2|5_3/.test(id)){ 162 | $(".cathectic-main-choose").hide(); 163 | $(".cathectic-main-choose-text").show(); 164 | $(".CSR_get").hide(); 165 | chooseType = "text"; 166 | } else { 167 | $(".cathectic-main-choose").show(); 168 | $(".cathectic-main-choose-text").hide(); 169 | $(".CSR_get").show(); 170 | } 171 | 172 | if(/(1|2|3)_1/.test(id)){ 173 | chooseType = "dingwei"; // 定位 174 | self._showItemList(RegExp.$1); 175 | } 176 | if(/2_2|2_4|3_3|3_5|(4|5|6|7|8)_1/.test(id)) { 177 | chooseType = "normal"; // 普通 178 | self._showItemList(1); 179 | } 180 | if(/2_3|2_5|3_4|3_6|(4|5|6|7|8)_2/.test(id)) { 181 | chooseType = "dantuo"; // 胆拖 182 | self._showItemList(2, true); 183 | } 184 | 185 | self._setMoney(); 186 | self.resetDOM(); 187 | 188 | }).eq(0).trigger("change"); 189 | }, 190 | /** 191 | * @description 不同的定位方式,球的行数不一样,左侧的文案也不一样, 192 | * 这个函数用于处理文案和行数 193 | * @param {Number} num 行数 194 | * @param {Boolean} tag 标记是否为胆拖投注 195 | */ 196 | _showItemList: function(num, tag){ 197 | var table, str = "", i = 0, self = this; 198 | 199 | if(num == 1){ 200 | table = ['选择号码']; 201 | }else if(num == 2 && !!tag == true){ 202 | table = ['胆码', '拖码']; 203 | }else{ 204 | table = ['第一个','第二个','第三个']; 205 | } 206 | 207 | for(; i < num; i++) { 208 | 209 | str += chooseTpl.replace(/选择号码/, function(m){ 210 | return table[i]; 211 | }).replace(/"]; 240 | 241 | for(var i = num; i <= config['totalNum'] - 1; i++){ 242 | arr.push(""); 243 | } 244 | 245 | for(i in selectOpts){ 246 | arr.push(""); 247 | } 248 | arr.push(""); 249 | 250 | return arr.join(""); 251 | }, 252 | /** 253 | * @description 选择球的绑定函数 254 | */ 255 | _bindSelect: function(){ 256 | var total = config['totalNum']; 257 | var half = total%2 == 1 ? Math.ceil(total / 2) : total / 2 + 1; 258 | // 映射前面提到的字典 selectOpts,每个单词对应一个函数, 259 | // 用于操作球的选中状态 260 | var funcPool = { 261 | "all": function(index, me){ 262 | $(me).addClass("cathectic-selector-item_on"); 263 | }, 264 | "big": function(index, me){ 265 | index + 1 >= half 266 | && $(me).addClass("cathectic-selector-item_on"); 267 | }, 268 | "small": function(index, me){ 269 | index + 1 < half 270 | && $(me).addClass("cathectic-selector-item_on"); 271 | }, 272 | "odd": function(index, me){ 273 | (index + 1) % 2 == 0 274 | && $(me).addClass("cathectic-selector-item_on"); 275 | }, 276 | "even": function(index, me){ 277 | (index + 1) % 2 == 1 278 | && $(me).addClass("cathectic-selector-item_on"); 279 | }, 280 | "other": function(index, me){ 281 | $.inArray(index + 1, rnum) > -1 282 | && $(me).addClass("cathectic-selector-item_on"); 283 | } 284 | }; 285 | 286 | var rnum, self = this; 287 | 288 | // 当 select 的值发生变化的时候,修改球的选中状态 289 | $(".cathectic-selector-item select").off().on("change", function(){ 290 | var $this = $(this), 291 | val = $this.val(); 292 | 293 | var cb = /\d/.test(val) ? funcPool["other"] : funcPool[val]; 294 | 295 | var except = []; 296 | 297 | $(".cathectic-selector-item") 298 | .eq(0).find(".cathectic-selector-item_on") 299 | .map(function(index, me){ 300 | except.push(Number($(me).text())); 301 | }); 302 | 303 | 304 | var total = config['totalNum']; 305 | 306 | // 对胆拖投注的特殊处理,随机选择多个球 307 | if(chooseType == "dantuo" && except.length > 0){ 308 | val = val > total - except.length ? total - except.length : val; 309 | rnum = Cathectic.util.getSomeRandom(val, except); 310 | } else { 311 | rnum = Cathectic.util.getSomeRandom(val); 312 | } 313 | $this.parents(".cathectic-selector-item") 314 | .find("span strong") 315 | .removeClass("cathectic-selector-item_on").map(cb); 316 | 317 | self._setMoney(); 318 | 319 | }); 320 | 321 | $(".cathectic-selector-item strong").off().on("click", function(){ 322 | var $obj = $(this).parents(".cathectic-selector-item"); 323 | 324 | // 胆拖的处理,控制球数 325 | if(chooseType == "dantuo" && $obj.index() == 0 326 | && !$(this).hasClass("cathectic-selector-item_on") 327 | && $obj.eq(0).find(".cathectic-selector-item_on").size() == curNum - 1 ){ 328 | 329 | self.alertBox("您好, 胆码的选择个数不能超过"+(curNum - 1)+"个!") 330 | return; 331 | } 332 | var text = $(this).text(); 333 | if(chooseType == "dantuo"){ 334 | $obj.siblings().find(".cathectic-selector-item_on").map(function(index, me){ 335 | $(me).text() == text 336 | && $(me).removeClass("cathectic-selector-item_on"); 337 | }); 338 | } 339 | $(this).toggleClass("cathectic-selector-item_on"); 340 | self._setMoney(); 341 | }); 342 | }, 343 | 344 | /** 345 | * @description 核心算法,计算注数 346 | * @return {Number} 注数 347 | */ 348 | _calcMoney: function(){ 349 | var res = []; 350 | $(".cathectic-selector-item").each(function(){ 351 | var arr = []; 352 | $(this).find(".cathectic-selector-item_on").map(function(index, me){ 353 | arr.push($(me).text()); 354 | }); 355 | res.push(arr); 356 | }); 357 | 358 | curRes = res; 359 | 360 | // 定位投注 361 | if(chooseType == "dingwei"){ 362 | if(curNum == 1){ 363 | return res[0].length; 364 | } 365 | if(curNum == 2){ 366 | var a = res[0].length, b = res[1].length; 367 | if( a * b > 0){ 368 | return a * b - (a + b - $.unique(res[0].concat(res[1]).sort()).length); 369 | } 370 | } 371 | if(curNum == 3){ 372 | var a = res[0].length, b = res[1].length, c = res[2].length; 373 | 374 | var ab = a+b-$.unique(res[0].concat(res[1]).sort()).length; 375 | var ac = a+c-$.unique(res[0].concat(res[2]).sort()).length; 376 | var bc = b+c-$.unique(res[1].concat(res[2]).sort()).length; 377 | 378 | var abc = 0; 379 | var inter = Cathectic.util.arrayIntersection(res[0], res[1]); 380 | if(inter.length > 0){ 381 | abc = inter.length + c - $.unique(inter.concat(res[2]).sort()).length 382 | } 383 | // 只是改变[选好了]这个按钮的状态,这里做判断 384 | if(a * b * c > 0 && $.unique(res[0].concat(res[1]).concat(res[2]).sort()).length >= 3 && 385 | !((a == b && b == abc || a == c && c == abc || b == c && c == abc) && abc == 1) 386 | || (a == b && a == c && b == c && abc >= 3)){ 387 | return a*b*c - ab*c - ac*b - bc*a + abc * 2; 388 | } 389 | } 390 | } 391 | // 胆拖 392 | if(chooseType == "dantuo"){ 393 | if(res[0].length >= 1 && res[0].length + res[1].length > curNum){ 394 | 395 | return this.permutation(res[1].length, curNum - res[0].length); 396 | } 397 | } 398 | // 普通 399 | if(chooseType == "normal"){ 400 | if(res[0].length < curNum) return; 401 | 402 | return this.permutation(res[0].length, curNum); 403 | } 404 | // 单式上传 405 | if(chooseType == "text") { 406 | var tmp = []; 407 | $.map($(".cathectic-main-choose-text textarea").val().split(/\n/m), function(val){ 408 | if(val != "") tmp.push(val); 409 | }); 410 | return tmp.length; 411 | } 412 | }, 413 | // 处理单式上传 414 | _dealText: function(){ 415 | var val = $(".cathectic-main-choose-text textarea").val().split(/\n/m), 416 | arrText = [], self = this; 417 | 418 | for(var i = 0; i < val.length; i++){ 419 | if($.trim(val[i]) == "") continue; 420 | 421 | var arrTmp = val[i].split(/\s+|,/); 422 | var hashTable = {"length": 0}; 423 | 424 | // 输入数值错误,数值区间应该是 1 - totalNum 425 | for(var j = 0; j < arrTmp.length; j++){ 426 | var valTmp = parseInt(arrTmp[j]); 427 | if(valTmp > config['totalNum'] || valTmp <= 0){ 428 | self.alertBox("您好,您输入的第" + (i + 1) + "行的格式有误 [输入数值错误,数值区间应该是 1 - "+ 429 | config["totalNum"] +"] ,请检查!"); 430 | return false; 431 | } 432 | if(hashTable[arrTmp[j]] == null){ 433 | hashTable[arrTmp[j]] = 1; 434 | hashTable.length += 1; 435 | } 436 | } 437 | 438 | // 个数错误,应该是 curNum 个 439 | if(arrTmp.length != curNum){ 440 | self.alertBox("您好,您输入的第" + (i + 1) + "行的格式有误 [个数错误,应该是" + 441 | curNum + "个] ,请检查!"); 442 | return false; 443 | } 444 | // 存在重复 445 | if(hashTable.length < arrTmp.length){ 446 | self.alertBox("您好,您输入的第" + (i + 1) + "行的格式有误 [存在重复] ,请检查!"); 447 | // console.log(hashTable); 448 | return false; 449 | } 450 | } 451 | 452 | $.map(val, function(ctt){ 453 | if($.trim(ctt) != "") { 454 | curRes = [ctt.replace(/\s+|,/g, ",").split(",")]; 455 | 456 | var str = self._getItemTpl(); 457 | $(".cathectic-resluts-list").append(str); 458 | } 459 | }); 460 | 461 | self._updateTotalMoney(); 462 | self.resetDOM(); 463 | 464 | var $num = $(".CSR_info span").eq(0), 465 | $money = $(".CSR_info span").eq(1) 466 | 467 | $(".CSR_btn").off().removeClass("CSR_btn_OK"); 468 | $num.text(0); 469 | $money.text("0.00"); 470 | }, 471 | /** 472 | * @description 主要是对 DOM 的操作,修改一些数字。显示当前的一些参数 473 | * 474 | */ 475 | _setMoney: function(){ 476 | var res = this._calcMoney() 477 | , $num = $(".CSR_info span").eq(0) 478 | , $money = $(".CSR_info span").eq(1) 479 | , $win = $(".CSR_get span").eq(0) 480 | , $get = $(".CSR_get span").eq(1); 481 | 482 | var self = this; 483 | 484 | if(!res || chooseType == "text" && $(".cathectic-main-choose-text textarea").val() == ""){ 485 | $(".CSR_btn").off().removeClass("CSR_btn_OK"); 486 | $num.text(0); 487 | $money.text("0.00"); 488 | } else { 489 | // if(chooseType == "text" && $(".cathectic-main-choose-text textarea").val() == ""){ 490 | // return; 491 | // } 492 | var CSRBtnCB = null; 493 | // 单次绑定,点击选好了之后,不能再点击,并且清空选中内容 494 | $(".CSR_btn").off("click").addClass("CSR_btn_OK").one("click", CSRBtnCB = function(evt){ 495 | evt.preventDefault(); 496 | 497 | if(chooseType == "text"){ 498 | self._dealText(); 499 | return; 500 | } 501 | 502 | var str = self._getItemTpl(); 503 | var tmp = self._checkIsUse(); 504 | 505 | if(tmp.length > 0 && chooseType == "dingwei"){ 506 | if(!confirm("无效信息将会被剔除:\n" + tmp.join("\n") 507 | + "\n点击确定,剔除信息并投注.")){ 508 | 509 | $(".CSR_btn").one("click", CSRBtnCB); 510 | 511 | return; 512 | } else { 513 | $(".cathectic-resluts-list").append(str); 514 | self._updateTotalMoney(); 515 | self.resetBtn(); 516 | } 517 | } else { 518 | $(".cathectic-resluts-list").append(str); 519 | self._updateTotalMoney(); 520 | self.resetBtn(); 521 | } 522 | 523 | }); 524 | $num.text(res); 525 | $money.text(res * 2 + ".00"); 526 | 527 | var selectNum = config['selectNum']; 528 | 529 | // 修改数据 530 | if(chooseType == "normal"){ 531 | var doubling = 1; 532 | if(curNum >= selectNum + 1){ 533 | doubling = this.permutation(curRes[0].length - 5, curNum - 5); 534 | } 535 | $win.text(basic * doubling); 536 | } 537 | if(chooseType == "dingwei"){ 538 | $win.text(basic); 539 | } 540 | if(chooseType == "dantuo"){ 541 | var doubling = 1, len; 542 | 543 | len = $.unique(curRes[0].concat(curRes[1]).sort()).length; 544 | if(curNum >= selectNum + 1){ 545 | doubling = this.permutation(len - 5, curNum - 5); 546 | } 547 | $win.text(basic); 548 | } 549 | 550 | $get.text(parseInt($win.text().replace(",","")) - parseInt($money.text()) + ".00"); 551 | } 552 | }, 553 | 554 | // 重置 button 的状态,并修改文案(数字) 555 | resetBtn: function(){ 556 | $(".CSR_btn").removeClass("CSR_btn_OK"); 557 | $(".cathectic-selector-item_on").removeClass("cathectic-selector-item_on"); 558 | this.resetDOM(); 559 | }, 560 | 561 | /** 562 | * @description 点击选好了之后,下面的 box 会添加一个记录, 563 | * 本函数是用来创建一个模板 564 | * @param [Object] 传过来需要记录的信息 565 | * @return {String} 模板字符串 566 | */ 567 | _getItemTpl: function(data){ 568 | var tpl = ['
', 569 | '删除', 570 | '[<%type%>]', 571 | '<%content%>', 572 | '(<%num%><%money%>元)', 573 | '
'].join(""); 574 | 575 | var content = " "; 576 | if(chooseType == "dantuo"){ 577 | content = " 胆:"; 578 | content += curRes[0].join(","); 579 | content += " 拖:"; 580 | content += curRes[1].join(","); 581 | } 582 | if(chooseType == "dingwei"){ 583 | var tmp = []; 584 | for(var i = 0, len = curRes.length; i < len; i++){ 585 | tmp.push(curRes[i].join(",")); 586 | } 587 | 588 | content += tmp.join("|") + Cathectic.util.repeat("|-", 5 - curNum); 589 | } 590 | if(chooseType == "normal" || chooseType == "text"){ 591 | content += curRes[0].join(","); 592 | } 593 | 594 | // 模板数据 595 | var data = $.extend({ 596 | "num": $(".CSR_info span").eq(0).text(), 597 | "money": $(".CSR_info span").eq(1).text(), 598 | 'type': $("#" + curId).attr("data-type"), 599 | "content": content + " " 600 | }, data || {}); 601 | 602 | // 替换内容的模板 603 | return tpl.replace(/<%([^%>]+)?%>/g, function(m, a){ 604 | return data[a]; 605 | }); 606 | 607 | // return Cathectic.util.tplEngine(tpl, data); 608 | }, 609 | 610 | // 一些数字文案的还原处理 611 | resetDOM: function(){ 612 | if(chooseType == "dingwei" || chooseType == "normal"){ 613 | $(".CSR_select").show(); 614 | } else { 615 | $(".CSR_select").hide(); 616 | } 617 | 618 | $(".CSR_get span").eq(0).text("0"); 619 | $(".CSR_get span").eq(1).text("0.00"); 620 | $(".CSR_info span").eq(0).text("0"); 621 | $(".CSR_info span").eq(1).text("0.00"); 622 | 623 | $(".cathectic-main-choose-text textarea").val(""); 624 | }, 625 | 626 | // 计算排列数值 627 | permutation: function(a, b){ 628 | var resX = 1, resY = 1, tmp = b; 629 | while(tmp){ 630 | resX *= a; 631 | a--;tmp--; 632 | } 633 | while(b){ 634 | resY *= b; 635 | b--; 636 | } 637 | return resX / resY; 638 | }, 639 | // 该函数可扩展,弹出提醒 640 | alertBox: function(msg){ 641 | alert(msg); 642 | }, 643 | 644 | /** 645 | * @description 在选好了附近和下方有很多可以点击的按钮和链接, 646 | * 这个函数内部主要是对上述按钮、链接做绑定 647 | */ 648 | bindResultBox: function(){ 649 | var self = this; 650 | 651 | $(".CSR_clear").on("click", function(evt){ 652 | evt.preventDefault(); 653 | 654 | $(".cathectic-selector-item_on").removeClass("cathectic-selector-item_on"); 655 | 656 | $(".CSR_get span").eq(0).text("0"); 657 | $(".CSR_get span").eq(1).text("0.00"); 658 | 659 | self._setMoney(); 660 | 661 | }); 662 | 663 | var keydownTimer = null 664 | $(".cathectic-main-choose-text textarea").on("keydown", function(){ 665 | clearTimeout(keydownTimer); 666 | setTimeout(function(){ 667 | self._setMoney(); 668 | }, 100); 669 | }); 670 | 671 | $(".cathectic-resluts-list").on("click", "a", function(evt){ 672 | evt.preventDefault(); 673 | 674 | $(this).parent().remove(); 675 | self._updateTotalMoney(); 676 | }); 677 | 678 | $(".cathectic-resluts-list").on("click", "div", function(evt){ 679 | evt.preventDefault(); 680 | 681 | $(this).addClass("cathectic-resluts-list_active") 682 | .siblings().removeClass("cathectic-resluts-list_active"); 683 | }); 684 | 685 | $(".cathectic-resluts-doubling a").on("click", function(evt){ 686 | evt.preventDefault(); 687 | 688 | $(".cathectic-resluts-list").html(""); 689 | self._updateTotalMoney(); 690 | }); 691 | 692 | $(".cathectic-resluts-doubling i").on("click", function(){ 693 | var index = $(this).index(); 694 | var $val = $("#doubling"); 695 | 696 | var val = Number($val.val()); 697 | if(index == 0){ 698 | $val.val( val - 1 > 0 ? val - 1 : 1); 699 | } else { 700 | $val.val(val + 1); 701 | } 702 | 703 | curDoubling = $val.val(); 704 | $(".cathectic-resluts-doubling input").trigger("change"); 705 | }); 706 | 707 | $(".cathectic-resluts-doubling input").on("change keydown blur", function(){ 708 | self._updateTotalMoney($(this).val()); 709 | }); 710 | }, 711 | // 更新注数和钱数 712 | _updateTotalMoney: function(N){ 713 | var $num = $(".cathectic-resluts-doubling strong").eq(0); 714 | var $money = $(".cathectic-resluts-doubling strong").eq(1); 715 | 716 | var total = 0; 717 | $(".cathectic-resluts-list > div").map(function(index, me){ 718 | total += Number($(me).attr("data-num")); 719 | }); 720 | 721 | var N = N || curDoubling; 722 | 723 | $num.text(total); 724 | $money.text(total * (N || 1) * 2 + ".00"); 725 | }, 726 | 727 | // 去重函数 728 | _checkIsUse: function(){ 729 | var err = [], a1, a2, a3; 730 | if(chooseType == "dingwei" && curNum == 3){ 731 | a1 = this._checkIsUseHelper(curRes[0], curRes[1], curRes[2]); 732 | a2 = this._checkIsUseHelper(curRes[1], curRes[2], curRes[0]); 733 | a3 = this._checkIsUseHelper(curRes[0], curRes[2], curRes[1]); 734 | err = err.concat(a1).concat(a2).concat(a3); 735 | } 736 | if(chooseType == "dingwei" && curNum == 2){ 737 | a1 = this._checkIsUseHelper(curRes[0], curRes[1]); 738 | a2 = this._checkIsUseHelper(curRes[1], curRes[0]); 739 | err = err.concat(a1).concat(a2); 740 | } 741 | return $.unique(err); 742 | }, 743 | // 辅助上述去重 744 | _checkIsUseHelper: function(a, b, c){ 745 | var res = []; 746 | var inter = Cathectic.util.arrayIntersection(a, b); 747 | if(inter.length > 0){ 748 | for(var i = 0; i < inter.length; i++){ 749 | if(curNum == 3){ 750 | res.push([inter[i],inter[i], c.join(",")].join("|")); 751 | } else { 752 | res.push([inter[i],inter[i]].join("|")); 753 | } 754 | } 755 | } 756 | return res; 757 | }, 758 | // 错误处理 759 | errorHandler: function(){ 760 | window.onerror = function(info){ 761 | if(/^script error.$/i.test(info)){ 762 | return true; 763 | } 764 | return true; 765 | } 766 | }, 767 | // 选择多注的 select 绑定 768 | bindSelector: function(){ 769 | var self = this; 770 | 771 | $(".CSR_select").on("change", function(){ 772 | var val = +$(this).val(); 773 | if(val == 0) return; 774 | 775 | for(var s = 0; s < val; s++){ 776 | 777 | var tmp = []; 778 | curRes = []; 779 | 780 | if(chooseType == "dingwei"){ 781 | for(var i = 0; i < curNum; i++){ 782 | var ls = Cathectic.util.getRandom(tmp); 783 | tmp.concat(ls); 784 | curRes.push([ls]); 785 | } 786 | } 787 | if(chooseType == "normal"){ 788 | curRes.push(Cathectic.util.getSomeRandom(curNum)); 789 | } 790 | 791 | // console.log(curRes ,self._calcMoney()); 792 | 793 | var str = self._getItemTpl({ 794 | "num": 1, 795 | "money": "2.00", 796 | 'type': $("#" + curId).attr("data-type") 797 | }); 798 | 799 | $(".cathectic-resluts-list").append(str); 800 | } 801 | 802 | 803 | self._updateTotalMoney(); 804 | $(".cathectic-resluts-list").scrollTop($(".cathectic-resluts-list").children().size()*24); 805 | }); 806 | } 807 | } 808 | }(); 809 | 810 | 811 | /** 812 | * @description 对Cathectic类的扩展,添加辅助工具 813 | * @method getRandom 获取随机数 814 | * @method getSomeRandom 获取多个随机数 815 | * @method tplEngine 模板引擎 816 | * @method repeat 字符串重复 817 | * @method arrayIntersection 数组交集 818 | */ 819 | Cathectic.util = function(){ 820 | 821 | return { 822 | /** 823 | * @description 获取随机数 824 | * @param [Array] except 剔除的数 825 | * @return [Array] 返回一个数组 826 | */ 827 | getRandom: function(except){ 828 | 829 | var total = config['totalNum']; 830 | 831 | if(!except || except.length == 0){ 832 | return Math.floor(Math.random()*total)+1; 833 | } 834 | 835 | var res, tag = true; 836 | while(1 && tag){ 837 | res = Math.floor(Math.random()*total)+1; 838 | ($.inArray(res, except) == -1) && (tag = false); 839 | } 840 | return res == total + 1 ? res - 1 : res; 841 | }, 842 | /** 843 | * @description 获取随机数 844 | * @param [Number] num 个数 845 | * @param [Array] except 获取多个随机数 846 | * @return [Array] 返回一个数组 847 | */ 848 | getSomeRandom: function(num, except){ 849 | var res = [], args; 850 | 851 | while(num--){ 852 | if(except && res.length == 0){ 853 | args = except; 854 | } else { 855 | args = $.unique((except || []).concat(res).sort()); 856 | } 857 | var tmp = this.getRandom(args); 858 | res.push(tmp); 859 | } 860 | 861 | return res.sort(function(a, b){return a > b}); 862 | }, 863 | // 模板引擎,详情可以异步我写的一篇博客 864 | // http://www.cnblogs.com/hustskyking/p/principle-of-javascript-template.html 865 | tplEngine: function(tpl, data) { 866 | var reg = /<%([^%>]+)?%>/g, 867 | regOut = /(^( )?(if|for|else|switch|case|break|{|}))(.*)?/g, 868 | code = 'var r=[];\n', 869 | cursor = 0; 870 | 871 | var add = function(line, js) { 872 | js? (code += line.match(regOut) ? line + '\n' : 'r.push(' + line + ');\n') : 873 | (code += line != '' ? 'r.push("' + line.replace(/"/g, '\\"') + '");\n' : ''); 874 | return add; 875 | } 876 | while(match = reg.exec(tpl)) { 877 | add(tpl.slice(cursor, match.index))(match[1], true); 878 | cursor = match.index + match[0].length; 879 | } 880 | add(tpl.substr(cursor, tpl.length - cursor)); 881 | code += 'return r.join("");'; 882 | return new Function(code.replace(/[\r\t\n]/g, '')).apply(data); 883 | }, 884 | 885 | // 简单易懂,不多说 886 | repeat: function(str, N){ 887 | var res = "" 888 | while(N--){ 889 | res += str; 890 | } 891 | return res; 892 | }, 893 | /** 894 | * @description 数据去重 895 | * @param {Array} a 要比较的数组 896 | * @param {Array} b 要比较的数组 897 | * @return {Array} a 和 b 的交集 898 | */ 899 | arrayIntersection: function (a, b) { 900 | var ai = 0, bi = 0; 901 | var result = new Array(); 902 | 903 | while( ai < a.length && bi < b.length ){ 904 | if (a[ai] < b[bi] ){ 905 | ai++; 906 | } else if (a[ai] > b[bi] ){ 907 | bi++; 908 | } else { 909 | result.push(a[ai]); 910 | ai++; 911 | bi++; 912 | } 913 | } 914 | return result; 915 | } 916 | } 917 | }(); 918 | 919 | // 整个函数启动的入口,调用 Cathectic 的初始化函数。 920 | $(function(){ 921 | Cathectic.init(); 922 | }); -------------------------------------------------------------------------------- /js/main.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @author Barret Lee(barret.china@gmail.com) 3 | * @date 2014/08 4 | * 5 | * MIT LICENSE 6 | */ 7 | 8 | ;(function(window, undefined){ 9 | 10 | var curNum = 1 // 当前选择的球的个数 11 | , curDoubling = 1 // 当前的倍率 12 | , curRes = [] // 当前选中的所有球 13 | , curType = "standard" // 当前算法方式 14 | , curFullName = "一星" // 当前的玩法名字 15 | , curId = "SSC_1_1" // 当前选中的 input 位置 16 | , CHECK_PASS = 1 // 状态检测 OK, 投注的 button 可以点击 17 | , CHECK_UNPASS = -1 // 状态检测不通过,投注的 button 不可以点击 18 | , textMsg = "" // curType 为 Text 时,错误信息(不会显示,可作为强检测) 19 | 20 | // 设置倍率最大值 21 | , MAX_DOUBLING = $(".ssc-resluts-doubling em b").text() || 1000 22 | 23 | // 引入进来,减少作用域链的查询,达到优化程序的作用 24 | , ConfigParam = window.ConfigParam 25 | , ConfigDOM = window.ConfigDOM 26 | , ConfigClose = window.ConfigClose || [] 27 | 28 | // 和值中需要用到的两个常量 29 | , TABLE_2 = (function(){ 30 | var table2 = [] 31 | , tableHash2 = {}; 32 | 33 | for(var i = 0; i < ConfigParam['total']; i++){ 34 | for(var j = i; j < ConfigParam['total']; j++){ 35 | table2.push(i + j); 36 | } 37 | } 38 | 39 | 40 | for(i = 0; i < table2.length; i++){ 41 | if(!!!tableHash2[table2[i]]){ 42 | tableHash2[table2[i]] = 1; 43 | } else { 44 | tableHash2[table2[i]] += 1; 45 | } 46 | } 47 | 48 | return tableHash2; 49 | })() 50 | , TABLE_3_1 = {0:1,1:3,2:6,3:10,4:15,5:21,6:28,7:36,8:45,9:55,10:63,11:69,12:73,13:75, 51 | 14:75,15:73,16:69,17:63,18:55,19:45,20:36,21:28,22:21,23:15,24:10,25:6,26:3,27:1} 52 | , TABLE_3_2 = {1:1,2:2,3:1,4:3,5:3,6:3,7:4,8:5,9:4,10:5,11:5,12:4,13:5, 53 | 14:5,15:4,16:5,17:5,18:4,19:5,20:4,21:3,22:3,23:3,24:1,25:2,26:1} 54 | , TABLE_3_3 = {3:1,4:1,5:2,6:3,7:4,8:5,9:7,10:8,11:9,12:10,13:10, 55 | 14:10,15:10,16:9,17:8,18:7,19:5,20:4,21:3,22:2,23:1,24:1}; 56 | 57 | 58 | //=========================================================== SSC ==// 59 | 60 | /** 61 | * SSC Class 62 | * 时时彩代码类,封装时时彩所需的各种函数 63 | * 64 | * @param {String|Object} con container 65 | */ 66 | var SSC = window.SSC = function(con){ 67 | this.init(con); 68 | }; 69 | 70 | $.extend(SSC.prototype, { 71 | init: function(con){ 72 | // container 73 | this.$con = $(con).size() > 0 ? $(con) : $("#ssc"); 74 | // 初始化 Tab 75 | this.tabSwitch(); 76 | // 绑定点击 77 | this.bindUI(); 78 | // 绑定多选 selector 79 | this.bindMultiSelector(); 80 | 81 | //fix bug 82 | $("#doubling").val(1); 83 | }, 84 | getCurNum: function(){ 85 | return curNum; 86 | }, 87 | /** 88 | * @return {Number} 当前的倍率 89 | */ 90 | getCurDoubling: function(){ 91 | return Number(curDoubling); 92 | }, 93 | /** 94 | * @return {String} 当前算法方式 95 | */ 96 | getCurType: function(){ 97 | return curType; 98 | }, 99 | /** 100 | * @return {Array} 当前选中的所有球 101 | */ 102 | getCurRes: function(){ 103 | return curRes; 104 | }, 105 | /** 106 | * 手工录入,错误信息提示 107 | */ 108 | getTextMsg: function(){ 109 | return textMsg; 110 | }, 111 | /** 112 | * 玩法配置,关闭某些玩法,开始前的预处理 113 | */ 114 | preprocessor: function(pos){ 115 | if(pos.length == 0) return; 116 | 117 | var POSITION = []; 118 | for(var i = 0; i < pos.length; i++){ 119 | POSITION.push(pos[i].join()); 120 | } 121 | 122 | // 预处理配置文件 123 | for(var tab in ConfigDOM){ 124 | for(i = 0; i < ConfigDOM[tab].length; i++){ 125 | var sub = ConfigDOM[tab][i]; 126 | if(!!!sub["group"]){ 127 | if($.inArray(sub["pos"].join(), POSITION) > -1){ 128 | ConfigDOM[tab].splice(i, 1); 129 | i--; 130 | } 131 | } else { 132 | for(var j = 0; j < sub["data"].length; j++){ 133 | if($.inArray(sub["data"][j]["pos"].join(), POSITION) > -1){ 134 | ConfigDOM[tab][i]["data"].splice(j, 1); 135 | j--; 136 | } 137 | } 138 | } 139 | } 140 | } 141 | 142 | // 遍历数组是否为空 143 | for(var key in ConfigDOM){ 144 | if(ConfigDOM[key].length == 0){ 145 | delete ConfigDOM[key]; 146 | continue; 147 | } 148 | if(ConfigDOM[key][0]["data"]){ 149 | for(j = 0; j < ConfigDOM[key].length; j++){ 150 | if(ConfigDOM[key][j]["data"].length == 0){ 151 | ConfigDOM[key].splice(j, 1); 152 | j--; 153 | } 154 | } 155 | if(ConfigDOM[key].length == 0){ 156 | delete ConfigDOM[key]; 157 | } 158 | } 159 | } 160 | }, 161 | /** 162 | * [tabSwitch 绑定顶部的 Tab 和联动的 SubTab] 163 | */ 164 | tabSwitch: function(){ 165 | var self = this; 166 | 167 | // 预处理 168 | self.preprocessor(ConfigClose); 169 | 170 | // 插入顶部 Tab 171 | $(".ssc-num").html(DOMHelper.createTab()); 172 | 173 | // subTab bind 174 | self.$con.on("change", ".ssc-type input", function(){ 175 | self.$con.find(".ssc-tip").html("[玩法介绍]:" + $(this).attr("data-tip")); 176 | 177 | curId = $(this).attr("id"); 178 | curFullName = $(this).attr("data-type"); 179 | 180 | self.bollLinkage(); 181 | }); 182 | 183 | // 绑定顶部 Tab 的点击事件 184 | self.$con.on("click", ".ssc-num a", function(evt){ 185 | evt.preventDefault(); 186 | 187 | // 添加选中样式 188 | $(".ssc-num a").removeClass("ssc-num_on"); 189 | $(this).addClass("ssc-num_on"); 190 | 191 | var item = $(this).text(); 192 | 193 | /** 194 | * 联动的中间处理,设置各种 Cur 状态值 195 | */ 196 | self.setCurAttr(item); 197 | 198 | // 获取需要渲染的数据 199 | for(var key in ConfigDOM){ 200 | if(key === item){ 201 | item = ConfigDOM[key]; 202 | break; 203 | } 204 | } 205 | // 默认不存在分组 206 | var tplTag = 0; 207 | 208 | // 标记是否存在分组 209 | if(!!item[0].data) { 210 | tplTag = 1; 211 | } 212 | 213 | // 使用模板引擎生成 SubTab 214 | item = Utils.tplEngine(DOMHelper.createSubTab(tplTag), item); 215 | 216 | // 插入 SubTab 217 | $(".ssc-type").html(item).find("input") 218 | .eq(0).trigger("change") 219 | .get(0).checked = "checked"; 220 | 221 | }).find(".ssc-num a").eq(0).trigger("click"); 222 | 223 | }, 224 | 225 | /** 226 | * setCurAttr 根据 TAB 确定当前的球数 227 | * @param {String} text Tab中的文案 228 | */ 229 | setCurAttr: function(text){ 230 | // 设置当前球的个数 231 | var table = "一二三四五六七八九".split(""); 232 | 233 | if(text.match(new RegExp("(" + table.join("|") + ")"))){ 234 | // 球数设置 235 | curNum = $.inArray(RegExp.$1, table) + 1; 236 | } else { 237 | // 大小单双 238 | curNum = -1; 239 | } 240 | }, 241 | 242 | /** 243 | * bollLinkage 根据 SubTab 中的 id 属性来判断当前的算法 244 | * 并渲染各行球的展示 245 | */ 246 | bollLinkage: function(){ 247 | var self = this; 248 | 249 | if(/(1|2|3|4|5|6)_1|6_3/.test(curId)){ 250 | // 标准选号, 6_3为通选 251 | curType = "standard"; 252 | } 253 | if(/2_4|3_2|4_3|4_6/.test(curId)){ 254 | // 和值 255 | curType = "sum"; 256 | } 257 | if(/2_3|4_(2|5)/.test(curId)){ 258 | // 包号 259 | curType = "bh"; 260 | } 261 | if(/2_5|3_3|4_7/.test(curId)){ 262 | // 胆拖 263 | curType = "dt"; 264 | } 265 | if(/3_4/.test(curId)){ 266 | // 跨度 267 | curType = "kd"; 268 | } 269 | if(/2_(2|6)|3_5|4_(4|8)|6_(2|4)/.test(curId)){ 270 | // 手工录入 271 | curType = "text"; 272 | } 273 | if(/7_1/.test(curId)){ 274 | // 大小单双 275 | curType = "dxds"; 276 | } 277 | if(/(8|9)_1/.test(curId)){ 278 | // 任选一、二 279 | curType = "rx"; 280 | } 281 | 282 | // console.log(curType, curId); 283 | 284 | // 重置DOM 285 | $(".CSR_clear").trigger("click"); 286 | 287 | // 创建球区块 288 | var str = DOMHelper.createBollLine(); 289 | // 插入到 DOM 中 290 | $(".ssc-main-choose").html(str); 291 | 292 | // 绑定 selector 293 | self.bindUISelector(); 294 | 295 | // 三星组选特殊处理,第二行置灰,不可点击,并与第一行联动 296 | if(/4_1/.test(curId)){ 297 | // 去除十位机选 298 | $(".ssc-selector-item").eq(0).find("select, a").hide(); 299 | $(".ssc-selector-item").eq(1).find("select, a").hide(); 300 | 301 | $(".ssc-selector-item").eq(1).find("span strong").addClass("ssc-selector-item_gray") 302 | .off().on("click", function(evt){ 303 | evt.stopPropagation(); 304 | }); 305 | 306 | $(".ssc-selector-item").eq(0).find("span strong").on("click", function(){ 307 | var index = $(this).parents("span").index(); 308 | $(".ssc-selector-item").eq(1).find("span strong").eq(index - 1).toggleClass("ssc-selector-item_on"); 309 | }); 310 | } 311 | 312 | // 胆拖特殊处理,胆码数量不超过 curNum - 1 个,并且胆码和拖码不重复 313 | if(curType == "dt"){ 314 | $(".ssc-selector-item span strong").on("click", function(evt){ 315 | var $p = $(this).parents(".ssc-selector-item") 316 | , index = $p.index() 317 | , $sib = $p.siblings(".ssc-selector-item") 318 | , curObjIndex = $(this).parents("span").index(); 319 | 320 | if((index == 0) && !$(this).hasClass("ssc-selector-item_on") 321 | && $(".ssc-selector-item").eq(0).find(".ssc-selector-item_on").size() >= curNum - 1){ 322 | self.alertBox("亲,胆码数量不能超过 " + (curNum - 1) + " 个~"); 323 | 324 | evt.stopImmediatePropagation(); 325 | return; 326 | } 327 | 328 | $sib.find("span strong").eq(curObjIndex - 1).removeClass("ssc-selector-item_on"); 329 | 330 | }); 331 | } 332 | }, 333 | 334 | /** 335 | * UI 绑定中心,几乎所有的 DOM 绑定都在这里 336 | */ 337 | bindUI: function(){ 338 | var self = this; 339 | 340 | $(".ssc-resluts-doubling em b").text(MAX_DOUBLING); 341 | 342 | // 绑定球的点击 343 | $(".ssc-main-choose").on("click", "span strong", function(){ 344 | $(this).toggleClass("ssc-selector-item_on"); 345 | 346 | // 刷新当前状态 347 | self.refresh().init(); 348 | }); 349 | 350 | // 当 Text 内容发生变化的时候,刷新当前状态 351 | $(".ssc-main-choose-text textarea").on("change keyup focus propertychange", function(){ 352 | 353 | // 刷新当前状态 354 | self.refresh().init(); 355 | }); 356 | 357 | // 清空选择 358 | $(".CSR_clear").on("click", function(evt){ 359 | evt.preventDefault(); 360 | 361 | // 重置 362 | self.refresh().resetDom(); 363 | }); 364 | 365 | // 删除 366 | $(".ssc-resluts-list").on("click", "a", function(evt){ 367 | evt.preventDefault(); 368 | 369 | $(this).parent().hide(0, function(){ 370 | var $this = $(this); 371 | setTimeout(function(){ 372 | $this.remove(); 373 | self.refresh().setFinal(); 374 | }, 16); 375 | }); 376 | }); 377 | 378 | // 点击添加样式 379 | $(".ssc-resluts-list").on("click", "div", function(evt){ 380 | evt.preventDefault(); 381 | 382 | $(this).addClass("ssc-resluts-list_active") 383 | .siblings().removeClass("ssc-resluts-list_active"); 384 | }); 385 | 386 | // 点击清空内容 387 | $(".ssc-resluts-doubling a").on("click", function(evt){ 388 | evt.preventDefault(); 389 | 390 | $(".ssc-resluts-list").html(""); 391 | self.refresh().setFinal(); 392 | }); 393 | 394 | // 点击改变倍率 395 | $(".ssc-resluts-doubling i").on("click", function(){ 396 | var index = $(this).index(); 397 | var $val = $("#doubling"); 398 | 399 | var val = Number($val.val()); 400 | if(index == 0){ 401 | $val.val( val - 1 > 0 ? val - 1 : 1); 402 | } else { 403 | $val.val(val + 1); 404 | } 405 | 406 | curDoubling = $val.val(); 407 | $(".ssc-resluts-doubling input").triggerHandler("change"); 408 | }); 409 | 410 | // 倍率检测 411 | $(".ssc-resluts-doubling input").on("change keyup blur", function(){ 412 | if(!/^\d+$/.test($(this).val())){ 413 | $(this).val(curDoubling); 414 | return; 415 | } 416 | if(parseInt($(this).val()) >= MAX_DOUBLING){ 417 | $(".ssc-resluts-doubling em").show(); 418 | $(this).val(curDoubling); 419 | return; 420 | } else { 421 | $(".ssc-resluts-doubling em").hide(); 422 | } 423 | self.refresh().setFinal(); 424 | }); 425 | }, 426 | 427 | /** 428 | * 绑定 select 变化时的触发动作 429 | */ 430 | bindUISelector: function(){ 431 | var total = ConfigParam['total'] 432 | , half = total%2 == 1 ? Math.ceil(total / 2) - 1 : total / 2 433 | , rnum = [] 434 | , funcPool = { // 用于操作球的选中状态 435 | "all": function(index, me){ 436 | $(me).addClass("ssc-selector-item_on"); 437 | }, 438 | "big": function(index, me){ 439 | index >= half 440 | && $(me).addClass("ssc-selector-item_on"); 441 | }, 442 | "small": function(index, me){ 443 | index < half 444 | && $(me).addClass("ssc-selector-item_on"); 445 | }, 446 | "odd": function(index, me){ 447 | index % 2 == 0 448 | && $(me).addClass("ssc-selector-item_on"); 449 | }, 450 | "even": function(index, me){ 451 | index % 2 == 1 452 | && $(me).addClass("ssc-selector-item_on"); 453 | }, 454 | "other": function(index, me){ 455 | $.inArray(index, rnum) > -1 456 | && $(me).addClass("ssc-selector-item_on"); 457 | } 458 | } 459 | , self = this; 460 | 461 | // 当 select 的值发生变化的时候,修改球的选中状态 462 | $(".ssc-main-choose").on("change", ".ssc-selector-item select", function(){ 463 | var $this = $(this) 464 | , $items = $this.parents(".ssc-selector-item").find("span strong") 465 | , val = $this.val(); 466 | 467 | self.refresh().resetDom("don't remove all selector status, just a line"); 468 | $items.removeClass("ssc-selector-item_on"); 469 | 470 | if(!isNaN(parseInt(val))){ 471 | rnum = Utils.getSomeRandom(parseInt(val)); 472 | val = "other"; 473 | } 474 | 475 | $items.map(funcPool[val]); 476 | 477 | // 刷新当前状态 478 | self.refresh().init(); 479 | }); 480 | 481 | // select 旁边 button 点击选择 482 | $(".ssc-selector-item select").next("a").on("click", function(evt){ 483 | evt.preventDefault(); 484 | 485 | $(this).prev("select").trigger("change"); 486 | }); 487 | }, 488 | 489 | /** 490 | * 选择球 -> 刷新变量 -> 判断 button 是否可以点击 491 | * 492 | * @return {Objet} 这是比较关键的一块,主要用于状态判断 493 | * 494 | * init: function(){ // 刷新当前选中球,并判断是否置灰button 495 | * setCurRes(); 496 | * unDisableBtn(); 497 | * }, 498 | * setCurRes: setCurRes, // 刷新当前选中球 499 | * unDisableBtn: unDisableBtn, // 判断是否置灰button 500 | * resetDom: resetDom, // 重置DOM 501 | * setFinal: setFinal // 设置底部的注数和金额 502 | */ 503 | refresh: function(){ 504 | var self = this; 505 | 506 | /** 507 | * 刷新当前选中球 508 | */ 509 | var setCurRes = function(){ 510 | var res = []; 511 | $(".ssc-selector-item").each(function(){ 512 | var arr = []; 513 | $(this).find(".ssc-selector-item_on").map(function(index, me){ 514 | arr.push($(me).text()); 515 | }); 516 | res.push(arr); 517 | }); 518 | 519 | curRes = res; 520 | }; 521 | 522 | /** 523 | * 判断是否置灰button 524 | */ 525 | var unDisableBtn = function(){ 526 | var count = self.countor(); 527 | 528 | if(count == CHECK_UNPASS){ 529 | // 数字归零 530 | $(".CSR_info").find("span").eq(0).text("0").end().eq(1).text("0.00"); 531 | $(".CSR_get").find("span").eq(0).text("0.00").end().eq(1).text("0.00"); 532 | 533 | // 置灰 button 534 | $(".CSR_btn").off().removeClass("CSR_btn_OK"); 535 | 536 | return; 537 | } 538 | 539 | $(".CSR_info").find("span").eq("0").text(count) 540 | .end().eq(1).text(count * 2); 541 | 542 | var money = self.calcMoney() 543 | , award = parseInt($(".CSR_info span").eq(1).text()) 544 | , profit = money.indexOf("~") == -1 ? parseInt(money) - award : (function(){ 545 | return money.replace(/(\d+)/g, function(s, a){ 546 | return Number(a) - award; 547 | }); 548 | })(money); 549 | 550 | $(".CSR_get").find("span").eq(0).text(money).end().eq(1).text(profit); 551 | 552 | // 绑定点击 553 | $(".CSR_btn").addClass("CSR_btn_OK").off().one('click', function(evt){ 554 | evt.preventDefault(); 555 | 556 | if(curType == "text" && textMsg != ""){ 557 | // 重置DOM 558 | $(".CSR_clear").trigger("click"); 559 | self.alertBox(textMsg); 560 | return; 561 | } 562 | 563 | // 添加一条数据到下方的展示框中 564 | self.addResItem(); 565 | // 重置DOM 566 | $(".CSR_clear").trigger("click"); 567 | // 修改 568 | setFinal(); 569 | }); 570 | }; 571 | 572 | // 重置DOM 573 | var resetDom = function(tag){ 574 | // 数字归零 575 | $(".CSR_info").find("span").eq(0).text("0").end().eq(1).text("0.00"); 576 | $(".CSR_get").find("span").eq(0).text("0.00").end().eq(1).text("0.00"); 577 | 578 | // 选中状态取消 579 | !tag && $(".ssc-selector-item span strong").removeClass("ssc-selector-item_on"); 580 | 581 | // 选择 button 置灰 582 | $(".CSR_btn").off().removeClass("CSR_btn_OK"); 583 | 584 | // 只有标准选号才支持机选 585 | if(curType == "standard"){ 586 | $(".CSR_select").show(); 587 | } else { 588 | $(".CSR_select").hide(); 589 | } 590 | 591 | // 如果是 text,清空内容 592 | if(curType == "text"){ 593 | $(".ssc-main-choose-text textarea").val(""); 594 | $(".CSR_info, .CSR_get").hide(); 595 | } else { 596 | $(".CSR_info, .CSR_get").show(); 597 | } 598 | 599 | $(".CSR_select option").get(0).selected = "selected"; 600 | }; 601 | 602 | // 设置底部的注数和金额 603 | var setFinal = function(){ 604 | var val = 0; 605 | 606 | curDoubling = $("#doubling").val(); 607 | 608 | $(".ssc-resluts-list div").each(function(index, me){ 609 | val += Number($(me).find("i").eq(0).text()); 610 | }); 611 | 612 | $(".ssc-resluts-doubling strong").eq(0).text(val) 613 | .end().eq(1).text(val * curDoubling * 2 || "0.00"); 614 | }; 615 | 616 | return { 617 | init: function(){ 618 | setCurRes(); 619 | unDisableBtn(); 620 | }, 621 | setCurRes: setCurRes, 622 | unDisableBtn: unDisableBtn, 623 | resetDom: resetDom, 624 | setFinal: setFinal 625 | } 626 | }, 627 | 628 | /** 629 | * 算法核心 630 | * @return {Number} 注数 631 | */ 632 | countor: function(){ 633 | var self = this 634 | , ret = 1 635 | , sum = 0 636 | , a = curRes[0] && curRes[0].length || 0 637 | , b = curRes[1] && curRes[1].length || 0; 638 | 639 | switch(curType){ 640 | case "standard": // 标准 641 | for(var i = 0; i < curNum; i++){ 642 | ret *= (curRes[i] && curRes[i].length) || 0; 643 | } 644 | 645 | if(/4_1/.test(curId)){ 646 | var c = curRes[2] && curRes[2].length || 0; 647 | if(a == 0 || c == 0) return CHECK_UNPASS; 648 | ret = a * c - Utils.arrayIntersection(curRes[0], curRes[2]).length; 649 | } 650 | 651 | return ret == 0 ? CHECK_UNPASS : ret; 652 | 653 | case "rx": // 任选 654 | if(curNum == 1){ 655 | for(var i = 0; i < ConfigParam['stars']; i++){ 656 | sum += curRes[i] && curRes[i].length || 0; 657 | } 658 | return sum == 0 ? CHECK_UNPASS : sum; 659 | 660 | } else if(curNum == 2){ 661 | for(var i = 0; i < ConfigParam['stars'] - 1; i++){ 662 | for(var j = i + 1; j < ConfigParam['stars']; j++){ 663 | sum += (curRes[i] && curRes[i].length || 0) * (curRes[j] && curRes[j].length || 0) 664 | } 665 | } 666 | return sum == 0 ? CHECK_UNPASS : sum; 667 | } 668 | 669 | case "text": // 直接上传 670 | return this._getTextPatternContent(); 671 | 672 | case "dxds": // 大小单双 673 | ret = a * b; 674 | return ret == 0 ? CHECK_UNPASS : ret; 675 | 676 | case "bh": // 包号 677 | // 二星 678 | if(/2_3/.test(curId)){ 679 | for(var i = 1; i <= a; i++){ 680 | sum += i; 681 | } 682 | return a < 3 || sum == 0 ? CHECK_UNPASS : sum; 683 | } 684 | // 三星组三 685 | if(/4_2/.test(curId)){ 686 | return a < 2 ? CHECK_UNPASS : a * (a - 1); 687 | } 688 | // 三星组六 689 | if(/4_5/.test(curId)){ 690 | return a < 3 ? CHECK_UNPASS : Utils.combination(a, 3); 691 | } 692 | case "sum": // 和值 693 | var ret = [], TB; 694 | for(var i = 0; i < curRes.length; i++){ 695 | ret = ret.concat(curRes[i]); 696 | } 697 | if(curNum == 2){ 698 | TB = TABLE_2; 699 | } 700 | if(/3_2/.test(curId)){ 701 | TB = TABLE_3_1; 702 | } 703 | if(/4_3/.test(curId)){ 704 | TB = TABLE_3_2; 705 | } 706 | if(/4_6/.test(curId)){ 707 | TB = TABLE_3_3; 708 | } 709 | 710 | $.each(ret, function(index, item){ 711 | sum += TB[Number(item)]; 712 | }); 713 | 714 | return sum == 0 ? CHECK_UNPASS : sum; 715 | 716 | case "kd": // 跨度,不知道算法,硬编码 717 | var table = [10, 54, 96, 126, 144, 150, 144, 126, 96, 54]; 718 | $.each(curRes[0], function(index, item){ 719 | sum += table[Number(item)]; 720 | }); 721 | 722 | return sum == 0 ? CHECK_UNPASS : sum; 723 | 724 | case "dt": // 胆拖 725 | if(a > 0 && b > 0 && a + b >= curNum){ 726 | if(/4_7/.test(curId) && a + b == curNum){ 727 | return CHECK_UNPASS; 728 | } 729 | // 直选,采用排列,组选,使用组合 730 | ret = Utils.permutation(b, curNum - a) * Utils.permutation(curNum, a); 731 | 732 | if(/4_7|2_5/.test(curId)){ 733 | ret = Utils.combination(b, curNum - a);; 734 | } 735 | 736 | return ret; 737 | } else { 738 | return CHECK_UNPASS; 739 | } 740 | 741 | default: 742 | return CHECK_PASS; 743 | 744 | } 745 | }, 746 | 747 | /** 748 | * 计算金额,可能是一个区间值 749 | * @return {[type]} [description] 750 | */ 751 | calcMoney: function(){ 752 | var text = $(".ssc-tip").text() 753 | , ret = text.match(/([\d+?\.?\d+?万]+)(?=元)/g); 754 | 755 | if(!!!ret){ 756 | /**! 757 | * 请规范化玩法介绍中文案的呈现,奖金后面加上"元"作为单位, 758 | * 并使用阿拉伯数字以及万来表示金额 759 | */ 760 | self.alertBox("程序出错!"); 761 | } 762 | 763 | $.each(ret, function(index, item){ 764 | !/^[\d\.]+$/.test(item) && (ret[index] = Number(item.slice(0, -1)) * 10000); 765 | }); 766 | 767 | // 二星组选和值时,返回一个区间 768 | if(/2_4/.test(curId)){ 769 | return ret[ret.length - 2] - 50 - 16 + "~" + (ret[ret.length - 2] - 16) 770 | } 771 | return ret[ret.length - 1] + ""; 772 | }, 773 | 774 | /** 775 | * 添加一条选择记录 776 | */ 777 | addResItem: function(data){ 778 | var count = 0, content; 779 | 780 | switch(curType){ 781 | case "standard": // 标准选球 782 | case "rx": // 任选 783 | for(var i = 0; i < ConfigParam['stars']; i++){ 784 | if(curRes[i] == undefined || curRes[i] == "*") { 785 | count++; 786 | } else { 787 | curRes[i] = curRes[i].join(","); 788 | } 789 | } 790 | while(count--){ 791 | curRes.unshift("*"); 792 | } 793 | content = curRes.join("|"); 794 | break; 795 | case "text": 796 | $.map(curRes, function(ctt){ 797 | if($.trim(ctt) != "") { 798 | content = ctt.replace(/\s+|,/g, ","); 799 | 800 | $(".ssc-resluts-list").append( 801 | DOMHelper.createResItemTpl( 802 | $.extend({content: " " + content + " "}, data || {}) 803 | ) 804 | ); 805 | } 806 | }); 807 | return; 808 | case "dxds": // 大小单双 809 | content = curRes[0].join(",") + "|" + curRes[1].join(","); 810 | break; 811 | case "sum": // 和值 812 | case "kd": // 跨度 813 | content = curRes.join("|").replace("|", ","); 814 | break; 815 | case "bh": // 包号 816 | content = curRes[0].join(","); 817 | break; 818 | case "dt": // 胆拖 819 | content = curRes[0].join(",") + "#" + curRes[1].join(","); 820 | break; 821 | default: // 默认 822 | content = " 『模板错误』 "; 823 | } 824 | 825 | $(".ssc-resluts-list").append( 826 | DOMHelper.createResItemTpl($.extend({content: " " + content + " "}, data || {})) 827 | ); 828 | 829 | // 结果列表的滚动条滚到底部 830 | $(".ssc-resluts-list").scrollTop($(".ssc-resluts-list").children().size()*24); 831 | }, 832 | 833 | /** 834 | * 当 curType 为 text 时,获取 text 中每一行的球信息 835 | * 检测无误则返回数据 836 | * 837 | * @return {Array} 球信息数组 838 | */ 839 | _getTextPatternContent: function(){ 840 | var val = $(".ssc-main-choose-text textarea").val().split(/\n/m) 841 | , arrText = [] 842 | , self = this; 843 | 844 | for(var i = 0; i < val.length; i++){ 845 | val[i] = $.trim(val[i]); 846 | } 847 | 848 | // 重置 Text 错误信息 849 | textMsg = ""; 850 | 851 | if(!!!$(".ssc-main-choose-text textarea").val()){ 852 | textMsg = "输入不能为空"; 853 | return CHECK_UNPASS; 854 | } 855 | 856 | for(var i = 0; i < val.length; i++){ 857 | if($.trim(val[i]) == "") continue; 858 | 859 | var arrTmp = val[i].split(/\s+|,/); 860 | var hashTable = {"length": 0}; 861 | 862 | var count = 0; 863 | for(var k = 0; k < arrTmp.length; k++){ 864 | if(arrTmp[0] == arrTmp[k]) count++; 865 | } 866 | 867 | if(count == arrTmp.length){ 868 | textMsg = "您好,您输入的第" + (i + 1) + "行的格式有误 [输入的每个数字都相等] ,请检查!"; 869 | return CHECK_UNPASS; 870 | } 871 | // 输入数值错误,数值区间应该是 1 - totalNum 872 | for(var j = 0; j < arrTmp.length; j++){ 873 | var valTmp = parseInt(arrTmp[j]); 874 | if(valTmp > ConfigParam['total'] - 1 || valTmp < 0){ 875 | textMsg = "您好,您输入的第" + (i + 1) + "行的格式有误 [输入数值错误,数值区间应该是 1 - "+ 876 | (ConfigParam["total"] - 1) +"] ,请检查!"; 877 | return CHECK_UNPASS; 878 | } 879 | if(hashTable[arrTmp[j]] == null){ 880 | hashTable[arrTmp[j]] = 1; 881 | hashTable.length += 1; 882 | } 883 | if(!!!valTmp){ 884 | textMsg = "您好,您输入的第" + (i + 1) + "行的格式有误 [最后多了逗号?] ,请检查!"; 885 | return CHECK_UNPASS; 886 | } 887 | } 888 | 889 | // 个数错误,应该是 curNum 个 890 | if(arrTmp.length != curNum){ 891 | textMsg = "您好,您输入的第" + (i + 1) + "行的格式有误 [个数错误,应该是" + 892 | curNum + "个] ,请检查!"; 893 | return CHECK_UNPASS; 894 | } 895 | } 896 | 897 | curRes = val; 898 | 899 | return CHECK_PASS; 900 | }, 901 | 902 | /** 903 | * 弹出层,可扩展 904 | */ 905 | alertBox: function(msg){ 906 | alert(msg); 907 | }, 908 | 909 | /** 910 | * 机选多注的 select 绑定 911 | */ 912 | bindMultiSelector: function(){ 913 | var self = this; 914 | 915 | $(".CSR_select").on("change", function(){ 916 | var val = +$(this).val(); 917 | if(val == 0) return; 918 | 919 | for(var s = 0; s < val; s++){ 920 | 921 | curRes.length = 0; 922 | 923 | if(curType == "standard" && curFullName.indexOf("三星组选") > -1) { 924 | curRes[0] = curRes[1] = [Utils.getRandom()]; 925 | curRes[2] = [Utils.getRandom()]; 926 | } else{ 927 | for(var i = 0; i < curNum; i++){ 928 | curRes.push([Utils.getRandom()]); 929 | } 930 | } 931 | 932 | self.addResItem({ 933 | "num": 1, 934 | "money": 2 935 | }); 936 | } 937 | 938 | // 刷新当前状态 939 | self.refresh().setFinal(); 940 | self.refresh().resetDom(); 941 | }); 942 | } 943 | }); 944 | 945 | 946 | //================================================= SSC/DOMHelper ==// 947 | 948 | /** 949 | * DOMHelper Class 950 | * 生成 DOM 元素 951 | * 952 | * @method init 初始化函数 DOMHelper的函数入口 953 | * @method createTab 生成顶部 TAB 954 | */ 955 | var DOMHelper = $.extend({}, { 956 | 957 | /** 958 | * 生成顶部 TAB 959 | * @return {[type]} [description] 960 | */ 961 | createTab: function(){ 962 | var str = [] 963 | , i = 0; 964 | 965 | // 遍历配置文件 966 | for(var key in ConfigDOM){ 967 | str.push('' + key + '|'); 969 | } 970 | 971 | return str.join(""); 972 | }, 973 | /** 974 | * [createSubTab 创建 SubTab,input 框和 tip 信息] 975 | * @param {Boolean} tplTag 表示是否存在分组 976 | * @return {String} 生成拼接好的字符串 977 | */ 978 | createSubTab: function(tplTag){ 979 | // 在注释前加入 "!" 可以防止压缩工具过滤注释 980 | // 下面用到的模板引擎是 Utils 函数中的 tplEngine。 981 | return tplTag ? (function(){ 982 | return [ 983 | '
', 984 | ' <%for(var i = 0; i < this.length; i++){%>', 985 | ' ', 986 | ' <%this[i]["group"]%>:', 987 | ' <%for(var j = 0; j < this[i]["data"].length; j++){', 988 | ' var tmp = this[i]["data"][j];', 989 | ' var id = "SSC_" + tmp["pos"][0] + "_" + tmp["pos"][1];', 990 | ' %>', 991 | ' " data-tip="<%tmp["intro"]%>" name="ctype" />', 992 | ' ', 993 | ' <%}%>', 994 | ' ', 995 | ' <%}%>', 996 | '
', 997 | '
[玩法介绍]:<% this[0]["data"][0]["intro"]%>
' 998 | ].join("\n"); 999 | })() : (function(){ 1000 | return [ 1001 | '
', 1002 | ' ', 1003 | ' <%for(var i = 0; i < this.length; i++){', 1004 | ' var id = "SSC_" + this[i]["pos"][0] + "_" + this[i]["pos"][1];', 1005 | ' %>', 1006 | ' " data-tip="<%this[i]["intro"]%>" name="ctype" />', 1007 | ' ', 1008 | ' <%}%>', 1009 | ' ', 1010 | '
', 1011 | '
[玩法介绍]:<%this[0]["intro"]%>
' 1012 | ].join("\n"); 1013 | })(); 1014 | }, 1015 | 1016 | /** 1017 | * 创建球区块右侧的 select 1018 | * @param {Number} num 开始数 1019 | * @return {String} DOMString 1020 | */ 1021 | ceateItemListSelect: function(num){ 1022 | var ret = [""); 1039 | 1040 | return ret.join(""); 1041 | }, 1042 | 1043 | /** 1044 | * 创建球区块 1045 | * @return {String} DOMString 1046 | */ 1047 | createBollLine: function(){ 1048 | var self = this 1049 | , ret = "" 1050 | , leftText = []; 1051 | 1052 | /** 1053 | * @description 多行球的展示 1054 | * @param {Number} line 行数,默认为1 1055 | * @param {Array} table 左侧文案 1056 | * @param {Boolean} tag 是否显示右侧select 1057 | * @return {String} 返回拼接好的字符串 1058 | */ 1059 | var chooseLineTpl = function(line, table, tag){ // standard 1060 | var N = ConfigParam['total'] || 10 1061 | , table = table || [] 1062 | , str = []; 1063 | 1064 | for(var s = 0; s < line; s++){ 1065 | str = str.concat([ 1066 | '
', 1067 | '' + (table[s] || '选择号码') + '遗漏' 1068 | ]); 1069 | 1070 | for(var i = 0; i < N; i++){ 1071 | str.push("" + i + "*"); 1072 | } 1073 | 1074 | str = str.concat([ 1075 | (typeof tag == "undefined" || !!tag) ? DOMHelper.ceateItemListSelect(1) 1076 | + '机选号码' : "", 1077 | '
' 1078 | ]); 1079 | } 1080 | 1081 | return str.join("\n"); 1082 | }; 1083 | 1084 | /** 1085 | * @description 多行球的和值展示 1086 | * @param {Number} a 和值的最小值 1087 | * @param {Number} b 和值的最大值 1088 | * @param {Number} line 需要拼接的行数 1089 | * @return {String} 返回拼接好的字符串 1090 | */ 1091 | var chooseSumTpl = function(a, b, line){ // sum 1092 | var len = b - a + 1 1093 | , perLine = Math.floor(len / line) 1094 | , ret = ""; 1095 | 1096 | for(var s = 0; s < line; s++){ 1097 | var str = [ 1098 | '
', 1099 | '和值数遗漏' 1100 | ]; 1101 | 1102 | for(var i = a + perLine * s; i < a + perLine * (s + 1); i++){ 1103 | str.push("" + i + "*"); 1104 | } 1105 | 1106 | str = str.concat([ 1107 | '
' 1108 | ]); 1109 | 1110 | ret += str.join("\n\t"); 1111 | } 1112 | 1113 | return ret; 1114 | }; 1115 | 1116 | /** 1117 | * @description 多行球的大小单双展示 1118 | * @return {String} 返回拼接好的字符串 1119 | */ 1120 | var chooseDXDSTpl = function(){ // dxds 1121 | var text = ["十位", "个位"]; 1122 | var table = "大小单双".split(""); 1123 | 1124 | for(var s = 0; s < 2; s++){ 1125 | var str = [ 1126 | '
', 1127 | '' + text[s] + '遗漏' 1128 | ]; 1129 | 1130 | for(var i = 0; i < 4; i++){ 1131 | str.push("" + table[i] + "*"); 1132 | } 1133 | 1134 | str.push('
'); 1135 | 1136 | ret += str.join("\n\t"); 1137 | } 1138 | 1139 | return ret; 1140 | }; 1141 | 1142 | 1143 | $(".ssc-main-choose").show(); 1144 | $(".ssc-main-choose-text").hide(); 1145 | 1146 | var table = "个位,十位,百位,千位,万位,十万位,百万位,千万位".split(","); 1147 | switch(curType){ 1148 | case "standard": 1149 | table = table.slice(0, curNum).reverse(); 1150 | ret = chooseLineTpl(curNum, table); 1151 | break; 1152 | case "sum": // 和值 1153 | var start = 0 1154 | , end = 18 1155 | , line = 1; 1156 | 1157 | if(curNum == 3 && !!~curId.indexOf("4_3")){ 1158 | start = 1, end = 26, line = 2; 1159 | } 1160 | if(curNum == 3 && !!~curId.indexOf("3_2")){ 1161 | start = 0, end = 27, line = 2; 1162 | } 1163 | if(curNum == 3 && !!~curId.indexOf("4_6")){ 1164 | start = 3, end = 24, line = 2; 1165 | } 1166 | ret = chooseSumTpl(start, end, line); 1167 | break; 1168 | case "bh": // 包号 1169 | table = ['号码']; 1170 | ret = chooseLineTpl(1, table); 1171 | break; 1172 | case "dt": // 胆拖 1173 | table = ['胆码', '拖码']; 1174 | ret = chooseLineTpl(2, table, false); 1175 | break; 1176 | case "kd": // 跨度 1177 | table = ['跨度']; 1178 | ret = chooseLineTpl(1, table); 1179 | break; 1180 | case "text": // 手工录入 1181 | $(".ssc-main-choose, .ssc-main-choose-text").toggle(); 1182 | break; 1183 | case "dxds": // 大小单双 1184 | ret = chooseDXDSTpl(); 1185 | break; 1186 | case "rx": // 任选一、二 1187 | ret = chooseLineTpl(ConfigParam['stars'], table); 1188 | break; 1189 | default: 1190 | // 默认文案 1191 | ret = "[ERROR] 配置参数有误,请注意查看 curType 参数是否设置"; 1192 | } 1193 | 1194 | return ret; 1195 | }, 1196 | 1197 | /** 1198 | * 创建生成一条内容的模板 1199 | * @param {Object} data 参数 1200 | * @return {String} DOMString 1201 | */ 1202 | createResItemTpl: function(data){ 1203 | var tpl = ['
', 1204 | '删除', 1205 | '[<%type%>]', 1206 | '<%content%>', 1207 | '(<%num%><%money%>元)', 1208 | '
'].join(""); 1209 | 1210 | // 模板数据 1211 | var data = $.extend({ 1212 | "num": $(".CSR_info span").eq(0).text(), 1213 | "money": $(".CSR_info span").eq(1).text(), 1214 | 'type': curFullName, 1215 | "content": " 『模板错误』 " 1216 | }, data || {}); 1217 | 1218 | // 替换内容的模板 1219 | return tpl.replace(/<%([^%>]+)?%>/g, function(m, a){ 1220 | return data[a]; 1221 | }); 1222 | } 1223 | }); 1224 | 1225 | 1226 | //================================================= SSC/Utils ==// 1227 | 1228 | /** 1229 | * Utils Class 1230 | * 对ssc类的扩展,添加辅助工具 1231 | * 1232 | * @method getRandom 获取随机数 1233 | * @method getSomeRandom 获取多个随机数 1234 | * @method tplEngine 模板引擎 1235 | * @method repeat 字符串重复 1236 | * @method arrayIntersection 数组交集 1237 | */ 1238 | var Utils = $.extend({}, { 1239 | /** 1240 | * @description 获取随机数 1241 | * @param [Array] except 剔除的数 1242 | * @return [Array] 返回一个数组 1243 | */ 1244 | getRandom: function(except){ 1245 | 1246 | var total = ConfigParam['total'] || 10; 1247 | 1248 | if(!except || except.length == 0){ 1249 | return Math.floor(Math.random()*total); 1250 | } 1251 | 1252 | var res, tag = true; 1253 | while(1 && tag){ 1254 | res = Math.floor(Math.random()*total); 1255 | ($.inArray(res, except) == -1) && (tag = false); 1256 | } 1257 | return res == total ? res - 1 : res; 1258 | }, 1259 | 1260 | /** 1261 | * @description 获取随机数 1262 | * @param [Number] num 个数 1263 | * @param [Array] except 获取多个随机数 1264 | * @return [Array] 返回一个数组 1265 | */ 1266 | getSomeRandom: function(num, except){ 1267 | var res = [], args; 1268 | 1269 | while(num--){ 1270 | if(except && res.length == 0){ 1271 | args = except; 1272 | } else { 1273 | args = Utils.unique((except || []).concat(res)); 1274 | } 1275 | var tmp = this.getRandom(args); 1276 | res.push(tmp); 1277 | } 1278 | 1279 | return res; 1280 | }, 1281 | 1282 | /** 1283 | * 清空重复数据 1284 | * @param {[type]} arr [description] 1285 | * @return {[type]} [description] 1286 | */ 1287 | unique: function(arr){ 1288 | var hash = {}, i = 0, ret = []; 1289 | 1290 | for(; i < arr.length; i++ ) !hash[arr[i]] && (hash[arr[i]] = 1) 1291 | for(i in hash) ret.push(Number(i)); 1292 | 1293 | return ret; 1294 | }, 1295 | 1296 | // 模板引擎,详情可以异步我写的一篇博客 1297 | // http://www.cnblogs.com/hustskyking/p/principle-of-javascript-template.html 1298 | tplEngine: function(tpl, data) { 1299 | var reg = /<%([^%>]+)?%>/g, 1300 | regOut = /(^( )?(if|for|else|switch|case|break|{|}))(.*)?/g, 1301 | code = 'var r=[];\n', 1302 | cursor = 0; 1303 | 1304 | var add = function(line, js) { 1305 | js? (code += line.match(regOut) ? line + '\n' : 'r.push(' + line + ');\n') : 1306 | (code += line != '' ? 'r.push("' + line.replace(/"/g, '\\"') + '");\n' : ''); 1307 | return add; 1308 | } 1309 | while(match = reg.exec(tpl)) { 1310 | add(tpl.slice(cursor, match.index))(match[1], true); 1311 | cursor = match.index + match[0].length; 1312 | } 1313 | add(tpl.substr(cursor, tpl.length - cursor)); 1314 | code += 'return r.join("");'; 1315 | return new Function(code.replace(/[\r\t\n]/g, '')).apply(data); 1316 | }, 1317 | 1318 | /** 1319 | * 重复显示 1320 | * @param {[type]} str [description] 1321 | * @param {[type]} N [description] 1322 | * @return {[type]} [description] 1323 | */ 1324 | repeat: function(str, N){ 1325 | var res = "" 1326 | while(N--){ 1327 | res += str; 1328 | } 1329 | return res; 1330 | }, 1331 | 1332 | // 组合 1333 | combination: function(a, b){ 1334 | var resX = 1, resY = 1, tmp = b; 1335 | while(tmp){ 1336 | resX *= a; 1337 | a--;tmp--; 1338 | } 1339 | while(b){ 1340 | resY *= b; 1341 | b--; 1342 | } 1343 | return resX / resY; 1344 | }, 1345 | 1346 | // 排列 1347 | permutation : function(a, b){ 1348 | var ret = 1; 1349 | while(b){ 1350 | ret *= a--; 1351 | b--; 1352 | } 1353 | return ret; 1354 | }, 1355 | 1356 | /** 1357 | * @description 数据去重 1358 | * @param {Array} a 要比较的数组 1359 | * @param {Array} b 要比较的数组 1360 | * @return {Array} a 和 b 的交集 1361 | */ 1362 | arrayIntersection: function (a, b) { 1363 | var ai = 0, bi = 0; 1364 | var result = new Array(); 1365 | 1366 | while( ai < a.length && bi < b.length ){ 1367 | if (a[ai] < b[bi] ){ 1368 | ai++; 1369 | } else if (a[ai] > b[bi] ){ 1370 | bi++; 1371 | } else { 1372 | result.push(a[ai]); 1373 | ai++; 1374 | bi++; 1375 | } 1376 | } 1377 | return result; 1378 | } 1379 | }); 1380 | 1381 | })(window, undefined); -------------------------------------------------------------------------------- /js/jquery.js: -------------------------------------------------------------------------------- 1 | /*! jQuery v1.7.1 jquery.com | jquery.org/license */ 2 | (function(a,b){function cy(a){return f.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function cv(a){if(!ck[a]){var b=c.body,d=f("<"+a+">").appendTo(b),e=d.css("display");d.remove();if(e==="none"||e===""){cl||(cl=c.createElement("iframe"),cl.frameBorder=cl.width=cl.height=0),b.appendChild(cl);if(!cm||!cl.createElement)cm=(cl.contentWindow||cl.contentDocument).document,cm.write((c.compatMode==="CSS1Compat"?"":"")+""),cm.close();d=cm.createElement(a),cm.body.appendChild(d),e=f.css(d,"display"),b.removeChild(cl)}ck[a]=e}return ck[a]}function cu(a,b){var c={};f.each(cq.concat.apply([],cq.slice(0,b)),function(){c[this]=a});return c}function ct(){cr=b}function cs(){setTimeout(ct,0);return cr=f.now()}function cj(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function ci(){try{return new a.XMLHttpRequest}catch(b){}}function cc(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g0){if(c!=="border")for(;g=0===c})}function S(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function K(){return!0}function J(){return!1}function n(a,b,c){var d=b+"defer",e=b+"queue",g=b+"mark",h=f._data(a,d);h&&(c==="queue"||!f._data(a,e))&&(c==="mark"||!f._data(a,g))&&setTimeout(function(){!f._data(a,e)&&!f._data(a,g)&&(f.removeData(a,d,!0),h.fire())},0)}function m(a){for(var b in a){if(b==="data"&&f.isEmptyObject(a[b]))continue;if(b!=="toJSON")return!1}return!0}function l(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(k,"-$1").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:f.isNumeric(d)?parseFloat(d):j.test(d)?f.parseJSON(d):d}catch(g){}f.data(a,c,d)}else d=b}return d}function h(a){var b=g[a]={},c,d;a=a.split(/\s+/);for(c=0,d=a.length;c)[^>]*$|#([\w\-]*)$)/,j=/\S/,k=/^\s+/,l=/\s+$/,m=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,n=/^[\],:{}\s]*$/,o=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,p=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,q=/(?:^|:|,)(?:\s*\[)+/g,r=/(webkit)[ \/]([\w.]+)/,s=/(opera)(?:.*version)?[ \/]([\w.]+)/,t=/(msie) ([\w.]+)/,u=/(mozilla)(?:.*? rv:([\w.]+))?/,v=/-([a-z]|[0-9])/ig,w=/^-ms-/,x=function(a,b){return(b+"").toUpperCase()},y=d.userAgent,z,A,B,C=Object.prototype.toString,D=Object.prototype.hasOwnProperty,E=Array.prototype.push,F=Array.prototype.slice,G=String.prototype.trim,H=Array.prototype.indexOf,I={};e.fn=e.prototype={constructor:e,init:function(a,d,f){var g,h,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a==="body"&&!d&&c.body){this.context=c,this[0]=c.body,this.selector=a,this.length=1;return this}if(typeof a=="string"){a.charAt(0)!=="<"||a.charAt(a.length-1)!==">"||a.length<3?g=i.exec(a):g=[null,a,null];if(g&&(g[1]||!d)){if(g[1]){d=d instanceof e?d[0]:d,k=d?d.ownerDocument||d:c,j=m.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable?e.clone(j.fragment):j.fragment).childNodes);return e.merge(this,a)}h=c.getElementById(g[2]);if(h&&h.parentNode){if(h.id!==g[2])return f.find(a);this.length=1,this[0]=h}this.context=c,this.selector=a;return this}return!d||d.jquery?(d||f).find(a):this.constructor(d).find(a)}if(e.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return e.makeArray(a,this)},selector:"",jquery:"1.7.1",length:0,size:function(){return this.length},toArray:function(){return F.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=this.constructor();e.isArray(a)?E.apply(d,a):e.merge(d,a),d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")");return d},each:function(a,b){return e.each(this,a,b)},ready:function(a){e.bindReady(),A.add(a);return this},eq:function(a){a=+a;return a===-1?this.slice(a):this.slice(a,a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(F.apply(this,arguments),"slice",F.call(arguments).join(","))},map:function(a){return this.pushStack(e.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:E,sort:[].sort,splice:[].splice},e.fn.init.prototype=e.fn,e.extend=e.fn.extend=function(){var a,c,d,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i=="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!="object"&&!e.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j0)return;A.fireWith(c,[e]),e.fn.trigger&&e(c).trigger("ready").off("ready")}},bindReady:function(){if(!A){A=e.Callbacks("once memory");if(c.readyState==="complete")return setTimeout(e.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",B,!1),a.addEventListener("load",e.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",B),a.attachEvent("onload",e.ready);var b=!1;try{b=a.frameElement==null}catch(d){}c.documentElement.doScroll&&b&&J()}}},isFunction:function(a){return e.type(a)==="function"},isArray:Array.isArray||function(a){return e.type(a)==="array"},isWindow:function(a){return a&&typeof a=="object"&&"setInterval"in a},isNumeric:function(a){return!isNaN(parseFloat(a))&&isFinite(a)},type:function(a){return a==null?String(a):I[C.call(a)]||"object"},isPlainObject:function(a){if(!a||e.type(a)!=="object"||a.nodeType||e.isWindow(a))return!1;try{if(a.constructor&&!D.call(a,"constructor")&&!D.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}var d;for(d in a);return d===b||D.call(a,d)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw new Error(a)},parseJSON:function(b){if(typeof b!="string"||!b)return null;b=e.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(n.test(b.replace(o,"@").replace(p,"]").replace(q,"")))return(new Function("return "+b))();e.error("Invalid JSON: "+b)},parseXML:function(c){var d,f;try{a.DOMParser?(f=new DOMParser,d=f.parseFromString(c,"text/xml")):(d=new ActiveXObject("Microsoft.XMLDOM"),d.async="false",d.loadXML(c))}catch(g){d=b}(!d||!d.documentElement||d.getElementsByTagName("parsererror").length)&&e.error("Invalid XML: "+c);return d},noop:function(){},globalEval:function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(w,"ms-").replace(v,x)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var f,g=0,h=a.length,i=h===b||e.isFunction(a);if(d){if(i){for(f in a)if(c.apply(a[f],d)===!1)break}else for(;g0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i1?i.call(arguments,0):b,j.notifyWith(k,e)}}function l(a){return function(c){b[a]=arguments.length>1?i.call(arguments,0):c,--g||j.resolveWith(j,b)}}var b=i.call(arguments,0),c=0,d=b.length,e=Array(d),g=d,h=d,j=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred(),k=j.promise();if(d>1){for(;c
a",d=q.getElementsByTagName("*"),e=q.getElementsByTagName("a")[0];if(!d||!d.length||!e)return{};g=c.createElement("select"),h=g.appendChild(c.createElement("option")),i=q.getElementsByTagName("input")[0],b={leadingWhitespace:q.firstChild.nodeType===3,tbody:!q.getElementsByTagName("tbody").length,htmlSerialize:!!q.getElementsByTagName("link").length,style:/top/.test(e.getAttribute("style")),hrefNormalized:e.getAttribute("href")==="/a",opacity:/^0.55/.test(e.style.opacity),cssFloat:!!e.style.cssFloat,checkOn:i.value==="on",optSelected:h.selected,getSetAttribute:q.className!=="t",enctype:!!c.createElement("form").enctype,html5Clone:c.createElement("nav").cloneNode(!0).outerHTML!=="<:nav>",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0},i.checked=!0,b.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,b.optDisabled=!h.disabled;try{delete q.test}catch(s){b.deleteExpando=!1}!q.addEventListener&&q.attachEvent&&q.fireEvent&&(q.attachEvent("onclick",function(){b.noCloneEvent=!1}),q.cloneNode(!0).fireEvent("onclick")),i=c.createElement("input"),i.value="t",i.setAttribute("type","radio"),b.radioValue=i.value==="t",i.setAttribute("checked","checked"),q.appendChild(i),k=c.createDocumentFragment(),k.appendChild(q.lastChild),b.checkClone=k.cloneNode(!0).cloneNode(!0).lastChild.checked,b.appendChecked=i.checked,k.removeChild(i),k.appendChild(q),q.innerHTML="",a.getComputedStyle&&(j=c.createElement("div"),j.style.width="0",j.style.marginRight="0",q.style.width="2px",q.appendChild(j),b.reliableMarginRight=(parseInt((a.getComputedStyle(j,null)||{marginRight:0}).marginRight,10)||0)===0);if(q.attachEvent)for(o in{submit:1,change:1,focusin:1})n="on"+o,p=n in q,p||(q.setAttribute(n,"return;"),p=typeof q[n]=="function"),b[o+"Bubbles"]=p;k.removeChild(q),k=g=h=j=q=i=null,f(function(){var a,d,e,g,h,i,j,k,m,n,o,r=c.getElementsByTagName("body")[0];!r||(j=1,k="position:absolute;top:0;left:0;width:1px;height:1px;margin:0;",m="visibility:hidden;border:0;",n="style='"+k+"border:5px solid #000;padding:0;'",o="
"+""+"
",a=c.createElement("div"),a.style.cssText=m+"width:0;height:0;position:static;top:0;margin-top:"+j+"px",r.insertBefore(a,r.firstChild),q=c.createElement("div"),a.appendChild(q),q.innerHTML="
t
",l=q.getElementsByTagName("td"),p=l[0].offsetHeight===0,l[0].style.display="",l[1].style.display="none",b.reliableHiddenOffsets=p&&l[0].offsetHeight===0,q.innerHTML="",q.style.width=q.style.paddingLeft="1px",f.boxModel=b.boxModel=q.offsetWidth===2,typeof q.style.zoom!="undefined"&&(q.style.display="inline",q.style.zoom=1,b.inlineBlockNeedsLayout=q.offsetWidth===2,q.style.display="",q.innerHTML="
",b.shrinkWrapBlocks=q.offsetWidth!==2),q.style.cssText=k+m,q.innerHTML=o,d=q.firstChild,e=d.firstChild,h=d.nextSibling.firstChild.firstChild,i={doesNotAddBorder:e.offsetTop!==5,doesAddBorderForTableAndCells:h.offsetTop===5},e.style.position="fixed",e.style.top="20px",i.fixedPosition=e.offsetTop===20||e.offsetTop===15,e.style.position=e.style.top="",d.style.overflow="hidden",d.style.position="relative",i.subtractsBorderForOverflowNotVisible=e.offsetTop===-5,i.doesNotIncludeMarginInBodyOffset=r.offsetTop!==j,r.removeChild(a),q=a=null,f.extend(b,i))});return b}();var j=/^(?:\{.*\}|\[.*\])$/,k=/([A-Z])/g;f.extend({cache:{},uuid:0,expando:"jQuery"+(f.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?f.cache[a[f.expando]]:a[f.expando];return!!a&&!m(a)},data:function(a,c,d,e){if(!!f.acceptData(a)){var g,h,i,j=f.expando,k=typeof c=="string",l=a.nodeType,m=l?f.cache:a,n=l?a[j]:a[j]&&j,o=c==="events";if((!n||!m[n]||!o&&!e&&!m[n].data)&&k&&d===b)return;n||(l?a[j]=n=++f.uuid:n=j),m[n]||(m[n]={},l||(m[n].toJSON=f.noop));if(typeof c=="object"||typeof c=="function")e?m[n]=f.extend(m[n],c):m[n].data=f.extend(m[n].data,c);g=h=m[n],e||(h.data||(h.data={}),h=h.data),d!==b&&(h[f.camelCase(c)]=d);if(o&&!h[c])return g.events;k?(i=h[c],i==null&&(i=h[f.camelCase(c)])):i=h;return i}},removeData:function(a,b,c){if(!!f.acceptData(a)){var d,e,g,h=f.expando,i=a.nodeType,j=i?f.cache:a,k=i?a[h]:h;if(!j[k])return;if(b){d=c?j[k]:j[k].data;if(d){f.isArray(b)||(b in d?b=[b]:(b=f.camelCase(b),b in d?b=[b]:b=b.split(" ")));for(e=0,g=b.length;e-1)return!0;return!1},val:function(a){var c,d,e,g=this[0];{if(!!arguments.length){e=f.isFunction(a);return this.each(function(d){var g=f(this),h;if(this.nodeType===1){e?h=a.call(this,d,g.val()):h=a,h==null?h="":typeof h=="number"?h+="":f.isArray(h)&&(h=f.map(h,function(a){return a==null?"":a+""})),c=f.valHooks[this.nodeName.toLowerCase()]||f.valHooks[this.type];if(!c||!("set"in c)||c.set(this,h,"value")===b)this.value=h}})}if(g){c=f.valHooks[g.nodeName.toLowerCase()]||f.valHooks[g.type];if(c&&"get"in c&&(d=c.get(g,"value"))!==b)return d;d=g.value;return typeof d=="string"?d.replace(q,""):d==null?"":d}}}}),f.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c,d,e,g=a.selectedIndex,h=[],i=a.options,j=a.type==="select-one";if(g<0)return null;c=j?g:0,d=j?g+1:i.length;for(;c=0}),c.length||(a.selectedIndex=-1);return c}}},attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attr:function(a,c,d,e){var g,h,i,j=a.nodeType;if(!!a&&j!==3&&j!==8&&j!==2){if(e&&c in f.attrFn)return f(a)[c](d);if(typeof a.getAttribute=="undefined")return f.prop(a,c,d);i=j!==1||!f.isXMLDoc(a),i&&(c=c.toLowerCase(),h=f.attrHooks[c]||(u.test(c)?x:w));if(d!==b){if(d===null){f.removeAttr(a,c);return}if(h&&"set"in h&&i&&(g=h.set(a,d,c))!==b)return g;a.setAttribute(c,""+d);return d}if(h&&"get"in h&&i&&(g=h.get(a,c))!==null)return g;g=a.getAttribute(c);return g===null?b:g}},removeAttr:function(a,b){var c,d,e,g,h=0;if(b&&a.nodeType===1){d=b.toLowerCase().split(p),g=d.length;for(;h=0}})});var z=/^(?:textarea|input|select)$/i,A=/^([^\.]*)?(?:\.(.+))?$/,B=/\bhover(\.\S+)?\b/,C=/^key/,D=/^(?:mouse|contextmenu)|click/,E=/^(?:focusinfocus|focusoutblur)$/,F=/^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,G=function(a){var b=F.exec(a);b&&(b[1]=(b[1]||"").toLowerCase(),b[3]=b[3]&&new RegExp("(?:^|\\s)"+b[3]+"(?:\\s|$)"));return b},H=function(a,b){var c=a.attributes||{};return(!b[1]||a.nodeName.toLowerCase()===b[1])&&(!b[2]||(c.id||{}).value===b[2])&&(!b[3]||b[3].test((c["class"]||{}).value))},I=function(a){return f.event.special.hover?a:a.replace(B,"mouseenter$1 mouseleave$1")}; 3 | f.event={add:function(a,c,d,e,g){var h,i,j,k,l,m,n,o,p,q,r,s;if(!(a.nodeType===3||a.nodeType===8||!c||!d||!(h=f._data(a)))){d.handler&&(p=d,d=p.handler),d.guid||(d.guid=f.guid++),j=h.events,j||(h.events=j={}),i=h.handle,i||(h.handle=i=function(a){return typeof f!="undefined"&&(!a||f.event.triggered!==a.type)?f.event.dispatch.apply(i.elem,arguments):b},i.elem=a),c=f.trim(I(c)).split(" ");for(k=0;k=0&&(h=h.slice(0,-1),k=!0),h.indexOf(".")>=0&&(i=h.split("."),h=i.shift(),i.sort());if((!e||f.event.customEvent[h])&&!f.event.global[h])return;c=typeof c=="object"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.isTrigger=!0,c.exclusive=k,c.namespace=i.join("."),c.namespace_re=c.namespace?new RegExp("(^|\\.)"+i.join("\\.(?:.*\\.)?")+"(\\.|$)"):null,o=h.indexOf(":")<0?"on"+h:"";if(!e){j=f.cache;for(l in j)j[l].events&&j[l].events[h]&&f.event.trigger(c,d,j[l].handle.elem,!0);return}c.result=b,c.target||(c.target=e),d=d!=null?f.makeArray(d):[],d.unshift(c),p=f.event.special[h]||{};if(p.trigger&&p.trigger.apply(e,d)===!1)return;r=[[e,p.bindType||h]];if(!g&&!p.noBubble&&!f.isWindow(e)){s=p.delegateType||h,m=E.test(s+h)?e:e.parentNode,n=null;for(;m;m=m.parentNode)r.push([m,s]),n=m;n&&n===e.ownerDocument&&r.push([n.defaultView||n.parentWindow||a,s])}for(l=0;le&&i.push({elem:this,matches:d.slice(e)});for(j=0;j0?this.on(b,null,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0),C.test(b)&&(f.event.fixHooks[b]=f.event.keyHooks),D.test(b)&&(f.event.fixHooks[b]=f.event.mouseHooks)}),function(){function x(a,b,c,e,f,g){for(var h=0,i=e.length;h0){k=j;break}}j=j[a]}e[h]=k}}}function w(a,b,c,e,f,g){for(var h=0,i=e.length;h+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,d="sizcache"+(Math.random()+"").replace(".",""),e=0,g=Object.prototype.toString,h=!1,i=!0,j=/\\/g,k=/\r\n/g,l=/\W/;[0,0].sort(function(){i=!1;return 0});var m=function(b,d,e,f){e=e||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!="string")return e;var i,j,k,l,n,q,r,t,u=!0,v=m.isXML(d),w=[],x=b;do{a.exec(""),i=a.exec(x);if(i){x=i[3],w.push(i[1]);if(i[2]){l=i[3];break}}}while(i);if(w.length>1&&p.exec(b))if(w.length===2&&o.relative[w[0]])j=y(w[0]+w[1],d,f);else{j=o.relative[w[0]]?[d]:m(w.shift(),d);while(w.length)b=w.shift(),o.relative[b]&&(b+=w.shift()),j=y(b,j,f)}else{!f&&w.length>1&&d.nodeType===9&&!v&&o.match.ID.test(w[0])&&!o.match.ID.test(w[w.length-1])&&(n=m.find(w.shift(),d,v),d=n.expr?m.filter(n.expr,n.set)[0]:n.set[0]);if(d){n=f?{expr:w.pop(),set:s(f)}:m.find(w.pop(),w.length===1&&(w[0]==="~"||w[0]==="+")&&d.parentNode?d.parentNode:d,v),j=n.expr?m.filter(n.expr,n.set):n.set,w.length>0?k=s(j):u=!1;while(w.length)q=w.pop(),r=q,o.relative[q]?r=w.pop():q="",r==null&&(r=d),o.relative[q](k,r,v)}else k=w=[]}k||(k=j),k||m.error(q||b);if(g.call(k)==="[object Array]")if(!u)e.push.apply(e,k);else if(d&&d.nodeType===1)for(t=0;k[t]!=null;t++)k[t]&&(k[t]===!0||k[t].nodeType===1&&m.contains(d,k[t]))&&e.push(j[t]);else for(t=0;k[t]!=null;t++)k[t]&&k[t].nodeType===1&&e.push(j[t]);else s(k,e);l&&(m(l,h,e,f),m.uniqueSort(e));return e};m.uniqueSort=function(a){if(u){h=i,a.sort(u);if(h)for(var b=1;b0},m.find=function(a,b,c){var d,e,f,g,h,i;if(!a)return[];for(e=0,f=o.order.length;e":function(a,b){var c,d=typeof b=="string",e=0,f=a.length;if(d&&!l.test(b)){b=b.toLowerCase();for(;e=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(j,"")},TAG:function(a,b){return a[1].replace(j,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||m.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&m.error(a[0]);a[0]=e++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(j,"");!f&&o.attrMap[g]&&(a[1]=o.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(j,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=m(b[3],null,null,c);else{var g=m.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(o.match.POS.test(b[0])||o.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!m(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute("type"),c=a.type;return a.nodeName.toLowerCase()==="input"&&"text"===c&&(b===c||b===null)},radio:function(a){return a.nodeName.toLowerCase()==="input"&&"radio"===a.type},checkbox:function(a){return a.nodeName.toLowerCase()==="input"&&"checkbox"===a.type},file:function(a){return a.nodeName.toLowerCase()==="input"&&"file"===a.type},password:function(a){return a.nodeName.toLowerCase()==="input"&&"password"===a.type},submit:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"submit"===a.type},image:function(a){return a.nodeName.toLowerCase()==="input"&&"image"===a.type},reset:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"reset"===a.type},button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&"button"===a.type||b==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)},focus:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return bc[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=o.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||n([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||!!a.nodeName&&a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=m.attr?m.attr(a,c):o.attrHandle[c]?o.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":!f&&m.attr?d!=null:f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=o.setFilters[e];if(f)return f(a,c,b,d)}}},p=o.match.POS,q=function(a,b){return"\\"+(b-0+1)};for(var r in o.match)o.match[r]=new RegExp(o.match[r].source+/(?![^\[]*\])(?![^\(]*\))/.source),o.leftMatch[r]=new RegExp(/(^(?:.|\r|\n)*?)/.source+o.match[r].source.replace(/\\(\d+)/g,q));var s=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(t){s=function(a,b){var c=0,d=b||[];if(g.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length=="number")for(var e=a.length;c",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(o.find.ID=function(a,c,d){if(typeof c.getElementById!="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},o.filter.ID=function(a,b){var c=typeof a.getAttributeNode!="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(o.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="",a.firstChild&&typeof a.firstChild.getAttribute!="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(o.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=m,b=c.createElement("div"),d="__sizzle__";b.innerHTML="

";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){m=function(b,e,f,g){e=e||c;if(!g&&!m.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return s(e.getElementsByTagName(b),f);if(h[2]&&o.find.CLASS&&e.getElementsByClassName)return s(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return s([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return s([],f);if(i.id===h[3])return s([i],f)}try{return s(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var k=e,l=e.getAttribute("id"),n=l||d,p=e.parentNode,q=/^\s*[+~]/.test(b);l?n=n.replace(/'/g,"\\$&"):e.setAttribute("id",n),q&&p&&(e=e.parentNode);try{if(!q||p)return s(e.querySelectorAll("[id='"+n+"'] "+b),f)}catch(r){}finally{l||k.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)m[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement("div"),"div"),e=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(f){e=!0}m.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!m.isXML(a))try{if(e||!o.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return m(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement("div");a.innerHTML="
";if(!!a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;o.order.splice(1,0,"CLASS"),o.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?m.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?m.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:m.contains=function(){return!1},m.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var y=function(a,b,c){var d,e=[],f="",g=b.nodeType?[b]:b;while(d=o.match.PSEUDO.exec(a))f+=d[0],a=a.replace(o.match.PSEUDO,"");a=o.relative[a]?a+"*":a;for(var h=0,i=g.length;h0)for(h=g;h=0:f.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c=[],d,e,g=this[0];if(f.isArray(a)){var h=1;while(g&&g.ownerDocument&&g!==b){for(d=0;d-1:f.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b||g.nodeType===11)break}}c=c.length>1?f.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a)return this[0]&&this[0].parentNode?this.prevAll().length:-1;if(typeof a=="string")return f.inArray(this[0],f(a));return f.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a=="string"?f(a,b):f.makeArray(a&&a.nodeType?[a]:a),d=f.merge(this.get(),c);return this.pushStack(S(c[0])||S(d[0])?d:f.unique(d))},andSelf:function(){return this.add(this.prevObject)}}),f.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return f.dir(a,"parentNode")},parentsUntil:function(a,b,c){return f.dir(a,"parentNode",c)},next:function(a){return f.nth(a,2,"nextSibling")},prev:function(a){return f.nth(a,2,"previousSibling")},nextAll:function(a){return f.dir(a,"nextSibling")},prevAll:function(a){return f.dir(a,"previousSibling")},nextUntil:function(a,b,c){return f.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return f.dir(a,"previousSibling",c)},siblings:function(a){return f.sibling(a.parentNode.firstChild,a)},children:function(a){return f.sibling(a.firstChild)},contents:function(a){return f.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:f.makeArray(a.childNodes)}},function(a,b){f.fn[a]=function(c,d){var e=f.map(this,b,c);L.test(a)||(d=c),d&&typeof d=="string"&&(e=f.filter(d,e)),e=this.length>1&&!R[a]?f.unique(e):e,(this.length>1||N.test(d))&&M.test(a)&&(e=e.reverse());return this.pushStack(e,a,P.call(arguments).join(","))}}),f.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?f.find.matchesSelector(b[0],a)?[b[0]]:[]:f.find.matches(a,b)},dir:function(a,c,d){var e=[],g=a[c];while(g&&g.nodeType!==9&&(d===b||g.nodeType!==1||!f(g).is(d)))g.nodeType===1&&e.push(g),g=g[c];return e},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var V="abbr|article|aside|audio|canvas|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",W=/ jQuery\d+="(?:\d+|null)"/g,X=/^\s+/,Y=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,Z=/<([\w:]+)/,$=/",""],legend:[1,"
","
"],thead:[1,"","
"],tr:[2,"","
"],td:[3,"","
"],col:[2,"","
"],area:[1,"",""],_default:[0,"",""]},bh=U(c);bg.optgroup=bg.option,bg.tbody=bg.tfoot=bg.colgroup=bg.caption=bg.thead,bg.th=bg.td,f.support.htmlSerialize||(bg._default=[1,"div
","
"]),f.fn.extend({text:function(a){if(f.isFunction(a))return this.each(function(b){var c=f(this);c.text(a.call(this,b,c.text()))});if(typeof a!="object"&&a!==b)return this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a));return f.text(this)},wrapAll:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapAll(a.call(this,b))});if(this[0]){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapInner(a.call(this,b))});return this.each(function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=f.isFunction(a);return this.each(function(c){f(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){f.nodeName(this,"body")||f(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=f.clean(arguments);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,f.clean(arguments));return a}},remove:function(a,b){for(var c=0,d;(d=this[c])!=null;c++)if(!a||f.filter(a,[d]).length)!b&&d.nodeType===1&&(f.cleanData(d.getElementsByTagName("*")),f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d);return this},empty:function() 4 | {for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(this,a,b)})},html:function(a){if(a===b)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(W,""):null;if(typeof a=="string"&&!ba.test(a)&&(f.support.leadingWhitespace||!X.test(a))&&!bg[(Z.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Y,"<$1>");try{for(var c=0,d=this.length;c1&&l0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j)}return this.pushStack(d,a,e.selector)}}),f.extend({clone:function(a,b,c){var d,e,g,h=f.support.html5Clone||!bc.test("<"+a.nodeName)?a.cloneNode(!0):bo(a);if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bk(a,h),d=bl(a),e=bl(h);for(g=0;d[g];++g)e[g]&&bk(d[g],e[g])}if(b){bj(a,h);if(c){d=bl(a),e=bl(h);for(g=0;d[g];++g)bj(d[g],e[g])}}d=e=null;return h},clean:function(a,b,d,e){var g;b=b||c,typeof b.createElement=="undefined"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);var h=[],i;for(var j=0,k;(k=a[j])!=null;j++){typeof k=="number"&&(k+="");if(!k)continue;if(typeof k=="string")if(!_.test(k))k=b.createTextNode(k);else{k=k.replace(Y,"<$1>");var l=(Z.exec(k)||["",""])[1].toLowerCase(),m=bg[l]||bg._default,n=m[0],o=b.createElement("div");b===c?bh.appendChild(o):U(b).appendChild(o),o.innerHTML=m[1]+k+m[2];while(n--)o=o.lastChild;if(!f.support.tbody){var p=$.test(k),q=l==="table"&&!p?o.firstChild&&o.firstChild.childNodes:m[1]===""&&!p?o.childNodes:[];for(i=q.length-1;i>=0;--i)f.nodeName(q[i],"tbody")&&!q[i].childNodes.length&&q[i].parentNode.removeChild(q[i])}!f.support.leadingWhitespace&&X.test(k)&&o.insertBefore(b.createTextNode(X.exec(k)[0]),o.firstChild),k=o.childNodes}var r;if(!f.support.appendChecked)if(k[0]&&typeof (r=k.length)=="number")for(i=0;i=0)return b+"px"}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return br.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=f.isNumeric(b)?"alpha(opacity="+b*100+")":"",g=d&&d.filter||c.filter||"";c.zoom=1;if(b>=1&&f.trim(g.replace(bq,""))===""){c.removeAttribute("filter");if(d&&!d.filter)return}c.filter=bq.test(g)?g.replace(bq,e):g+" "+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){var c;f.swap(a,{display:"inline-block"},function(){b?c=bz(a,"margin-right","marginRight"):c=a.style.marginRight});return c}})}),c.defaultView&&c.defaultView.getComputedStyle&&(bA=function(a,b){var c,d,e;b=b.replace(bs,"-$1").toLowerCase(),(d=a.ownerDocument.defaultView)&&(e=d.getComputedStyle(a,null))&&(c=e.getPropertyValue(b),c===""&&!f.contains(a.ownerDocument.documentElement,a)&&(c=f.style(a,b)));return c}),c.documentElement.currentStyle&&(bB=function(a,b){var c,d,e,f=a.currentStyle&&a.currentStyle[b],g=a.style;f===null&&g&&(e=g[b])&&(f=e),!bt.test(f)&&bu.test(f)&&(c=g.left,d=a.runtimeStyle&&a.runtimeStyle.left,d&&(a.runtimeStyle.left=a.currentStyle.left),g.left=b==="fontSize"?"1em":f||0,f=g.pixelLeft+"px",g.left=c,d&&(a.runtimeStyle.left=d));return f===""?"auto":f}),bz=bA||bB,f.expr&&f.expr.filters&&(f.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!f.support.reliableHiddenOffsets&&(a.style&&a.style.display||f.css(a,"display"))==="none"},f.expr.filters.visible=function(a){return!f.expr.filters.hidden(a)});var bD=/%20/g,bE=/\[\]$/,bF=/\r?\n/g,bG=/#.*$/,bH=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bI=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bJ=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,bK=/^(?:GET|HEAD)$/,bL=/^\/\//,bM=/\?/,bN=/)<[^<]*)*<\/script>/gi,bO=/^(?:select|textarea)/i,bP=/\s+/,bQ=/([?&])_=[^&]*/,bR=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,bS=f.fn.load,bT={},bU={},bV,bW,bX=["*/"]+["*"];try{bV=e.href}catch(bY){bV=c.createElement("a"),bV.href="",bV=bV.href}bW=bR.exec(bV.toLowerCase())||[],f.fn.extend({load:function(a,c,d){if(typeof a!="string"&&bS)return bS.apply(this,arguments);if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var g=a.slice(e,a.length);a=a.slice(0,e)}var h="GET";c&&(f.isFunction(c)?(d=c,c=b):typeof c=="object"&&(c=f.param(c,f.ajaxSettings.traditional),h="POST"));var i=this;f.ajax({url:a,type:h,dataType:"html",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?f("
").append(c.replace(bN,"")).find(g):c)),d&&i.each(d,[c,b,a])}});return this},serialize:function(){return f.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?f.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bO.test(this.nodeName)||bI.test(this.type))}).map(function(a,b){var c=f(this).val();return c==null?null:f.isArray(c)?f.map(c,function(a,c){return{name:b.name,value:a.replace(bF,"\r\n")}}):{name:b.name,value:c.replace(bF,"\r\n")}}).get()}}),f.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){f.fn[b]=function(a){return this.on(b,a)}}),f.each(["get","post"],function(a,c){f[c]=function(a,d,e,g){f.isFunction(d)&&(g=g||e,e=d,d=b);return f.ajax({type:c,url:a,data:d,success:e,dataType:g})}}),f.extend({getScript:function(a,c){return f.get(a,b,c,"script")},getJSON:function(a,b,c){return f.get(a,b,c,"json")},ajaxSetup:function(a,b){b?b_(a,f.ajaxSettings):(b=a,a=f.ajaxSettings),b_(a,b);return a},ajaxSettings:{url:bV,isLocal:bJ.test(bW[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":bX},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":f.parseJSON,"text xml":f.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:bZ(bT),ajaxTransport:bZ(bU),ajax:function(a,c){function w(a,c,l,m){if(s!==2){s=2,q&&clearTimeout(q),p=b,n=m||"",v.readyState=a>0?4:0;var o,r,u,w=c,x=l?cb(d,v,l):b,y,z;if(a>=200&&a<300||a===304){if(d.ifModified){if(y=v.getResponseHeader("Last-Modified"))f.lastModified[k]=y;if(z=v.getResponseHeader("Etag"))f.etag[k]=z}if(a===304)w="notmodified",o=!0;else try{r=cc(d,x),w="success",o=!0}catch(A){w="parsererror",u=A}}else{u=w;if(!w||a)w="error",a<0&&(a=0)}v.status=a,v.statusText=""+(c||w),o?h.resolveWith(e,[r,w,v]):h.rejectWith(e,[v,w,u]),v.statusCode(j),j=b,t&&g.trigger("ajax"+(o?"Success":"Error"),[v,d,o?r:u]),i.fireWith(e,[v,w]),t&&(g.trigger("ajaxComplete",[v,d]),--f.active||f.event.trigger("ajaxStop"))}}typeof a=="object"&&(c=a,a=b),c=c||{};var d=f.ajaxSetup({},c),e=d.context||d,g=e!==d&&(e.nodeType||e instanceof f)?f(e):f.event,h=f.Deferred(),i=f.Callbacks("once memory"),j=d.statusCode||{},k,l={},m={},n,o,p,q,r,s=0,t,u,v={readyState:0,setRequestHeader:function(a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this},getAllResponseHeaders:function(){return s===2?n:null},getResponseHeader:function(a){var c;if(s===2){if(!o){o={};while(c=bH.exec(n))o[c[1].toLowerCase()]=c[2]}c=o[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){s||(d.mimeType=a);return this},abort:function(a){a=a||"abort",p&&p.abort(a),w(0,a);return this}};h.promise(v),v.success=v.done,v.error=v.fail,v.complete=i.add,v.statusCode=function(a){if(a){var b;if(s<2)for(b in a)j[b]=[j[b],a[b]];else b=a[v.status],v.then(b,b)}return this},d.url=((a||d.url)+"").replace(bG,"").replace(bL,bW[1]+"//"),d.dataTypes=f.trim(d.dataType||"*").toLowerCase().split(bP),d.crossDomain==null&&(r=bR.exec(d.url.toLowerCase()),d.crossDomain=!(!r||r[1]==bW[1]&&r[2]==bW[2]&&(r[3]||(r[1]==="http:"?80:443))==(bW[3]||(bW[1]==="http:"?80:443)))),d.data&&d.processData&&typeof d.data!="string"&&(d.data=f.param(d.data,d.traditional)),b$(bT,d,c,v);if(s===2)return!1;t=d.global,d.type=d.type.toUpperCase(),d.hasContent=!bK.test(d.type),t&&f.active++===0&&f.event.trigger("ajaxStart");if(!d.hasContent){d.data&&(d.url+=(bM.test(d.url)?"&":"?")+d.data,delete d.data),k=d.url;if(d.cache===!1){var x=f.now(),y=d.url.replace(bQ,"$1_="+x);d.url=y+(y===d.url?(bM.test(d.url)?"&":"?")+"_="+x:"")}}(d.data&&d.hasContent&&d.contentType!==!1||c.contentType)&&v.setRequestHeader("Content-Type",d.contentType),d.ifModified&&(k=k||d.url,f.lastModified[k]&&v.setRequestHeader("If-Modified-Since",f.lastModified[k]),f.etag[k]&&v.setRequestHeader("If-None-Match",f.etag[k])),v.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(d.dataTypes[0]!=="*"?", "+bX+"; q=0.01":""):d.accepts["*"]);for(u in d.headers)v.setRequestHeader(u,d.headers[u]);if(d.beforeSend&&(d.beforeSend.call(e,v,d)===!1||s===2)){v.abort();return!1}for(u in{success:1,error:1,complete:1})v[u](d[u]);p=b$(bU,d,c,v);if(!p)w(-1,"No Transport");else{v.readyState=1,t&&g.trigger("ajaxSend",[v,d]),d.async&&d.timeout>0&&(q=setTimeout(function(){v.abort("timeout")},d.timeout));try{s=1,p.send(l,w)}catch(z){if(s<2)w(-1,z);else throw z}}return v},param:function(a,c){var d=[],e=function(a,b){b=f.isFunction(b)?b():b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=f.ajaxSettings.traditional);if(f.isArray(a)||a.jquery&&!f.isPlainObject(a))f.each(a,function(){e(this.name,this.value)});else for(var g in a)ca(g,a[g],c,e);return d.join("&").replace(bD,"+")}}),f.extend({active:0,lastModified:{},etag:{}});var cd=f.now(),ce=/(\=)\?(&|$)|\?\?/i;f.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return f.expando+"_"+cd++}}),f.ajaxPrefilter("json jsonp",function(b,c,d){var e=b.contentType==="application/x-www-form-urlencoded"&&typeof b.data=="string";if(b.dataTypes[0]==="jsonp"||b.jsonp!==!1&&(ce.test(b.url)||e&&ce.test(b.data))){var g,h=b.jsonpCallback=f.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l="$1"+h+"$2";b.jsonp!==!1&&(j=j.replace(ce,l),b.url===j&&(e&&(k=k.replace(ce,l)),b.data===k&&(j+=(/\?/.test(j)?"&":"?")+b.jsonp+"="+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},d.always(function(){a[h]=i,g&&f.isFunction(i)&&a[h](g[0])}),b.converters["script json"]=function(){g||f.error(h+" was not called");return g[0]},b.dataTypes[0]="json";return"script"}}),f.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){f.globalEval(a);return a}}}),f.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),f.ajaxTransport("script",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName("head")[0]||c.documentElement;return{send:function(f,g){d=c.createElement("script"),d.async="async",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(c||!d.readyState||/loaded|complete/.test(d.readyState))d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,"success")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var cf=a.ActiveXObject?function(){for(var a in ch)ch[a](0,1)}:!1,cg=0,ch;f.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&ci()||cj()}:ci,function(a){f.extend(f.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(f.ajaxSettings.xhr()),f.support.ajax&&f.ajaxTransport(function(c){if(!c.crossDomain||f.support.cors){var d;return{send:function(e,g){var h=c.xhr(),i,j;c.username?h.open(c.type,c.url,c.async,c.username,c.password):h.open(c.type,c.url,c.async);if(c.xhrFields)for(j in c.xhrFields)h[j]=c.xhrFields[j];c.mimeType&&h.overrideMimeType&&h.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(j in e)h.setRequestHeader(j,e[j])}catch(k){}h.send(c.hasContent&&c.data||null),d=function(a,e){var j,k,l,m,n;try{if(d&&(e||h.readyState===4)){d=b,i&&(h.onreadystatechange=f.noop,cf&&delete ch[i]);if(e)h.readyState!==4&&h.abort();else{j=h.status,l=h.getAllResponseHeaders(),m={},n=h.responseXML,n&&n.documentElement&&(m.xml=n),m.text=h.responseText;try{k=h.statusText}catch(o){k=""}!j&&c.isLocal&&!c.crossDomain?j=m.text?200:404:j===1223&&(j=204)}}}catch(p){e||g(-1,p)}m&&g(j,k,m,l)},!c.async||h.readyState===4?d():(i=++cg,cf&&(ch||(ch={},f(a).unload(cf)),ch[i]=d),h.onreadystatechange=d)},abort:function(){d&&d(0,1)}}}});var ck={},cl,cm,cn=/^(?:toggle|show|hide)$/,co=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,cp,cq=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],cr;f.fn.extend({show:function(a,b,c){var d,e;if(a||a===0)return this.animate(cu("show",3),a,b,c);for(var g=0,h=this.length;g=i.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),i.animatedProperties[this.prop]=!0;for(b in i.animatedProperties)i.animatedProperties[b]!==!0&&(g=!1);if(g){i.overflow!=null&&!f.support.shrinkWrapBlocks&&f.each(["","X","Y"],function(a,b){h.style["overflow"+b]=i.overflow[a]}),i.hide&&f(h).hide();if(i.hide||i.show)for(b in i.animatedProperties)f.style(h,b,i.orig[b]),f.removeData(h,"fxshow"+b,!0),f.removeData(h,"toggle"+b,!0);d=i.complete,d&&(i.complete=!1,d.call(h))}return!1}i.duration==Infinity?this.now=e:(c=e-this.startTime,this.state=c/i.duration,this.pos=f.easing[i.animatedProperties[this.prop]](this.state,c,0,1,i.duration),this.now=this.start+(this.end-this.start)*this.pos),this.update();return!0}},f.extend(f.fx,{tick:function(){var a,b=f.timers,c=0;for(;c-1,k={},l={},m,n;j?(l=e.position(),m=l.top,n=l.left):(m=parseFloat(h)||0,n=parseFloat(i)||0),f.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),"using"in b?b.using.call(a,k):e.css(k)}},f.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),d=cx.test(b[0].nodeName)?{top:0,left:0}:b.offset();c.top-=parseFloat(f.css(a,"marginTop"))||0,c.left-=parseFloat(f.css(a,"marginLeft"))||0,d.top+=parseFloat(f.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(f.css(b[0],"borderLeftWidth"))||0;return{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&!cx.test(a.nodeName)&&f.css(a,"position")==="static")a=a.offsetParent;return a})}}),f.each(["Left","Top"],function(a,c){var d="scroll"+c;f.fn[d]=function(c){var e,g;if(c===b){e=this[0];if(!e)return null;g=cy(e);return g?"pageXOffset"in g?g[a?"pageYOffset":"pageXOffset"]:f.support.boxModel&&g.document.documentElement[d]||g.document.body[d]:e[d]}return this.each(function(){g=cy(this),g?g.scrollTo(a?f(g).scrollLeft():c,a?c:f(g).scrollTop()):this[d]=c})}}),f.each(["Height","Width"],function(a,c){var d=c.toLowerCase();f.fn["inner"+c]=function(){var a=this[0];return a?a.style?parseFloat(f.css(a,d,"padding")):this[d]():null},f.fn["outer"+c]=function(a){var b=this[0];return b?b.style?parseFloat(f.css(b,d,a?"margin":"border")):this[d]():null},f.fn[d]=function(a){var e=this[0];if(!e)return a==null?null:this;if(f.isFunction(a))return this.each(function(b){var c=f(this);c[d](a.call(this,b,c[d]()))});if(f.isWindow(e)){var g=e.document.documentElement["client"+c],h=e.document.body;return e.document.compatMode==="CSS1Compat"&&g||h&&h["client"+c]||g}if(e.nodeType===9)return Math.max(e.documentElement["client"+c],e.body["scroll"+c],e.documentElement["scroll"+c],e.body["offset"+c],e.documentElement["offset"+c]);if(a===b){var i=f.css(e,d),j=parseFloat(i);return f.isNumeric(j)?j:i}return this.css(d,typeof a=="string"?a:a+"px")}}),a.jQuery=a.$=f,typeof define=="function"&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return f})})(window); --------------------------------------------------------------------------------