235 Commitit 1f37fe7509 ... fd0f396124

Tekijä SHA1 Viesti Päivämäärä
  lsc fd0f396124 Merge branch 'beta' into HK 3 päivää sitten
  lsc 92393dfe3d update 4 päivää sitten
  lsc 0daf1ea7b0 update 4 päivää sitten
  lsc 48f233cfbc update 4 päivää sitten
  lsc c26c70e541 update 4 päivää sitten
  lsc c475e41a9f update 4 päivää sitten
  lsc 080a99ce12 update 4 päivää sitten
  lsc eb38749be4 update 4 päivää sitten
  lsc af76dcf6c1 update 5 päivää sitten
  lsc 7781be2578 update 5 päivää sitten
  lsc 2936c96ba6 update 5 päivää sitten
  lsc f7dc36ddc5 update 5 päivää sitten
  lsc 76c4a59f72 update 5 päivää sitten
  lsc d34b58457f update 5 päivää sitten
  lsc f79bb29b66 update 5 päivää sitten
  lsc cf22f21a3f update 5 päivää sitten
  lsc 00348fb8a3 update 5 päivää sitten
  lsc 4e97f841a6 update 5 päivää sitten
  lsc f9d2f1cde7 update 5 päivää sitten
  lsc 25cca1c79c update 5 päivää sitten
  lsc cc1ef3a3cd update 6 päivää sitten
  lsc 6cce412e48 update 6 päivää sitten
  lsc c4b0cbfd7b Merge branch 'beta' of https://git.cocorobo.cn/CocoRoboLabs/CocoRoboDesktop into beta 6 päivää sitten
  lsc d125f2ff09 update 6 päivää sitten
  jack c12e5e46b2 update 1 viikko sitten
  lsc da98df968b update 1 viikko sitten
  lsc f32799d221 update 1 viikko sitten
  lsc 68a16f080c Merge branch 'beta' of https://git.cocorobo.cn/CocoRoboLabs/CocoRoboDesktop into beta 1 viikko sitten
  lsc ccbf229126 update 1 viikko sitten
  jack 9f4a041749 Merge branch 'beta' of https://git.cocorobo.cn/CocoRoboLabs/CocoRoboDesktop into beta 1 viikko sitten
  jack 6e4c755c86 update 1 viikko sitten
  lsc 8e8d2ca8f8 update 1 viikko sitten
  lsc d6e3d2015d update 1 viikko sitten
  lsc d9df210541 Merge branch 'beta' of https://git.cocorobo.cn/CocoRoboLabs/CocoRoboDesktop into beta 1 viikko sitten
  lsc 6d0acdec82 update 1 viikko sitten
  jack 500955b7de update 1 viikko sitten
  lsc b920b245c9 update 1 viikko sitten
  lsc 3307cda1f6 update 1 viikko sitten
  lsc 3475969330 update 1 viikko sitten
  lsc d149769e87 update 2 viikkoa sitten
  lsc 2e66c1c4e0 update 2 viikkoa sitten
  lsc 458df64e1e update 2 viikkoa sitten
  lsc c2ced66326 update 2 viikkoa sitten
  lsc 1b11695564 update 2 viikkoa sitten
  lsc 5bf149adc3 Merge branch 'beta' 2 viikkoa sitten
  lsc facb88f6df update 2 viikkoa sitten
  lsc ac0e6f5c60 Merge branch 'beta' 2 viikkoa sitten
  lsc dd000a043f update 2 viikkoa sitten
  lsc 594f0725d0 update 2 viikkoa sitten
  lsc c20de00d66 update 2 viikkoa sitten
  lsc 1856ff4ef3 update 2 viikkoa sitten
  lsc e618df7213 update 2 viikkoa sitten
  lsc 300372a85a update 2 viikkoa sitten
  lsc 928f6af846 update 2 viikkoa sitten
  lsc 90a099f0eb update 2 viikkoa sitten
  lsc e7fc0d1c02 update 2 viikkoa sitten
  lsc 0d1f0fd46e update 2 viikkoa sitten
  lsc f7f4b2518d update 2 viikkoa sitten
  lsc 4f5df15398 update 2 viikkoa sitten
  lsc 4e95a3dfb8 update 2 viikkoa sitten
  lsc 18988b6eb9 update 2 viikkoa sitten
  lsc a598269d8b update 2 viikkoa sitten
  lsc 47edfafde0 update 2 viikkoa sitten
  lsc 7158e34bff update 2 viikkoa sitten
  lsc 9b4855a212 update 2 viikkoa sitten
  lsc a2516b6b14 update 2 viikkoa sitten
  lsc 74776f6b2a update 2 viikkoa sitten
  lsc b025e8d0bc update 2 viikkoa sitten
  lsc a30bec9626 update 2 viikkoa sitten
  lsc 1d49957541 update 2 viikkoa sitten
  lsc 934dbadcd2 update 2 viikkoa sitten
  lsc 580ce05869 Merge branch 'beta' 2 viikkoa sitten
  lsc aace58a021 Merge branch 'beta' 2 viikkoa sitten
  lsc 2fc263649c Merge branch 'beta' 3 viikkoa sitten
  lsc 62b4610594 Merge branch 'beta' 3 viikkoa sitten
  lsc 08a6d816c4 update 3 viikkoa sitten
  lsc 727f3f340e update 3 viikkoa sitten
  lsc 51293d63d3 update 3 viikkoa sitten
  lsc 4b258d0ee0 update 3 viikkoa sitten
  lsc 57b04ab206 Merge branch 'beta' 3 viikkoa sitten
  lsc 0dc38e0e43 Merge branch 'beta' 4 viikkoa sitten
  lsc e865e5d0dc Merge branch 'beta' 1 kuukausi sitten
  lsc c4e5a02879 Merge branch 'beta' 1 kuukausi sitten
  lsc 3f06d2d240 Merge branch 'beta' 1 kuukausi sitten
  lsc 6082e4b53e Merge branch 'beta' 1 kuukausi sitten
  lsc ee1ceb3153 Merge branch 'beta' 1 kuukausi sitten
  lsc de56995f59 Merge branch 'beta' 1 kuukausi sitten
  lsc 9f401f5f44 Merge branch 'beta' 1 kuukausi sitten
  lsc 8531bfe510 Merge branch 'beta' 1 kuukausi sitten
  lsc 08cf69d2f6 Merge branch 'beta' 1 kuukausi sitten
  lsc a27c9d75d2 Merge branch 'beta' 1 kuukausi sitten
  lsc 60f8a7949e Merge branch 'beta' 2 kuukautta sitten
  lsc ea0514a3f7 Merge branch 'beta' 2 kuukautta sitten
  lsc 89c60402b0 Merge branch 'beta' 2 kuukautta sitten
  lsc 402a7344c0 Merge branch 'beta' 2 kuukautta sitten
  lsc d8d7e75475 update 2 kuukautta sitten
  lsc c0dea24607 Merge branch 'beta' 2 kuukautta sitten
  lsc dc62e93d01 Merge branch 'beta' 2 kuukautta sitten
  lsc cc3515a3f1 Merge branch 'beta' 2 kuukautta sitten
  lsc 897c2b3e71 Merge branch 'beta' 3 kuukautta sitten
  lsc 775f0e1899 Merge branch 'beta' 3 kuukautta sitten
  lsc 0e8ab92303 Merge branch 'beta' 3 kuukautta sitten
  lsc 8105ca6211 Merge branch 'beta' 3 kuukautta sitten
  lsc 8a302d03e0 Merge branch 'beta' 3 kuukautta sitten
  lsc 9500e539fd Merge branch 'beta' 3 kuukautta sitten
  lsc d6262b52a8 Merge branch 'beta' 3 kuukautta sitten
  lsc 1de07b5465 Merge branch 'beta' 3 kuukautta sitten
  lsc 2c243114fc Merge branch 'beta' 3 kuukautta sitten
  lsc 64589d4da5 Merge branch 'beta' 3 kuukautta sitten
  lsc 4add8fb3aa Merge branch 'beta' 3 kuukautta sitten
  lsc bac9dd226c Merge branch 'beta' 4 kuukautta sitten
  lsc 7283e6a7ac Merge branch 'beta' 4 kuukautta sitten
  lsc dd38717f78 Merge branch 'beta' 4 kuukautta sitten
  lsc 6cdad42f1e Merge branch 'beta' 4 kuukautta sitten
  lsc 85e3ba97fc Merge branch 'beta' 4 kuukautta sitten
  lsc f3e8cb709e Merge branch 'beta' 4 kuukautta sitten
  lsc 4e0ce569df Merge branch 'beta' 4 kuukautta sitten
  lsc 222c867f41 Merge branch 'beta' 4 kuukautta sitten
  lsc 6eec59857b Merge branch 'beta' 4 kuukautta sitten
  lsc af8aa31bcc Merge branch 'beta' 4 kuukautta sitten
  lsc 00ff4cdf33 Merge branch 'beta' 4 kuukautta sitten
  lsc b34724450e Merge branch 'beta' 4 kuukautta sitten
  lsc 96e5acd2ed Merge branch 'beta' 5 kuukautta sitten
  lsc b3bee56679 Merge branch 'beta' 5 kuukautta sitten
  lsc 6c8233ff5f Merge branch 'beta' 5 kuukautta sitten
  lsc e850cec41c Merge branch 'beta' 5 kuukautta sitten
  lsc 93d775d819 Merge branch 'beta' 5 kuukautta sitten
  lsc f1f4eaf0c3 Merge branch 'beta' 5 kuukautta sitten
  lsc 9997989c6d Merge branch 'beta' 5 kuukautta sitten
  lsc e76085a794 Merge branch 'beta' 5 kuukautta sitten
  lsc 61ce7c10a7 Merge branch 'beta' 5 kuukautta sitten
  lsc e7261818ff Merge branch 'beta' 5 kuukautta sitten
  lsc 65acde172e Merge branch 'beta' 5 kuukautta sitten
  lsc 8395a88b12 Merge branch 'beta' 6 kuukautta sitten
  lsc 422c40cc80 Merge branch 'beta' 6 kuukautta sitten
  lsc 0c1bfd454e Merge branch 'beta' 6 kuukautta sitten
  lsc e1eb7f5ac0 Merge branch 'beta' 6 kuukautta sitten
  lsc 77d6efc74c update 6 kuukautta sitten
  lsc f97ebfa66a Merge branch 'beta' 6 kuukautta sitten
  lsc b938bed1b8 Merge branch 'beta' 6 kuukautta sitten
  lsc e839e0815c Merge branch 'beta' 6 kuukautta sitten
  lsc 921ac603a6 Merge branch 'beta' 6 kuukautta sitten
  lsc eb2a7e6e05 Merge branch 'beta' 6 kuukautta sitten
  lsc 0f7c77d547 Merge branch 'beta' 6 kuukautta sitten
  lsc a2d23c91db Merge branch 'beta' 8 kuukautta sitten
  lsc d96e0d703e Merge branch 'beta' 8 kuukautta sitten
  lsc d83281756f Merge branch 'beta' 8 kuukautta sitten
  lsc 49c8553bc0 Merge branch 'beta' 8 kuukautta sitten
  lsc af67afb718 Merge branch 'beta' 8 kuukautta sitten
  lsc c0bb8f44be Merge branch 'beta' 8 kuukautta sitten
  lsc fcc76a8095 Merge branch 'beta' 8 kuukautta sitten
  lsc dc45ab33a9 Merge branch 'beta' 9 kuukautta sitten
  lsc f1b457750d Merge branch 'beta' 9 kuukautta sitten
  lsc 2b0f6ac4a4 Merge branch 'beta' 9 kuukautta sitten
  lsc 0bed7c5c3b Merge branch 'beta' 9 kuukautta sitten
  lsc a87ae0312e Merge branch 'beta' 9 kuukautta sitten
  lsc 55b4975b20 Merge branch 'beta' 9 kuukautta sitten
  lsc 86d00ba222 Merge branch 'beta' 9 kuukautta sitten
  lsc 54fddb0fd5 update 9 kuukautta sitten
  lsc e2db7d5eb4 Merge branch 'beta' 9 kuukautta sitten
  lsc 7b03b4e782 Merge branch 'beta' 9 kuukautta sitten
  lsc badd7b5afd Merge branch 'beta' 9 kuukautta sitten
  lsc a02959e8fb Merge branch 'beta' 9 kuukautta sitten
  lsc 713cdaf1d9 Merge branch 'beta' 9 kuukautta sitten
  lsc 5848e9e92f Merge branch 'beta' 9 kuukautta sitten
  lsc 51ce097ef2 Merge branch 'beta' 9 kuukautta sitten
  lsc 346cd57416 Merge branch 'beta' 9 kuukautta sitten
  lsc 5d17caaff1 Merge branch 'beta' 9 kuukautta sitten
  lsc 7d853d1e7d Merge branch 'beta' 10 kuukautta sitten
  lsc ff0add1aea Merge branch 'beta' 10 kuukautta sitten
  lsc f73e744cd5 Merge remote-tracking branch 'origin/beta' 10 kuukautta sitten
  lsc d935e77b16 update 10 kuukautta sitten
  lsc 1db01b9278 Merge branch 'beta' 10 kuukautta sitten
  lsc 7ac6ebca3f Merge branch 'beta' 10 kuukautta sitten
  lsc 7989780644 Merge branch 'beta' 11 kuukautta sitten
  lsc ba39685b6a Merge branch 'beta' 11 kuukautta sitten
  lsc ee06158b8c Merge branch 'master' of https://git.cocorobo.cn/CocoRoboLabs/CocoRoboDesktop 11 kuukautta sitten
  lsc 0686e966a0 Merge branch 'beta' 11 kuukautta sitten
  root e5e7a97dc4 Merge branch 'beta' 11 kuukautta sitten
  root 4514abcc76 Merge branch 'beta' 11 kuukautta sitten
  lsc 2f620b52a4 Merge branch 'beta' 11 kuukautta sitten
  lsc 4808766636 Merge branch 'beta' 11 kuukautta sitten
  lsc e0035c09fa Merge branch 'beta' 11 kuukautta sitten
  lsc fb9d9ba7a2 Merge branch 'beta' 11 kuukautta sitten
  lsc 143d02ff9d Merge branch 'beta' 11 kuukautta sitten
  lsc da30cbdbcc update 1 vuosi sitten
  lsc cbecae9468 Merge branch 'beta' 1 vuosi sitten
  lsc 539267416f Merge branch 'beta' 1 vuosi sitten
  lsc c10f04130f Merge branch 'beta' 1 vuosi sitten
  lsc 40d78ba0a4 Merge branch 'beta' 1 vuosi sitten
  lsc 96ddc970e1 Merge branch 'beta' 1 vuosi sitten
  lsc 9fac062f8d Merge branch 'beta' 1 vuosi sitten
  lsc 6fa2747cd2 Merge branch 'beta' 1 vuosi sitten
  lsc 3ed121b1a1 Merge branch 'beta' 1 vuosi sitten
  lsc 8619cd86ca Merge branch 'beta' 1 vuosi sitten
  lsc 0b34ae7840 Merge branch 'beta' 1 vuosi sitten
  lsc 06e5195011 Merge branch 'beta' 1 vuosi sitten
  lsc 9e6fe8b11d Merge branch 'beta' 1 vuosi sitten
  lsc 5665279130 Merge branch 'beta' 1 vuosi sitten
  lsc b56d905457 Merge branch 'beta' 1 vuosi sitten
  lsc 661fccf84a Merge branch 'beta' 1 vuosi sitten
  lsc efbf888ab7 Merge branch 'beta' 1 vuosi sitten
  lsc 9f853d5012 Merge branch 'beta' 1 vuosi sitten
  lsc d916fb08cd Merge branch 'beta' 1 vuosi sitten
  lsc 3d9ee9f282 Merge branch 'beta' 1 vuosi sitten
  lsc d40ec7cdd4 Merge branch 'beta' 1 vuosi sitten
  lsc d56a30fbea Merge branch 'beta' 1 vuosi sitten
  lsc 4f4e8e4511 Merge branch 'beta' 1 vuosi sitten
  lsc c0a8c2b47a update 1 vuosi sitten
  lsc a575f11520 Merge branch 'beta' 1 vuosi sitten
  lsc cfba45b96b Merge branch 'beta' 1 vuosi sitten
  lsc c3b0a4596d Merge branch 'beta' 1 vuosi sitten
  lsc e8213509bb Merge branch 'beta' 1 vuosi sitten
  lsc c7fff17124 Merge branch 'beta' 1 vuosi sitten
  lsc d0147ed2d3 Merge branch 'beta' 1 vuosi sitten
  lsc 3ae1f7511c Merge branch 'beta' 1 vuosi sitten
  lsc b7cfd82234 Merge branch 'beta' 1 vuosi sitten
  lsc 369ce1765a Merge branch 'beta' 1 vuosi sitten
  lsc d5d4a0f291 Merge branch 'beta' 1 vuosi sitten
  lsc fb20eccf32 Merge branch 'beta' 1 vuosi sitten
  lsc abf7cf897d Merge branch 'beta' 1 vuosi sitten
  lsc 925f96e4cf Merge branch 'beta' 1 vuosi sitten
  lsc f993a0a518 Merge branch 'beta' 1 vuosi sitten
  lsc fced0ee6e9 Merge branch 'beta' 1 vuosi sitten
  lsc 1515dbbcee Merge branch 'beta' 1 vuosi sitten
  lsc 732a1d3afc Merge branch 'beta' 1 vuosi sitten
  lsc 8fc6c57369 Merge branch 'beta' 1 vuosi sitten
  lsc 65706bbcba Merge branch 'beta' 1 vuosi sitten
  lsc a2c03a8d58 Merge branch 'beta' 1 vuosi sitten
  lsc aac6b28b31 Merge branch 'beta' 1 vuosi sitten
  lsc 9af7c76954 Merge branch 'beta' 1 vuosi sitten
  lsc 775a3d374a Merge branch 'beta' 1 vuosi sitten
  lsc 391c38da09 update 1 vuosi sitten
  lsc 987b7f45d4 update 1 vuosi sitten
  lsc d196a24cfe Merge branch 'beta' 1 vuosi sitten

BIN
img/icon/EDU.png


BIN
img/icon/knowledge.png


BIN
img/icon/sassPlatForm.png


+ 1 - 1
index.html

@@ -161,7 +161,7 @@
                 </div>
             </div>
             <div class="U_PBL_Check2">
-                <!-- <div class="active" onclick="U.MD.D.I.openApplication('userExamine')"><span>申请使用</span></div> -->
+                <div class="active" onclick="U.MD.D.I.openApplication('userExamine')"><span>申请使用</span></div>
             </div>
             <div class="U_PBL_Check">
                 <div class="active" onclick="U.MD.D.I.ModeCheck(1)"><span>標準模式</span></div>

+ 52 - 0
js/Common/uploadR2R.js

@@ -0,0 +1,52 @@
+window.uploadFile = async function ({ file, uuid, userid, folderid, moFolderid }) {
+  const allowedExtensions = [
+    "csv", "xls", "xlsx", "md", "pdf", "txt", "ppt", "pptx", "docx"
+  ];
+
+  const fileExtension = file.name.split('.').pop().toLowerCase();
+
+  if (!allowedExtensions.includes(fileExtension)) {
+    return { code: 400, msg: `不支持的文件格式: ${file.name}` }
+  }
+
+  let formData = new FormData();
+  const timestamp = Date.now();
+  const baseName = file.name.slice(0, -(fileExtension.length + 1));
+  let string = [folderid, moFolderid].filter(id => id);
+  formData.append('file', new File([file], `${baseName}${timestamp}.${fileExtension}`));
+  formData.append('collection_ids', JSON.stringify(string));
+  formData.append('id', uuid);
+  formData.append('metadata', JSON.stringify({ title: file.name, collection_ids: string }));
+  formData.append('ingestion_mode', "fast");
+
+  try {
+    fetch("https://r2rserver.cocorobo.cn/v3/documents", {
+      method: 'POST',
+      body: formData,
+      headers: {
+        'Accept': 'application/json',
+      }
+    });
+
+    let params = new URLSearchParams({
+      n: file.name,
+      did: uuid,
+      uid: userid,
+      fid: folderid,
+      mofid: moFolderid !== folderid ? moFolderid : ""
+    }).toString();
+    const res2 = await fetch('https://r2rapi.cocorobo.cn/file/addFile', {
+      method: 'POST',
+      headers: {
+        'Content-Type': 'application/x-www-form-urlencoded'
+      },
+      body: params
+    });
+    console.log("上传成功");
+    return { code: 200, msg: "上传成功" }
+  } catch (err) {
+    console.error(err);
+    console.error("上传失败");
+    return { code: 400, msg: "上传失败" }
+  }
+}

+ 260 - 40
js/Desktop/DeskTop.js

@@ -104,9 +104,10 @@ U.MD.D.I.teacherDeskIcon2 = [
     // { "Name": "賽諾梵", "Url": "snf", "style": { "cssText": "background-image:url(/img/icon/snf.png)" } },
     // { "Name": "漢字宮", "Url": "han", "style": { "cssText": "background-image:url(/img/icon/han.png)" } },
     // { "Name": "jupyter", "Url": "jupyter", "style": { "cssText": "background-image:url(/img/icon/jupyter.png)" } },
-    // { "Name": "數據看板", "Url": "dataBoard", "style": { "cssText": "background-image:url(/img/icon/dataBoard.png)" } },
-    { "Name": "協同建構", "Url": "futureClass", "style": { "cssText": "background-image:url(/img/icon/futureClass.png)" } },
-    { "Name": "綜合看板", "Url": "dataBoardNew", "style": { "cssText": "background-image:url(/img/icon/dataBoardNew.png)" } },
+    // { "Name": "数据看板", "Url": "dataBoard", "style": { "cssText": "background-image:url(/img/icon/dataBoard.png)" } },
+    { "Name": "协同建构", "Url": "futureClass", "style": { "cssText": "background-image:url(/img/icon/futureClass.png)" } },
+    { "Name": "综合看板", "Url": "dataBoardNew", "style": { "cssText": "background-image:url(/img/icon/dataBoardNew.png)" } },
+    { "Name": "CocoFlow", "Url": "appStore", "style": { "cssText": "background-image:url(/img/icon/appStore.png)" } },
 ];
 
 U.MD.D.I.studentDeskIcon = [
@@ -637,6 +638,7 @@ U.MD.D.I.siesStudentDeskIcon = [
     { "Name": "協同建構", "Url": "futureClass", "style": { "cssText": "background-image:url(/img/icon/futureClass.png)" } },
     // { "Name": "AI助手", "Url": "gpt4", "style": { "cssText": "background-image:url(/img/icon/gpt4.png)" } },
     { "Name": "AI助手+", "Url": "aigpt", "style": { "cssText": "background-image:url(/img/icon/aigpt.png)" } },
+    { "Name": "CocoFlow", "Url": "appStore", "style": { "cssText": "background-image:url(/img/icon/appStore.png)" } },
 ];
 
 //中山小學教師桌面圖標的全局變量
@@ -1040,10 +1042,11 @@ U.MD.D.I.szjkyAdminDeskIcon = [
 
 //未來教育基地
 U.MD.D.I.szjkyStudentDeskIcon = [
-    { "Name": "課程中心", "Url": "studentStudy", "style": { "cssText": "background-image:url(/img/icon/study.png)" } },
-    { "Name": "項目管理", "Url": "studentCourse", "style": { "cssText": "background-image:url(/img/icon/studentCourse.png)" } },
-    { "Name": "項目中心", "Url": "studentIndex", "style": { "cssText": "background-image:url(/img/icon/studentIndex.png)" } },
-    { "Name": "協同建構", "Url": "futureClass", "style": { "cssText": "background-image:url(/img/icon/futureClass.png)" } },
+    { "Name": "课程中心", "Url": "studentStudy", "style": { "cssText": "background-image:url(/img/icon/study.png)" } },
+    { "Name": "项目管理", "Url": "studentCourse", "style": { "cssText": "background-image:url(/img/icon/studentCourse.png)" } },
+    { "Name": "项目中心", "Url": "studentIndex", "style": { "cssText": "background-image:url(/img/icon/studentIndex.png)" } },
+    { "Name": "协同建构", "Url": "futureClass", "style": { "cssText": "background-image:url(/img/icon/futureClass.png)" } },
+    { "Name": "CocoFlow", "Url": "appStore", "style": { "cssText": "background-image:url(/img/icon/appStore.png)" } },
 ];
 
 //成華教育局
@@ -1457,9 +1460,10 @@ U.MD.D.I.nsfxTeacherDeskIcon = [
     { "Name": "協同建構", "Url": "futureClass", "style": { "cssText": "background-image:url(/img/icon/futureClass.png)" } },
     { "Name": "綜合看板", "Url": "dataBoardNew", "style": { "cssText": "background-image:url(/img/icon/dataBoardNew.png)" } },
     { "Name": "AI助手+", "Url": "aigpt", "style": { "cssText": "background-image:url(/img/icon/aigpt.png)" } },
-    { "Name": "智能表單", "Url": "testTeacher", "style": { "cssText": "background-image:url(/img/icon/testTeacher.png)" } },
-    { "Name": "教師中心", "Url": "testStudentSies", "style": { "cssText": "background-image:url(/img/icon/testStudent.png)" } },
-    { "Name": "知識建構", "Url": "aiKnowledge", "style": { "cssText": "background-image:url(/img/icon/aiKnowledge.png)" } },
+    { "Name": "智能表单", "Url": "testTeacher", "style": { "cssText": "background-image:url(/img/icon/testTeacher.png)" } },
+    { "Name": "教师中心", "Url": "testStudentSies", "style": { "cssText": "background-image:url(/img/icon/testStudent.png)" } },
+    { "Name": "知识建构", "Url": "aiKnowledge", "style": { "cssText": "background-image:url(/img/icon/aiKnowledge.png)" } },
+    { "Name": "CocoFlow", "Url": "appStore", "style": { "cssText": "background-image:url(/img/icon/appStore.png)" } },
 ];
 
 //nsfx
@@ -1472,20 +1476,21 @@ U.MD.D.I.nsfxStudentDeskIcon = [
 
 //stia
 U.MD.D.I.stiaTeacherDeskIcon = [
-    { "Name": "課程管理", "Url": "project", "style": { "cssText": "background-image:url(/img/icon/project.png)" } },
-    { "Name": "課程中心", "Url": "study", "style": { "cssText": "background-image:url(/img/icon/study.png)" } },
-    { "Name": "學生管理", "Url": "student", "style": { "cssText": "background-image:url(/img/icon/student.png)" } },
-    { "Name": "學生評價", "Url": "evaluate", "style": { "cssText": "background-image:url(/img/icon/evaluation.png)" } },
-    { "Name": "項目管理", "Url": "studentCourseS", "style": { "cssText": "background-image:url(/img/icon/studentCourse.png)" } },
-    { "Name": "項目中心", "Url": "studentIndex", "style": { "cssText": "background-image:url(/img/icon/studentIndex.png)" } },
-    { "Name": "教研室", "Url": "teacherOffice", "style": { "cssText": "background-image:url(/img/icon/teacherOffice.png)" } },
-    { "Name": "協同建構", "Url": "futureClass", "style": { "cssText": "background-image:url(/img/icon/futureClass.png)" } },
-    { "Name": "綜合看板", "Url": "dataBoardNew", "style": { "cssText": "background-image:url(/img/icon/dataBoardNew.png)" } },
-    { "Name": "智能表單", "Url": "testTeacher", "style": { "cssText": "background-image:url(/img/icon/testTeacher.png)" } },
-    { "Name": "教師中心", "Url": "testStudentSies", "style": { "cssText": "background-image:url(/img/icon/testStudent.png)" } },
-    { "Name": "AI助手+", "Url": "aigpt", "style": { "cssText": "background-image:url(/img/icon/aigpt.png)" } },
-    { "Name": "課堂觀察", "Url": "classroomObservation", "style": { "cssText": "background-image:url(/img/icon/classroomObservation.png)" } },
+    // { "Name": "课程管理", "Url": "project", "style": { "cssText": "background-image:url(/img/icon/project.png)" } },
+    // { "Name": "课程中心", "Url": "study", "style": { "cssText": "background-image:url(/img/icon/study.png)" } },
+    // { "Name": "学生管理", "Url": "student", "style": { "cssText": "background-image:url(/img/icon/student.png)" } },
+    // { "Name": "学生评价", "Url": "evaluate", "style": { "cssText": "background-image:url(/img/icon/evaluation.png)" } },
+    // { "Name": "项目管理", "Url": "studentCourseS", "style": { "cssText": "background-image:url(/img/icon/studentCourse.png)" } },
+    // { "Name": "项目中心", "Url": "studentIndex", "style": { "cssText": "background-image:url(/img/icon/studentIndex.png)" } },
+    // { "Name": "教研室", "Url": "teacherOffice", "style": { "cssText": "background-image:url(/img/icon/teacherOffice.png)" } },
+    // { "Name": "协同建构", "Url": "futureClass", "style": { "cssText": "background-image:url(/img/icon/futureClass.png)" } },
+    // { "Name": "综合看板", "Url": "dataBoardNew", "style": { "cssText": "background-image:url(/img/icon/dataBoardNew.png)" } },
+    // { "Name": "智能表单", "Url": "testTeacher", "style": { "cssText": "background-image:url(/img/icon/testTeacher.png)" } },
+    // { "Name": "教师中心", "Url": "testStudentSies", "style": { "cssText": "background-image:url(/img/icon/testStudent.png)" } },
+    // { "Name": "AI助手+", "Url": "aigpt", "style": { "cssText": "background-image:url(/img/icon/aigpt.png)" } },
+    // { "Name": "课堂观察", "Url": "classroomObservation", "style": { "cssText": "background-image:url(/img/icon/classroomObservation.png)" } },
     { "Name": "CocoFlow", "Url": "appStore", "style": { "cssText": "background-image:url(/img/icon/appStore.png)" } },
+    // { "Name": "编程平台", "Url": "program", "style": { "cssText": "background-image:url(/img/icon/program.png)" } },
 ];
 
 //stia
@@ -1681,8 +1686,9 @@ U.MD.D.I.x010204StudentDeskIcon = [
 
 //trail
 U.MD.D.I.trailTeacherDeskIcon = [
-    { "Name": "課程管理", "Url": "project", "style": { "cssText": "background-image:url(/img/icon/project.png)" } },
-    { "Name": "課程中心", "Url": "study", "style": { "cssText": "background-image:url(/img/icon/study.png)" } },
+    { "Name": "课程管理", "Url": "project", "style": { "cssText": "background-image:url(/img/icon/project.png)" } },
+    { "Name": "课程中心", "Url": "study", "style": { "cssText": "background-image:url(/img/icon/study.png)" } },
+    { "Name": "CocoFlow", "Url": "appStore", "style": { "cssText": "background-image:url(/img/icon/appStore.png)" } },
 ];
 
 //trail
@@ -1702,9 +1708,10 @@ U.MD.D.I.x010504TeacherDeskIcon = [
     { "Name": "項目管理", "Url": "studentCourseS", "style": { "cssText": "background-image:url(/img/icon/studentCourse.png)" } },
     { "Name": "項目中心", "Url": "studentIndex", "style": { "cssText": "background-image:url(/img/icon/studentIndex.png)" } },
     { "Name": "教研室", "Url": "teacherOffice", "style": { "cssText": "background-image:url(/img/icon/teacherOffice.png)" } },
-    { "Name": "協同建構", "Url": "futureClass", "style": { "cssText": "background-image:url(/img/icon/futureClass.png)" } },
-    { "Name": "智能表單", "Url": "testTeacher", "style": { "cssText": "background-image:url(/img/icon/testTeacher.png)" } },
-    { "Name": "教師中心", "Url": "testStudentSies", "style": { "cssText": "background-image:url(/img/icon/testStudent.png)" } },
+    { "Name": "协同建构", "Url": "futureClass", "style": { "cssText": "background-image:url(/img/icon/futureClass.png)" } },
+    { "Name": "智能表单", "Url": "testTeacher", "style": { "cssText": "background-image:url(/img/icon/testTeacher.png)" } },
+    { "Name": "教师中心", "Url": "testStudentSies", "style": { "cssText": "background-image:url(/img/icon/testStudent.png)" } },
+    { "Name": "CocoFlow", "Url": "appStore", "style": { "cssText": "background-image:url(/img/icon/appStore.png)" } },
 ];
 
 //010504
@@ -1863,6 +1870,7 @@ U.MD.D.I.tianyuanTeacherDeskIcon = [
     { "Name": "協同建構", "Url": "futureClass", "style": { "cssText": "background-image:url(/img/icon/futureClass.png)" } },
     { "Name": "綜合看板", "Url": "dataBoardNew", "style": { "cssText": "background-image:url(/img/icon/dataBoardNew.png)" } },
     { "Name": "AI助手+", "Url": "aigpt", "style": { "cssText": "background-image:url(/img/icon/aigpt.png)" } },
+    { "Name": "EDU", "Url": "EDU", "style": { "cssText": "background-image:url(/img/icon/EDU.png)" } },
 ];
 
 //010611
@@ -1873,6 +1881,87 @@ U.MD.D.I.tianyuanStudentDeskIcon = [
     { "Name": "協同建構", "Url": "futureClass", "style": { "cssText": "background-image:url(/img/icon/futureClass.png)" } },
 ];
 
+//320101
+U.MD.D.I.x320101TeacherDeskIcon = [
+    { "Name": "课程管理", "Url": "project", "style": { "cssText": "background-image:url(/img/icon/project.png)" } },
+    { "Name": "课程中心", "Url": "study", "style": { "cssText": "background-image:url(/img/icon/study.png)" } },
+    { "Name": "学生管理", "Url": "student", "style": { "cssText": "background-image:url(/img/icon/student.png)" } },
+    { "Name": "学生评价", "Url": "evaluate", "style": { "cssText": "background-image:url(/img/icon/evaluation.png)" } },
+    { "Name": "项目管理", "Url": "studentCourseS", "style": { "cssText": "background-image:url(/img/icon/studentCourse.png)" } },
+    { "Name": "项目中心", "Url": "studentIndex", "style": { "cssText": "background-image:url(/img/icon/studentIndex.png)" } },
+    { "Name": "教研室", "Url": "teacherOffice", "style": { "cssText": "background-image:url(/img/icon/teacherOffice.png)" } },
+    { "Name": "年级管理", "Url": "Grade", "style": { "cssText": "background-image:url(/img/icon/Grade.png)" } },
+    { "Name": "班级管理", "Url": "class", "style": { "cssText": "background-image:url(/img/icon/class.png)" } },
+    { "Name": "我的资料", "Url": "my", "style": { "cssText": "background-image:url(/img/icon/myMessage.png)" } },
+    { "Name": "通知公告", "Url": "notice", "style": { "cssText": "background-image:url(/img/icon/news.png)" } },
+    { "Name": "素材库", "Url": "library", "style": { "cssText": "background-image:url(/img/icon/library.png)" } },
+    { "Name": "电子白板", "Url": "whiteboard", "style": { "cssText": "background-image:url(/img/icon/whiteBoard.png)" } },
+    { "Name": "问卷调查", "Url": "investigation", "style": { "cssText": "background-image:url(/img/icon/ask.png)" } },
+    { "Name": "便签分类", "Url": "note", "style": { "cssText": "background-image:url(/img/icon/note.png)" } },
+    { "Name": "思维导图", "Url": "mind", "style": { "cssText": "background-image:url(/img/icon/mindMapping.png)" } },
+    { "Name": "协同文档", "Url": "doc", "style": { "cssText": "background-image:url(/img/icon/doc.png)" } },
+    { "Name": "思维网格", "Url": "mindNetwork", "style": { "cssText": "background-image:url(/img/icon/mindNetwork.png)" } },
+    { "Name": "目标管理", "Url": "sys", "style": { "cssText": "background-image:url(/img/icon/evalua.png)" } },
+    { "Name": "项目设计", "Url": "courseDesign", "style": { "cssText": "background-image:url(/img/icon/courseDesign.png)" } },
+    { "Name": "训练平台", "Url": "train", "style": { "cssText": "background-image:url(/img/icon/trainPlatform.png)" } },
+    { "Name": "编程平台", "Url": "program", "style": { "cssText": "background-image:url(/img/icon/program.png)" } },
+    { "Name": "AI体验", "Url": "AIprogram2", "style": { "cssText": "background-image:url(/img/icon/AIprogram2.png)" } },
+    { "Name": "Python", "Url": "Pythonprogram", "style": { "cssText": "background-image:url(/img/icon/Pythonprogram.png)" } },
+    { "Name": "AI编程", "Url": "AIprogram", "style": { "cssText": "background-image:url(/img/icon/AIprogram.png)" } },
+    { "Name": "源码编辑", "Url": "codeEdit", "style": { "cssText": "background-image:url(/img/icon/code.png)" } },
+    { "Name": "MindMap", "Url": "MindMap", "style": { "cssText": "background-image:url(/img/icon/MIndMap.png)" } },
+    { "Name": "翻译", "Url": "translation", "style": { "cssText": "background-image:url(/img/icon/translation.png)" } },
+    { "Name": "魔盒识字", "Url": "mohe", "style": { "cssText": "background-image:url(/img/icon/mohe.png)" } },
+    { "Name": "24点", "Url": "24game", "style": { "cssText": "background-image:url(/img/icon/24game.png)" } },
+    { "Name": "数学画板", "Url": "netWorkPanel", "style": { "cssText": "background-image:url(/img/icon/networkPanel.png)" } },
+    { "Name": "GeoGebra", "Url": "GeoGebra", "style": { "cssText": "background-image:url(/img/icon/GeoGebra.png)" } },
+    { "Name": "课程进展", "Url": "case", "style": { "cssText": "background-image:url(/img/icon/case.png)" } },
+    { "Name": "教学资源", "Url": "source", "style": { "cssText": "background-image:url(/img/icon/source.png)" } },
+    { "Name": "协同建构", "Url": "futureClass", "style": { "cssText": "background-image:url(/img/icon/futureClass.png)" } },
+    { "Name": "综合看板", "Url": "dataBoardNew", "style": { "cssText": "background-image:url(/img/icon/dataBoardNew.png)" } },
+    { "Name": "AI助手+", "Url": "aigpt", "style": { "cssText": "background-image:url(/img/icon/aigpt.png)" } },
+    { "Name": "CocoFlow", "Url": "appStore", "style": { "cssText": "background-image:url(/img/icon/appStore.png)" } },
+];
+
+//320101
+U.MD.D.I.x320101StudentDeskIcon = [
+    { "Name": "项目管理", "Url": "studentCourse", "style": { "cssText": "background-image:url(/img/icon/studentCourse.png)" } },
+    { "Name": "项目中心", "Url": "studentIndex", "style": { "cssText": "background-image:url(/img/icon/studentIndex.png)" } },
+    { "Name": "课程中心", "Url": "studentStudy", "style": { "cssText": "background-image:url(/img/icon/study.png)" } },
+    { "Name": "协同建构", "Url": "futureClass", "style": { "cssText": "background-image:url(/img/icon/futureClass.png)" } },
+];
+
+//szsy
+U.MD.D.I.szsyTeacherDeskIcon = [
+    { "Name": "课程管理", "Url": "project", "style": { "cssText": "background-image:url(/img/icon/project.png)" } },
+    { "Name": "课程中心", "Url": "study", "style": { "cssText": "background-image:url(/img/icon/study.png)" } },
+    { "Name": "项目管理", "Url": "studentCourseS", "style": { "cssText": "background-image:url(/img/icon/studentCourse.png)" } },
+    { "Name": "项目中心", "Url": "studentIndex", "style": { "cssText": "background-image:url(/img/icon/studentIndex.png)" } },
+    { "Name": "工作管理", "Url": "studioCourse", "style": { "cssText": "background-image:url(/img/icon/studioCourse.png)" } },
+    { "Name": "工作中心", "Url": "studioIndex", "style": { "cssText": "background-image:url(/img/icon/studioIndex.png)" } },
+    { "Name": "教研室", "Url": "teacherOffice", "style": { "cssText": "background-image:url(/img/icon/teacherOffice.png)" } },
+    { "Name": "教师管理", "Url": "teacher", "style": { "cssText": "background-image:url(/img/icon/teacher.png)" } },
+    { "Name": "学生管理", "Url": "student", "style": { "cssText": "background-image:url(/img/icon/student.png)" } },
+    { "Name": "学生评价", "Url": "evaluate", "style": { "cssText": "background-image:url(/img/icon/evaluation.png)" } },
+    { "Name": "班级管理", "Url": "class", "style": { "cssText": "background-image:url(/img/icon/class.png)" } },
+    { "Name": "协同建构", "Url": "futureClass", "style": { "cssText": "background-image:url(/img/icon/futureClass.png)" } },
+    { "Name": "综合看板", "Url": "dataBoardNew", "style": { "cssText": "background-image:url(/img/icon/dataBoardNew.png)" } },
+    { "Name": "智能表单", "Url": "testTeacher", "style": { "cssText": "background-image:url(/img/icon/testTeacher.png)" } },
+    { "Name": "教师中心", "Url": "testStudentSies", "style": { "cssText": "background-image:url(/img/icon/testStudent.png)" } },
+    { "Name": "AI助手+", "Url": "aigpt", "style": { "cssText": "background-image:url(/img/icon/aigpt.png)" } },
+    { "Name": "课堂观察", "Url": "classroomObservation", "style": { "cssText": "background-image:url(/img/icon/classroomObservation.png)" } },
+    { "Name": "知识建构", "Url": "aiKnowledge", "style": { "cssText": "background-image:url(/img/icon/aiKnowledge.png)" } },
+    { "Name": "CocoFlow", "Url": "appStore", "style": { "cssText": "background-image:url(/img/icon/appStore.png)" } },
+];
+
+//szsy
+U.MD.D.I.szsyStudentDeskIcon = [
+    { "Name": "课程中心", "Url": "studentStudy", "style": { "cssText": "background-image:url(/img/icon/study.png)" } },
+    { "Name": "项目管理", "Url": "studentCourse", "style": { "cssText": "background-image:url(/img/icon/studentCourse.png)" } },
+    { "Name": "项目中心", "Url": "studentIndex", "style": { "cssText": "background-image:url(/img/icon/studentIndex.png)" } },
+    { "Name": "协同建构", "Url": "futureClass", "style": { "cssText": "background-image:url(/img/icon/futureClass.png)" } },
+    { "Name": "CocoFlow", "Url": "appStore", "style": { "cssText": "background-image:url(/img/icon/appStore.png)" } },
+];
 
 
 //#region 桌面初始化a
@@ -2063,6 +2152,8 @@ U.MD.D.I.initDesktopIcons = function (el, type) {
         _x010504TeacherDeskIconInfo = U.MD.D.I.x010504TeacherDeskIcon, //010504
         _x010204StudentDeskIconInfo = U.MD.D.I.x010204StudentDeskIcon, //010204
         _x010204TeacherDeskIconInfo = U.MD.D.I.x010204TeacherDeskIcon, //010204
+        _x320101StudentDeskIconInfo = U.MD.D.I.x320101StudentDeskIcon, //320101
+        _x320101TeacherDeskIconInfo = U.MD.D.I.x320101TeacherDeskIcon, //320101
         _trailStudentDeskIconInfo = U.MD.D.I.trailStudentDeskIcon, //trail
         _trailTeacherDeskIconInfo = U.MD.D.I.trailTeacherDeskIcon, //trail
         _SCNUETTeacherDeskIconInfo = U.MD.D.I.SCNUETTeacherDeskIcon, //SCNUET
@@ -2070,6 +2161,8 @@ U.MD.D.I.initDesktopIcons = function (el, type) {
         _SCNUETStudentDeskIconInfo = U.MD.D.I.SCNUETStudentDeskIcon, //SCNUET
         _SPROUTLabTeacherDeskIconInfo = U.MD.D.I.SPROUTLabTeacherDeskIcon, //SPROUT Lab
         _SPROUTLabStudentDeskIconInfo = U.MD.D.I.SPROUTLabStudentDeskIcon, //SPROUT Lab
+        _szsyTeacherDeskIconInfo = U.MD.D.I.szsyTeacherDeskIcon, //szsy
+        _szsyStudentDeskIconInfo = U.MD.D.I.szsyStudentDeskIcon, //szsy
         _x020201TeacherDeskIconInfo = U.MD.D.I.x020201TeacherDeskIcon, //x020201
         _x020201AdminDeskIconInfo = U.MD.D.I.x020201AdminDeskIcon, //x020201
         _x020201StudentDeskIconInfo = U.MD.D.I.x020201StudentDeskIcon, //x020201
@@ -2077,9 +2170,9 @@ U.MD.D.I.initDesktopIcons = function (el, type) {
         _scnuaiAdminDeskIconInfo = U.MD.D.I.scnuaiAdminDeskIcon, //scnuai
         _scnuaiStudentDeskIconInfo = U.MD.D.I.scnuaiStudentDeskIcon, //scnuai
         _szscOrganizerDeskIconInfo = U.MD.D.I.szscOrganizerDeskIcon; //szsc
-    var _oidA = ['69893dca-1d47-11ed-8c78-005056b86db5', "91305d49-01ba-11ed-8c78-005056b86db5", "d9db3320-503a-11ed-8c78-005056b86db5", "05b62310-8cda-11ed-b13d-005056b86db5", '1c3b9def-8fbe-11ed-b13d-005056b86db5', '91305d49-01ba-11ed-8c78-005056b86db4', 'ea2a8c65-f38c-11ed-91d8-005056b86db5', '4c686762-1d0a-11ed-8c78-005056b86db5', 'b1095a3c-1d06-4ac8-854f-7c0d97f4ab41', '206c38d2-0cbe-11ee-91d8-005056b86db5', '2f30fe58-a94f-11ee-b534-005056b86db5', 'eaba9110-d1eb-11ee-b534-005056b86db5','c7df0bd4-6e75-401a-a137-4e163aa62263','8a352da2-56e1-11ef-b873-005056b86db5','9b46a3c9-7657-11ef-9b30-005056b86db5','857af1c7-c8ee-4b04-85b5-fd182903adb7','876030db-7a49-11ef-9b30-005056b86db5','b97fc213-86a9-11ef-9b30-005056b86db5', 'c636f63e-86f4-11ef-9b30-005056b86db5','6c16df93-8849-11ef-9b30-005056b86db5','72c16ee0-89fe-11ef-9b30-005056b86db5','369222a8-cddd-11ed-9546-005056b86db5','3fc7840d-a1c4-11ef-9b30-005056b86db5'];
-    var _orgA = ["7ada499f-4ec7-11ed-8c78-005056b86db5", "eb2af5e9-ac3d-46b6-9fe3-3c1c364f018d", "383f207d-4ced-4eeb-a15a-7b0a2f3abe7b", "150e3120-9195-11ed-b13d-005056b86db5", "ee40e8e3-e36c-4872-8105-cf395481012s", '97c4ee8b-d010-4042-986d-e9d3c217264f', 'ec0af97a-7c10-4259-a7eb-db9cc8174cdc', '4df1b570-f6ac-48fc-8d50-d0b157dae776', 'e632b86c-f89d-11ed-91d8-005056b86db5', 'b50cf65a-001c-11ee-91d8-005056b86db5', '578de748-05d2-11ee-91d8-005056b86db5', '54f09f1e-09f0-11ee-91d8-005056b86db5', '7b016f69-0f4f-11ee-91d8-005056b86db5', '1973f6c7-1561-11ee-91d8-005056b86db5', '2fa75e51-189a-11ee-91d8-005056b86db5', 'a0fc1c55-3c2f-4ece-8cd4-ac3e2c1e9956', 'fbb00cc1-380b-4173-add4-59b3cf7682b5', '63060b4a-89dc-4f0c-bf04-a1de22d479ff', '777559d2-7239-11ee-b98c-005056b86db5', '03d24cf9-4fbc-4aeb-bb02-6f84f66e6344','884c5665-a453-46f3-b7b6-01d575290aa9','c9a6de59-8b4f-4be1-8565-a08081f649d3','7f280060-665e-4868-b68f-1eec9e1b4a07','f3b243b2-75e2-4b00-8f66-7644946a2a25','16ace517-b5c7-4168-a9bb-a9e0035df840','2fe1a080-4425-4620-b7a0-be2f3750ffd4','a5efd078-20f6-4185-bef9-6d1c688bee70','23bbe712-e35a-4888-9b4e-8d9e5a4fa2f6','ec84034b-8ea4-4d27-9cba-1adcb4720bb3','b47d2ea8-7044-4810-9cb7-3aaf8b74cfbc'];
-    //清楚桌面圖標
+    var _oidA = ['69893dca-1d47-11ed-8c78-005056b86db5', "91305d49-01ba-11ed-8c78-005056b86db5", "d9db3320-503a-11ed-8c78-005056b86db5", "05b62310-8cda-11ed-b13d-005056b86db5", '1c3b9def-8fbe-11ed-b13d-005056b86db5', '91305d49-01ba-11ed-8c78-005056b86db4', 'ea2a8c65-f38c-11ed-91d8-005056b86db5', '4c686762-1d0a-11ed-8c78-005056b86db5', 'b1095a3c-1d06-4ac8-854f-7c0d97f4ab41', '206c38d2-0cbe-11ee-91d8-005056b86db5', '2f30fe58-a94f-11ee-b534-005056b86db5', 'eaba9110-d1eb-11ee-b534-005056b86db5','c7df0bd4-6e75-401a-a137-4e163aa62263','8a352da2-56e1-11ef-b873-005056b86db5','9b46a3c9-7657-11ef-9b30-005056b86db5','857af1c7-c8ee-4b04-85b5-fd182903adb7','876030db-7a49-11ef-9b30-005056b86db5','b97fc213-86a9-11ef-9b30-005056b86db5', 'c636f63e-86f4-11ef-9b30-005056b86db5','6c16df93-8849-11ef-9b30-005056b86db5','72c16ee0-89fe-11ef-9b30-005056b86db5','369222a8-cddd-11ed-9546-005056b86db5','3fc7840d-a1c4-11ef-9b30-005056b86db5','2c5d4971-ed9e-11ef-b508-005056924926'];
+    var _orgA = ["7ada499f-4ec7-11ed-8c78-005056b86db5", "eb2af5e9-ac3d-46b6-9fe3-3c1c364f018d", "383f207d-4ced-4eeb-a15a-7b0a2f3abe7b", "150e3120-9195-11ed-b13d-005056b86db5", "ee40e8e3-e36c-4872-8105-cf395481012s", '97c4ee8b-d010-4042-986d-e9d3c217264f', 'ec0af97a-7c10-4259-a7eb-db9cc8174cdc', '4df1b570-f6ac-48fc-8d50-d0b157dae776', 'e632b86c-f89d-11ed-91d8-005056b86db5', 'b50cf65a-001c-11ee-91d8-005056b86db5', '578de748-05d2-11ee-91d8-005056b86db5', '54f09f1e-09f0-11ee-91d8-005056b86db5', '7b016f69-0f4f-11ee-91d8-005056b86db5', '1973f6c7-1561-11ee-91d8-005056b86db5', '2fa75e51-189a-11ee-91d8-005056b86db5', 'a0fc1c55-3c2f-4ece-8cd4-ac3e2c1e9956', 'fbb00cc1-380b-4173-add4-59b3cf7682b5', '63060b4a-89dc-4f0c-bf04-a1de22d479ff', '777559d2-7239-11ee-b98c-005056b86db5', '03d24cf9-4fbc-4aeb-bb02-6f84f66e6344','884c5665-a453-46f3-b7b6-01d575290aa9','c9a6de59-8b4f-4be1-8565-a08081f649d3','7f280060-665e-4868-b68f-1eec9e1b4a07','f3b243b2-75e2-4b00-8f66-7644946a2a25','16ace517-b5c7-4168-a9bb-a9e0035df840','2fe1a080-4425-4620-b7a0-be2f3750ffd4','a5efd078-20f6-4185-bef9-6d1c688bee70','23bbe712-e35a-4888-9b4e-8d9e5a4fa2f6','ec84034b-8ea4-4d27-9cba-1adcb4720bb3','b47d2ea8-7044-4810-9cb7-3aaf8b74cfbc','c8266c04-59e3-44de-bcf2-8f906e66e636'];
+    //清楚桌面图标
     el.innerHTML = "";
     if (_org == 'c95e0a56-c205-11ed-8d51-005056b86db5' || _oid == "16d397f3-b192-11ed-9211-005056b86db5" || _org == "0fec3a8a-ad04-11ed-b13d-005056b86db5") {
         _teacherDesktopIconInfo.push(
@@ -2108,6 +2201,9 @@ U.MD.D.I.initDesktopIcons = function (el, type) {
             { "Name": "知識建構", "Url": "aiKnowledge", "style": { "cssText": "background-image:url(/img/icon/aiKnowledge.png)" } },
             { "Name": "教師管理", "Url": "teacher", "style": { "cssText": "background-image:url(/img/icon/teacher.png)" } },
             { "Name": "CocoFlow", "Url": "appStore", "style": { "cssText": "background-image:url(/img/icon/appStore.png)" } },
+            { "Name": "EDU", "Url": "EDU", "style": { "cssText": "background-image:url(/img/icon/EDU.png)" } },
+            { "Name": "知识库", "Url": "knowledge", "style": { "cssText": "background-image:url(/img/icon/knowledge.png)" } },
+            { "Name": "Sass", "Url": "sassPlatform", "style": { "cssText": "background-image:url(/img/icon/sassPlatForm.png)" } },
         )
     }
 
@@ -2644,6 +2740,23 @@ U.MD.D.I.initDesktopIcons = function (el, type) {
                 $$("div", { className: "U_MD_D_KOS U_Img", "style": _x010204StudentDeskIconInfo[i].style }, _iconcontent);
                 $$("div", { className: "U_MD_D_KOX", "innerHTML": _x010204StudentDeskIconInfo[i].Name }, _iconcontent);
             }
+        } else if (_type == 2 && (_oid == "2c5d4971-ed9e-11ef-b508-005056924926")) {
+            for (i = 0; i < _x320101StudentDeskIconInfo.length; i++) {
+                _content = $$("div", {
+                    className: "U_MD_D_KO",
+                    "onmousedown": U.UF.C.closure(function (obj) {
+                        //防止拖动图标即打开了桌面应用
+                        U.MD.D.click(this, obj);
+                    }, [_x320101StudentDeskIconInfo[i]]),
+                    "onclick": U.UF.C.closure(function (obj) {
+                        //防止拖动图标即打开了桌面应用
+                        U.MD.D.click(this, obj);
+                    }, [_x320101StudentDeskIconInfo[i]])
+                }, _frag); // 
+                _iconcontent = $$("div", { className: "U_MD_D_KOA" }, _content);
+                $$("div", { className: "U_MD_D_KOS U_Img", "style": _x320101StudentDeskIconInfo[i].style }, _iconcontent);
+                $$("div", { className: "U_MD_D_KOX", "innerHTML": _x320101StudentDeskIconInfo[i].Name }, _iconcontent);
+            }
         } else if (_type == 2 && (_oid == "c636f63e-86f4-11ef-9b30-005056b86db5")) {
             for (i = 0; i < _trailStudentDeskIconInfo.length; i++) {
                 _content = $$("div", {
@@ -2678,6 +2791,23 @@ U.MD.D.I.initDesktopIcons = function (el, type) {
                 $$("div", { className: "U_MD_D_KOS U_Img", "style": _SPROUTLabStudentDeskIconInfo[i].style }, _iconcontent);
                 $$("div", { className: "U_MD_D_KOX", "innerHTML": _SPROUTLabStudentDeskIconInfo[i].Name }, _iconcontent);
             }
+        } else if (_type == 2 && (_org == "c8266c04-59e3-44de-bcf2-8f906e66e636")) {
+            for (i = 0; i < _szsyStudentDeskIconInfo.length; i++) {
+                _content = $$("div", {
+                    className: "U_MD_D_KO",
+                    "onmousedown": U.UF.C.closure(function (obj) {
+                        //防止拖动图标即打开了桌面应用
+                        U.MD.D.click(this, obj);
+                    }, [_szsyStudentDeskIconInfo[i]]),
+                    "onclick": U.UF.C.closure(function (obj) {
+                        //防止拖动图标即打开了桌面应用
+                        U.MD.D.click(this, obj);
+                    }, [_szsyStudentDeskIconInfo[i]])
+                }, _frag); // 
+                _iconcontent = $$("div", { className: "U_MD_D_KOA" }, _content);
+                $$("div", { className: "U_MD_D_KOS U_Img", "style": _szsyStudentDeskIconInfo[i].style }, _iconcontent);
+                $$("div", { className: "U_MD_D_KOX", "innerHTML": _szsyStudentDeskIconInfo[i].Name }, _iconcontent);
+            }
         } else if (_type == 2 && (_oid == "9b46a3c9-7657-11ef-9b30-005056b86db5")) {
             for (i = 0; i < _x010608StudentDeskIconInfo.length; i++) {
                 _content = $$("div", {
@@ -4194,6 +4324,26 @@ U.MD.D.I.initDesktopIcons = function (el, type) {
                 $$("div", { className: "U_MD_D_KOS U_Img", "style": _x010204TeacherDeskIconInfo[i].style }, _iconcontent);
                 $$("div", { className: "U_MD_D_KOX", "innerHTML": _x010204TeacherDeskIconInfo[i].Name }, _iconcontent);
             }
+        } else if ((_type == 1 || _type == 4) && _oid == "2c5d4971-ed9e-11ef-b508-005056924926") {
+            for (i = 0; i < _x320101TeacherDeskIconInfo.length; i++) {
+                if(_role === 0 && _x320101TeacherDeskIconInfo[i].Url == 'testTeacher'){
+                    continue
+                }
+                _content = $$("div", {
+                    className: "U_MD_D_KO",
+                    "onmousedown": U.UF.C.closure(function (obj) {
+                        //防止拖动图标即打开了桌面应用
+                        U.MD.D.click(this, obj);
+                    }, [_x320101TeacherDeskIconInfo[i]]),
+                    "onclick": U.UF.C.closure(function (obj) {
+                        //防止拖动图标即打开了桌面应用
+                        U.MD.D.click(this, obj);
+                    }, [_x320101TeacherDeskIconInfo[i]])
+                }, _frag); // 
+                _iconcontent = $$("div", { className: "U_MD_D_KOA" }, _content);
+                $$("div", { className: "U_MD_D_KOS U_Img", "style": _x320101TeacherDeskIconInfo[i].style }, _iconcontent);
+                $$("div", { className: "U_MD_D_KOX", "innerHTML": _x320101TeacherDeskIconInfo[i].Name }, _iconcontent);
+            }
         } else if ((_type == 1 || _type == 4) && _oid == "c636f63e-86f4-11ef-9b30-005056b86db5") {
             for (i = 0; i < _trailTeacherDeskIconInfo.length; i++) {
                 if(_role === 0 && _trailTeacherDeskIconInfo[i].Url == 'testTeacher'){
@@ -4234,6 +4384,26 @@ U.MD.D.I.initDesktopIcons = function (el, type) {
                 $$("div", { className: "U_MD_D_KOS U_Img", "style": _SPROUTLabTeacherDeskIconInfo[i].style }, _iconcontent);
                 $$("div", { className: "U_MD_D_KOX", "innerHTML": _SPROUTLabTeacherDeskIconInfo[i].Name }, _iconcontent);
             }
+        } else if ((_type == 1 || _type == 4) && _org == "c8266c04-59e3-44de-bcf2-8f906e66e636") {
+            for (i = 0; i < _szsyTeacherDeskIconInfo.length; i++) {
+                if(_role === 0 && _szsyTeacherDeskIconInfo[i].Url == 'testTeacher'){
+                    continue
+                }
+                _content = $$("div", {
+                    className: "U_MD_D_KO",
+                    "onmousedown": U.UF.C.closure(function (obj) {
+                        //防止拖动图标即打开了桌面应用
+                        U.MD.D.click(this, obj);
+                    }, [_szsyTeacherDeskIconInfo[i]]),
+                    "onclick": U.UF.C.closure(function (obj) {
+                        //防止拖动图标即打开了桌面应用
+                        U.MD.D.click(this, obj);
+                    }, [_szsyTeacherDeskIconInfo[i]])
+                }, _frag); // 
+                _iconcontent = $$("div", { className: "U_MD_D_KOA" }, _content);
+                $$("div", { className: "U_MD_D_KOS U_Img", "style": _szsyTeacherDeskIconInfo[i].style }, _iconcontent);
+                $$("div", { className: "U_MD_D_KOX", "innerHTML": _szsyTeacherDeskIconInfo[i].Name }, _iconcontent);
+            }
         } else if ((_type == 1 || _type == 4) && _oid == "9b46a3c9-7657-11ef-9b30-005056b86db5") {
             for (i = 0; i < _x010608TeacherDeskIconInfo.length; i++) {
                 if(_role === 0 && _x010608TeacherDeskIconInfo[i].Url == 'testTeacher'){
@@ -5054,7 +5224,7 @@ U.MD.D.I.openInApplication = function (str, data, screenType, tType) {
                 }, 2000);
             } else {
                 _formdiv = new U.UF.UI.form(
-                    "協同建構",
+                    "协同建构",
                     $$("iframe", { "allow": "camera *; microphone *;display-capture;midi;encrypted-media;", "webkitallowfullscreen": "", "mozallowfullscreen": "", "allowfullscreen": "", "frameborder": "no", "border": "0", "scrolling ": "no", "style": { "cssText": "border:0;width:100%;height:100%" }, "src": "https://cscl.cocorobo.hk?cid=" + data.cid + "&gid=" + data.gid }), {
                     "id": "futureClass",
                     "style": { "width": "90%", "height": "90%", "overflow": 'hidden' },
@@ -5290,6 +5460,10 @@ U.MD.D.I.openApplication = function (str, obj, info) {
         _TscreenType = 1
     _screenType = 2,
         _SscreenType = 3;
+    let iframeBool = true
+    if(U.UF.UI.form.allForm[str]){
+        iframeBool = false
+    }
     if (str == 'my' && _type == 2 && (_oid == "69893dca-1d47-11ed-8c78-005056b86db5" || _oid == "05b62310-8cda-11ed-b13d-005056b86db5")) {
         return;
     }
@@ -6909,9 +7083,13 @@ U.MD.D.I.openApplication = function (str, obj, info) {
             })
             break;
         case "aiKnowledge": //aiKnowledge
+            let _url = "https://cloud.cocorobo.hk/aigpt/#/knowledge_construction/?userid=" + _userid + "&oid=" + _oid + "&org=" + _org + "&role=" + _role
+            if(_oid == '8a352da2-56e1-11ef-b873-005056b86db5'){
+                _url = "https://knowledge.cocorobo.cn/zh-CN/run-agent-flow/68fa2a89-650f-11ef-9db4-12e77c4cb76b"
+            }
             _formdiv = new U.UF.UI.form(
-                "知識建構",
-                $$("iframe", { "allow": "camera *; microphone *;display-capture;midi;encrypted-media;", "webkitallowfullscreen": "", "mozallowfullscreen": "", "allowfullscreen": "", "frameborder": "no", "border": "0", "scrolling ": "no", "style": { "cssText": "border:0;width:100%;height:100%" }, "src": "https://cloud.cocorobo.hk/aigpt/#/knowledge_construction/?userid=" + _userid + "&oid=" + _oid + "&org=" + _org + "&role=" + _role }), {
+                "知识建构",
+                $$("iframe", { "allow": "camera *; microphone *;display-capture;midi;encrypted-media;", "webkitallowfullscreen": "", "mozallowfullscreen": "", "allowfullscreen": "", "frameborder": "no", "border": "0", "scrolling ": "no", "style": { "cssText": "border:0;width:100%;height:100%" }, "src": _url }), {
                 "id": "aiKnowledge",
                 "style": { "width": "100%", "height": "100%", "overflow": 'hidden' },
                 "onresize": function () { }
@@ -6923,8 +7101,8 @@ U.MD.D.I.openApplication = function (str, obj, info) {
             break;
         case "futureClass": //AI共創
             _formdiv = new U.UF.UI.form(
-                "協同建構",
-                $$("iframe", { "frameborder": "no", "border": "0", "scrolling ": "no", "webkitallowfullscreen": "", "mozallowfullscreen": "", "allowfullscreen": "", "style": { "cssText": "border:0;width:100%;height:100%" }, "src": US.Config.bpbl + "/pbl-teacher-table/dist/#/synergyCourse?userid=" + _userid + "&oid=" + _oid + "&org=" + _org + "&role=" + _role }), {//https://cscl.cocorobo.hk
+                "协同建构",
+                $$("iframe", { "frameborder": "no", "border": "0", "scrolling ": "no", "webkitallowfullscreen": "", "mozallowfullscreen": "", "allowfullscreen": "", "style": { "cssText": "border:0;width:100%;height:100%" }, "src": US.Config.bpbl + "/pbl-teacher-table/dist/#/synergyCourse?userid=" + _userid + "&oid=" + _oid + "&org=" + _org + "&role=" + _role }), {//https://cscl.cocorobo.cn
                 "id": "synergyCourse",
                 "style": { "width": "100%", "height": "100%", "overflow": 'hidden' },
                 "onresize": function () { }
@@ -7211,15 +7389,51 @@ U.MD.D.I.openApplication = function (str, obj, info) {
         case "appStore":
                 _formdiv = new U.UF.UI.form(
                     "CocoFlow",
-                    $$("iframe", { "allow": "camera *; microphone *;display-capture;midi;encrypted-media;", "webkitallowfullscreen": "", "mozallowfullscreen": "", "allowfullscreen": "","frameborder": "no", "border": "0", "scrolling ": "no", "style": { "cssText": "border:0;width:100%;height:100%" }, "src": "//cloud.cocorobo.hk//aigpt/#/WorkSpace?userid=" + _userid + "&oid=" + _oid + "&org=" + _org + "&role=" + _role }), {
-                    "id": "pblCourse",
-                    "style": { "width": "90%", "height": "90%", "overflow": 'hidden' },
+                    $$("iframe", { "allow": "camera *; microphone *;display-capture;midi;encrypted-media;", "webkitallowfullscreen": "", "mozallowfullscreen": "", "allowfullscreen": "","frameborder": "no", "border": "0", "scrolling ": "no", "style": { "cssText": "border:0;width:100%;height:100%" }, "src": "//cloud.cocorobo.hk/aigpt/#/WorkSpace?userid=" + _userid + "&oid=" + _oid + "&org=" + _org + "&role=" + _role }), {
+                    "id": "appStore",
+                    "style": { "width": "100%", "height": "100%", "overflow": 'hidden' },
                     "onresize": function () { }
                 }, {
                     closecallback: function () { }
                 }, { "style": { "height": "36px" } }).form; //創建窗體
                 _taskbar = { "id": str + _formdiv.id, "style": { "backgroundImage": "url(/img/icon/appStore.png)" }, "name": "CocoFlow", "forms": _formdiv, "click": function () { U.MD.D.I.openApplication(str, obj, info); } }
                 break;
+        case "sassPlatform":
+            _formdiv = new U.UF.UI.form(
+                "Sass通用后台管理", 
+                $$("iframe", { "allow": "camera *; microphone *;display-capture;midi;encrypted-media;", "webkitallowfullscreen": "", "mozallowfullscreen": "", "allowfullscreen": "","frameborder": "no", "border": "0", "scrolling ": "no", "style": { "cssText": "border:0;width:100%;height:100%" }, "src": US.Config.bpbl + "/pbl-teacher-table/dist/#/sassPlatform?userid=" + _userid + "&oid=" + _oid + "&org=" + _org }), {
+                "id": "sassPlatform",
+                "style": { "width": "90%", "height": "90%", "overflow": 'hidden' },
+                "onresize": function () { }
+            }, {
+                closecallback: function () { }
+            }, { "style": { "height": "36px" } }).form; //创建窗体
+            _taskbar = { "id": str + _formdiv.id, "style": { "backgroundImage": "url(/img/icon/sassPlatForm.png)" }, "name": "sassPlatform", "forms": _formdiv, "click": function () { U.MD.D.I.openApplication(str, obj, info); } }
+            break;
+        case "EDU":
+            _formdiv = new U.UF.UI.form(
+                "EDU",
+                $$("iframe", { "allow": "camera *; microphone *;display-capture;midi;encrypted-media;", "webkitallowfullscreen": "", "mozallowfullscreen": "", "allowfullscreen": "","frameborder": "no", "border": "0", "scrolling ": "no", "style": { "cssText": "border:0;width:100%;height:100%" }, "src": "//edu.cocorobo.cn" }), {
+                "id": "EDU",
+                "style": { "width": "90%", "height": "90%", "overflow": 'hidden' },
+                "onresize": function () { }
+            }, {
+                closecallback: function () { }
+            }, { "style": { "height": "36px" } }).form; //创建窗体
+            _taskbar = { "id": str + _formdiv.id, "style": { "backgroundImage": "url(/img/icon/EDU.png)" }, "name": "EDU", "forms": _formdiv, "click": function () { U.MD.D.I.openApplication(str, obj, info); } }
+            break;
+        case "knowledge":
+            _formdiv = new U.UF.UI.form(
+                "知识库",
+                $$("iframe", { "allow": "camera *; microphone *;display-capture;midi;encrypted-media;", "webkitallowfullscreen": "", "mozallowfullscreen": "", "allowfullscreen": "","frameborder": "no", "border": "0", "scrolling ": "no", "style": { "cssText": "border:0;width:100%;height:100%" }, "src": "https://storage.cocorobo.cn/dist/#/knowledge?userid=" + _userid + "&oid=" + _oid + "&org=" + _org }), {
+                "id": "knowledge",
+                "style": { "width": "90%", "height": "90%", "overflow": 'hidden' },
+                "onresize": function () { }
+            }, {
+                closecallback: function () { }
+            }, { "style": { "height": "36px" } }).form; //创建窗体
+            _taskbar = { "id": str + _formdiv.id, "style": { "backgroundImage": "url(/img/icon/knowledge.png)" }, "name": "knowledge", "forms": _formdiv, "click": function () { U.MD.D.I.openApplication(str, obj, info); } }
+            break;
         case "userExamine":
                 _formdiv = new U.UF.UI.form(
                     "賬號申請",
@@ -7239,7 +7453,13 @@ U.MD.D.I.openApplication = function (str, obj, info) {
     if (_taskbar) {
         U.MD.D.T.taskbar(_taskbar); //創建任務處理
     }
-
+    // if(iframeBool){
+    //     U.UF.DL.loading($("iframe", _formdiv)[0].parentElement.parentElement)
+    //     let onloadListener = $("iframe", _formdiv)[0].onload = () => {
+    //         console.log("iframe进入");
+    //         U.UF.DL.uploading($("iframe", _formdiv)[0].parentElement.parentElement)
+    //     };
+    // }
 }
 
 

+ 8 - 1
js/Desktop/Onload.js

@@ -478,6 +478,7 @@ U.MD.D.getuser = function () {
             console.log('error', error)
         });
     }else if(!LoginState &&Object.keys(userInfo).length === 0 && U.UF.C.queryString('tycode')){
+        U.UF.DL.loading(document.body)
         if($("#U_MD_HomeC_Pop")[0]){
             $("#U_MD_HomeC_Pop")[0].close()
         }
@@ -526,6 +527,7 @@ U.MD.D.getuser = function () {
                                 US.userInfo.userid = userId
                                 U.A.Request(US.Config.pbl + "selectUser?userid=" + userId, [], function (res) { //US.userInfo.userid
                                     loginSet(res.value[0][0], res)
+                                    U.UF.DL.uploading(document.body)
                                 }, [], { "type": "GET", "withCredentials": true });
                             }
                             
@@ -537,7 +539,8 @@ U.MD.D.getuser = function () {
                     
                 }, [], { "type": "POST", "withCredentials": true })
             }else{
-                U.Alert("用戶登錄已失效,請重新獲取登錄信息!");
+                U.Alert("用户登录已失效,请重新获取登录信息!");
+                U.UF.DL.uploading(document.body)
             }
         })
         .catch(error => {
@@ -1131,6 +1134,10 @@ function loginSet(userInfo, res){
     }else{
         U.MD.D.I.initDesktopIcons($("#U_MD_D_K")[0], 1);
     }
+    if(userInfo.type === 1 && userInfo.org == "f3b243b2-75e2-4b00-8f66-7644946a2a25"){
+        U.MD.D.I.openApplication("appStore")
+    }
+
     let shareCourseId = window.location.href.indexOf("?shareCourseId=")!=-1?window.location.href.split("?shareCourseId=")[1].toString():''
     if(shareCourseId){
         console.log(shareCourseId);

+ 2740 - 0
scanner/gpyhs.js

@@ -0,0 +1,2740 @@
+var socket;
+var isSocketConnect = false;
+var openFlagA = false;
+
+var isOpenMainCamera = false;
+
+var MainCanvas;
+var MainContext;
+
+var pMainShowStartX = 0;
+var pMainShowStartY = 0;
+
+var isMouseDown = false;
+var pALastX = 0;
+var pALastY = 0;
+var pACurrentX = 0;
+var pACurrentY = 0;
+
+var MainCamCutMode = 0;
+
+
+
+//window.onload = function (event) {
+//    WebSocketConnect();
+//}
+
+//>>>>>>>>>>>>>>>>.修改的地方>>>>>>>>>>>>>>>
+function releaseSocketPro() {
+    if (isSocketConnect) {
+        var aDataArray = new Uint8Array(3);
+        aDataArray[0] = 0x77;
+        aDataArray[1] = 0x88;
+        aDataArray[2] = 0xFF;
+        socket.send(aDataArray.buffer);
+    }
+}
+
+
+window.onbeforeunload = function () {
+
+    CloseCamera();  //关闭摄像头
+    isOpenMainCamera = false;
+    try {
+        releaseSocketPro();   //>>>>>>>>>>>>>>>>.修改的地方>>>>>>>>>>>>>>>
+        socket.close();
+        socket = null;
+    }
+    catch (ex) {
+    }
+    console.log("onbeforeunload");
+
+};
+
+//function CloseConnect() {
+//    isSocketConnect = false;
+//    CloseCamera();  //关闭摄像头
+//    try {
+//        releaseSocketPro();   //>>>>>>>>>>>>>>>>.修改的地方>>>>>>>>>>>>>>>
+//        socket.close();
+//        socket = null;
+//    }
+//    catch (ex) {
+//    }
+// }
+
+
+function $(id) {
+    return document.getElementById(id);
+}
+
+
+function toSleep(milliSeconds) {
+    var startTime = new Date().getTime();
+    while (new Date().getTime() < startTime + milliSeconds);
+}
+
+function stringToUint8Array(str) {
+    var arr = [];
+    for (var i = 0, j = str.length; i < j; ++i) {
+        arr.push(str.charCodeAt(i));
+    }
+    arr.push('\0');
+    var tmpUint8Array = new Uint8Array(arr);
+    return tmpUint8Array
+}
+
+
+function Uint8ArrayToString(fileData) {
+    var dataString = "";
+    for (var i = 0; i < fileData.length; i++) {
+        dataString += String.fromCharCode(fileData[i]);
+    }
+    return dataString
+}
+
+
+function stringToByte(str) {
+    var bytes = new Array();
+    var len, c;
+    len = str.length;
+    for (var i = 0; i < len; i++) {
+        c = str.charCodeAt(i);
+        if (c >= 0x010000 && c <= 0x10FFFF) {
+            bytes.push(((c >> 18) & 0x07) | 0xF0);
+            bytes.push(((c >> 12) & 0x3F) | 0x80);
+            bytes.push(((c >> 6) & 0x3F) | 0x80);
+            bytes.push((c & 0x3F) | 0x80);
+        } else if (c >= 0x000800 && c <= 0x00FFFF) {
+            bytes.push(((c >> 12) & 0x0F) | 0xE0);
+            bytes.push(((c >> 6) & 0x3F) | 0x80);
+            bytes.push((c & 0x3F) | 0x80);
+        } else if (c >= 0x000080 && c <= 0x0007FF) {
+            bytes.push(((c >> 6) & 0x1F) | 0xC0);
+            bytes.push((c & 0x3F) | 0x80);
+        } else {
+            bytes.push(c & 0xFF);
+        }
+    }
+    return bytes;
+}
+
+function byteToString(arr) {
+    if (typeof arr === 'string') {
+        return arr;
+    }
+    var str = '',
+            _arr = arr;
+    for (var i = 0; i < _arr.length; i++) {
+        var one = _arr[i].toString(2),
+                v = one.match(/^1+?(?=0)/);
+        if (v && one.length == 8) {
+            var bytesLength = v[0].length;
+            var store = _arr[i].toString(2).slice(7 - bytesLength);
+            for (var st = 1; st < bytesLength; st++) {
+                store += _arr[st + i].toString(2).slice(2);
+            }
+            str += String.fromCharCode(parseInt(store, 2));
+            i += bytesLength - 1;
+        } else {
+            str += String.fromCharCode(_arr[i]);
+        }
+    }
+    return str;
+}
+
+function addEvent(obj, xEvent, fn) {
+    if (obj.attachEvent) {
+        obj.attachEvent('on' + xEvent, fn);
+    } else {
+        obj.addEventListener(xEvent, fn, false);
+    }
+}
+
+
+function InitCanvas(DivMainBox, mX, mY, mwidth, mheight) {
+
+    //var DivMainBox = $("CameraCtl");
+
+    if (mwidth != 0 && mheight != 0) {
+        MainCanvas = document.createElement("canvas");
+        MainCanvas.style.border = "solid 1px #A0A0A0";
+        MainCanvas.id = "MainCamCanvas";
+        MainCanvas.width = mwidth;
+        MainCanvas.height = mheight;
+        MainContext = MainCanvas.getContext("2d");
+        DivMainBox.appendChild(MainCanvas);      //添加画布
+        MainCanvas.onmousedown = MainCanvasMouseDown;
+        MainCanvas.onmousemove = MainCanvasMouseMove;
+        MainCanvas.onmouseup = MainCanvasMouseUp;
+        MainCanvas.onmouseout = MainCanvasMouseOut;
+        addEvent(MainCanvas, 'mousewheel', onMouseWheel);
+        addEvent(MainCanvas, 'DOMMouseScroll', onMouseWheel);
+
+    }
+
+}
+
+
+
+
+
+
+//*************摄像头操作初始化***************
+function Cam_ControlInit(documentObj, mX, mY, mwidth, mheight) {
+    WebSocketConnect();
+    InitCanvas(documentObj, mX, mY, mwidth, mheight);
+    //console.log("Cam_ControlInit");
+}
+
+
+//*************获取设备数目***************
+function Cam_GetDevCount() {
+    GetDevCount();
+}
+
+//***************获取分辨率***************
+function Cam_GetDevResolution(iCamNo) {
+    GetResolution(iCamNo);
+}
+
+//*************打开主摄像头***************
+ function Cam_Open(iCamNo, width, height) {
+     OpenCamera(iCamNo, width, height);
+ }
+
+ //*************关闭摄像头***************
+ function Cam_Close() {
+
+     CloseCamera();  
+     isOpenMainCamera = false;
+ }
+
+
+ //*************拍照***************
+ function Cam_Photo(fileAddr) {
+      if (MainCamCutMode == 2) {
+          var rectx, recty, rectw, recth;
+          if (pALastX > pACurrentX)
+              rectx = pACurrentX;
+          else
+              rectx = pALastX;
+          if (pALastY > pACurrentY)
+              recty = pACurrentY;
+          else
+              recty = pALastY;
+          rectw = Math.abs(pACurrentX - pALastX);
+          recth = Math.abs(pACurrentY - pALastY);
+
+          SetCutRect(rectx, recty, rectw, recth);  //手动裁剪区域
+      }    
+     CaptureImage(fileAddr);
+ }
+
+//*************放大***************
+ function Cam_ZoomIn() {
+    ZoomIn();
+}
+
+//*************缩小***************
+function Cam_ZoomOut() {
+    ZoomOut();
+}
+
+//*************适合大小***************
+function Cam_BestSize() {
+    BestSize();
+}
+
+//*************1:1***************
+function Cam_TrueSize() {
+    TrueSize();
+}
+
+//*************旋转***************
+function Cam_Rotate(angle) {
+    Rotate(angle);
+}
+
+//*************左旋***************
+function Cam_RotateLeft() {
+    RotateL();
+}
+
+//*************右旋***************
+function Cam_RotateRight() {
+    RotateR();
+}
+
+//*************对焦***************
+function Cam_Focus() {
+    ManualFocus();
+}
+
+//*************设置视频属性***************
+function Cam_ShowVideoProp() {
+    ShowVideoProp();
+}
+
+//*************设置裁剪模式***************
+function Cam_SetCutMode( CutMode) {
+    SetCutMode(CutMode);
+}
+
+
+//*************读取身份证信息*************
+function Cam_ReadIdCard(cardImgPath) {
+    ReadIdCard(cardImgPath);
+}
+
+
+//*************读取身份证信息并生成正反面合并证件照*************
+function Cam_ReadIdCardEx(cardImgPath) {
+    ReadIdCardEx(cardImgPath);
+}
+
+//*************上传文件*************
+function UploadFile(url, filepath) {
+    toUploadFile(url, filepath);
+}
+
+function UploadFileEx(lpServer, port, lpAddr, filepath) {
+    toUploadFileEx(lpServer, lpAddr, port, filepath);
+}
+
+
+//*************设置文件格式*************
+function Cam_SetFileType(filetype) {
+    SetFileType(filetype);
+}
+
+//*************设置JPG图片质量*************
+function Cam_SetJpgQuality(val) {
+    SetJpgQuality(val);
+}
+
+
+//*************设置色彩模式*************
+function Cam_SetColorMode(colorMode) {
+    SetColorMode(colorMode);
+}
+
+//*************设置去黑边*************
+function Cam_SetDeleteBlackEdge(flag) {
+    SetDeleteBlackEdge(flag);
+}
+
+//*************设置去底色*************
+function Cam_SetDeleteBgColor(flag) {
+    SetDeleteBgColor(flag);
+}
+
+//*************从摄像头中识别二维码条码*************
+function Cam_RecogQrBarCodeFromCamera(type) {
+    RecogQrBarCodeFromCamera(type);
+}
+
+//*************从图片文件中识别二维码条码*************
+function Cam_RecogQrBarCodeFromFile(type,filePath) {
+    RecogQrBarCodeFromFile(type, filePath);
+}
+
+
+//*************添加要合并的图片到PDF*************
+function Cam_AddImgFileToPDF(filePath) {
+    AddImgFileToPDF(filePath);
+}
+
+//*************添加要合并PDF的图片路径集合*************
+function Cam_AddImgFileToPDFex(filePath) {
+    AddImgFileToPDFex(filePath);
+}
+
+//*************合并PDF*************
+function Cam_CombinePDF(filePath) {
+    CombinePDF(filePath);
+}
+
+
+//*************添加要合并的图片*************
+function Cam_AddMergeImageFile(filePath) {
+    AddMergeImageFile(filePath);
+}
+
+//*************合并图像*************
+function Cam_MergeImages(filePath,dir) {
+    MergeImages(filePath, dir);
+}
+
+//*************获取驱动盘符*************
+function GetDrives() {
+    if (isSocketConnect) {
+        var aDataArray = new Uint8Array(3);
+        aDataArray[0] = 0x77;
+        aDataArray[1] = 0x88;
+        aDataArray[2] = 0xA6;
+        socket.send(aDataArray.buffer);
+    }
+}
+
+//*************设置水印*************
+function SetWaterMark(isAdd, wType, addTime, wTransp, wPos, wSize, wColor, szInfo) {
+    if (isSocketConnect) {
+        if (szInfo == "")
+            return;
+        var info = encodeURI(szInfo);
+        //console.log(info);
+        var infoArray = stringToByte(info);
+        var len = infoArray.length;
+        var totalLen = len + 10;
+        var aDataArray = new Uint8Array(totalLen);
+        aDataArray[0] = 0x77;
+        aDataArray[1] = 0x88;
+        aDataArray[2] = 0xA7;
+        aDataArray[3] = isAdd;
+        aDataArray[4] = wType;
+        aDataArray[5] = addTime;
+        aDataArray[6] = wPos;
+        aDataArray[7] = wSize;
+        aDataArray[8] = wTransp;
+        aDataArray[9] = wColor;
+        for (var i = 0; i < len; i++) {
+            aDataArray[10 + i] = infoArray[i];
+        }
+        socket.send(aDataArray.buffer);
+    }
+}
+
+
+function ReadCamLicense() {
+    if (isSocketConnect) {
+        var aDataArray = new Uint8Array(3);
+        aDataArray[0] = 0x77;
+        aDataArray[1] = 0x88;
+        aDataArray[2] = 0xA5;
+        socket.send(aDataArray.buffer);
+    }
+}
+
+function SetInchImgType(sizetype) {
+    if (isSocketConnect) {
+        var aDataArray = new Uint8Array(4);
+        aDataArray[0] = 0x77;
+        aDataArray[1] = 0x88;
+        aDataArray[2] = 0xB0;
+        aDataArray[3] = sizetype;
+        socket.send(aDataArray.buffer);
+    }
+}
+
+function SetInchLineType(linetype) {
+    if (isSocketConnect) {
+        var aDataArray = new Uint8Array(4);
+        aDataArray[0] = 0x77;
+        aDataArray[1] = 0x88;
+        aDataArray[2] = 0xB1;
+        aDataArray[3] = linetype;
+        socket.send(aDataArray.buffer);
+    }
+}
+
+
+/****************************************************************************************/
+
+
+function DeleteFile(filePath) {
+    if (isSocketConnect) {
+        if (filePath == "") {
+            var packageCount = 1;
+            var len = 0;
+            var pindex = 0;
+            var totalLen = 11;
+            var aDataArray = new Uint8Array(totalLen);
+            aDataArray[0] = 0x77;
+            aDataArray[1] = 0x88;
+            aDataArray[2] = 0xA8;
+            aDataArray[3] = len >> 16 & 0xff;
+            aDataArray[4] = len >> 8 & 0xff;
+            aDataArray[5] = len & 0xff;
+            aDataArray[6] = packageCount >> 8 & 0xff;   //包总数
+            aDataArray[7] = packageCount & 0xff;   //包总数
+            aDataArray[8] = 0;   //分包长度
+            aDataArray[9] = pindex >> 8 & 0xff;   //包序号
+            aDataArray[10] = pindex & 0xff;    //包序号
+            console.log("pindex:" + pindex);
+            socket.send(aDataArray.buffer);
+        }
+        else {
+            var path = encodeURI(filePath);
+            console.log(path);
+            var pathArray = stringToByte(path);
+            var len = pathArray.length;
+
+            var packageCount = 0;
+            var tmpLen = len;
+            while (tmpLen > 0) {
+                tmpLen = tmpLen - 90;
+                packageCount++;
+            }
+
+            console.log("packageCount:" + packageCount);
+
+            var pindex = 0;
+            tmpLen = len;
+            while (tmpLen > 0) {
+                tmpLen = tmpLen - 90;
+
+                if (tmpLen > 0) {
+                    var totalLen = 90 + 11;
+                    var aDataArray = new Uint8Array(totalLen);
+                    aDataArray[0] = 0x77;
+                    aDataArray[1] = 0x88;
+                    aDataArray[2] = 0xA8;
+                    aDataArray[3] = len >> 16 & 0xff;
+                    aDataArray[4] = len >> 8 & 0xff;
+                    aDataArray[5] = len & 0xff;
+                    aDataArray[6] = packageCount >> 8 & 0xff;   //包总数
+                    aDataArray[7] = packageCount & 0xff;   //包总数
+                    aDataArray[8] = 90;   //分包长度
+                    aDataArray[9] = pindex >> 8 & 0xff;   //包序号
+                    aDataArray[10] = pindex & 0xff;    //包序号
+                    console.log("pindex:" + pindex);
+                    for (var i = 0; i < 90; i++) {
+                        aDataArray[11 + i] = pathArray[i + pindex * 90];
+                    }
+                    socket.send(aDataArray.buffer);
+                }
+                else {
+                    var totalLen = 90 + tmpLen + 11;  // 此时tmpLen为负数,做加法运算
+                    var aDataArray = new Uint8Array(totalLen);
+                    aDataArray[0] = 0x77;
+                    aDataArray[1] = 0x88;
+                    aDataArray[2] = 0xA8;
+                    aDataArray[3] = len >> 16 & 0xff;
+                    aDataArray[4] = len >> 8 & 0xff;
+                    aDataArray[5] = len & 0xff;
+                    aDataArray[6] = packageCount >> 8 & 0xff;   //包总数
+                    aDataArray[7] = packageCount & 0xff;   //包总数
+                    aDataArray[8] = 90 + tmpLen;   //分包长度
+                    aDataArray[9] = pindex >> 8 & 0xff;   //包序号
+                    aDataArray[10] = pindex & 0xff;    //包序号
+                    console.log("pindex:" + pindex);
+                    for (var i = 0; i < (90 + tmpLen); i++) {
+                        aDataArray[11 + i] = pathArray[i + pindex * 90];
+                    }
+                    socket.send(aDataArray.buffer);
+                }
+                pindex++;
+                toSleep(80);
+            }
+        }
+
+    }
+}
+
+
+
+function CombinePDF(filePath) {
+    if (isSocketConnect) {
+
+
+//        if (filePath == "") {
+//            var len = 0;
+//            var aDataArray = new Uint8Array(3);
+//            aDataArray[0] = 0x77;
+//            aDataArray[1] = 0x88;
+//            aDataArray[2] = 0x32;
+//            for (var i = 0; i < len; i++) {
+//                aDataArray[3 + i] = pathArray[i];
+//            }
+//            socket.send(aDataArray.buffer);
+//        }
+//        else {
+//            var path = encodeURI(filePath);
+//            var pathArray = stringToByte(path);
+//            var len = pathArray.length;
+//            var totalLen = len + 3;
+//            var aDataArray = new Uint8Array(totalLen);
+//            aDataArray[0] = 0x77;
+//            aDataArray[1] = 0x88;
+//            aDataArray[2] = 0x32;
+//            for (var i = 0; i < len; i++) {
+//                aDataArray[3 + i] = pathArray[i];
+//            }
+//            socket.send(aDataArray.buffer);
+        //        }       
+
+
+        if (filePath == "") {
+            var packageCount = 1;
+            var len = 0;
+            var pindex = 0;
+            var totalLen = 11;
+            var aDataArray = new Uint8Array(totalLen);
+            aDataArray[0] = 0x77;
+            aDataArray[1] = 0x88;
+            aDataArray[2] = 0x32;
+            aDataArray[3] = len >> 16 & 0xff;
+            aDataArray[4] = len >> 8 & 0xff;
+            aDataArray[5] = len & 0xff;
+            aDataArray[6] = packageCount >> 8 & 0xff;   //包总数
+            aDataArray[7] = packageCount & 0xff;   //包总数
+            aDataArray[8] = 0;   //分包长度
+            aDataArray[9] = pindex >> 8 & 0xff;   //包序号
+            aDataArray[10] = pindex & 0xff;    //包序号
+            console.log("pindex:" + pindex);
+            socket.send(aDataArray.buffer);
+        }
+        else {
+            var path = encodeURI(filePath);
+            //console.log(path);
+            var pathArray = stringToByte(path);
+            var len = pathArray.length;
+
+            var packageCount = 0;
+            var tmpLen = len;
+            while (tmpLen > 0) {
+                tmpLen = tmpLen - 90;
+                packageCount++;
+            }
+
+            console.log("packageCount:" + packageCount);
+
+            var pindex = 0;
+            tmpLen = len;
+            while (tmpLen > 0) {
+                tmpLen = tmpLen - 90;
+
+                if (tmpLen > 0) {
+                    var totalLen = 90 + 11;
+                    var aDataArray = new Uint8Array(totalLen);
+                    aDataArray[0] = 0x77;
+                    aDataArray[1] = 0x88;
+                    aDataArray[2] = 0x32;
+                    aDataArray[3] = len >> 16 & 0xff;
+                    aDataArray[4] = len >> 8 & 0xff;
+                    aDataArray[5] = len & 0xff;
+                    aDataArray[6] = packageCount >> 8 & 0xff;   //包总数
+                    aDataArray[7] = packageCount & 0xff;   //包总数
+                    aDataArray[8] = 90;   //分包长度
+                    aDataArray[9] = pindex >> 8 & 0xff;   //包序号
+                    aDataArray[10] = pindex & 0xff;    //包序号
+                    console.log("pindex:" + pindex);
+                    for (var i = 0; i < 90; i++) {
+                        aDataArray[11 + i] = pathArray[i + pindex * 90];
+                    }
+                    socket.send(aDataArray.buffer);
+                }
+                else {
+                    var totalLen = 90 + tmpLen + 11;  // 此时tmpLen为负数,做加法运算
+                    var aDataArray = new Uint8Array(totalLen);
+                    aDataArray[0] = 0x77;
+                    aDataArray[1] = 0x88;
+                    aDataArray[2] = 0x32;
+                    aDataArray[3] = len >> 16 & 0xff;
+                    aDataArray[4] = len >> 8 & 0xff;
+                    aDataArray[5] = len & 0xff;
+                    aDataArray[6] = packageCount >> 8 & 0xff;   //包总数
+                    aDataArray[7] = packageCount & 0xff;   //包总数
+                    aDataArray[8] = 90 + tmpLen;   //分包长度
+                    aDataArray[9] = pindex >> 8 & 0xff;   //包序号
+                    aDataArray[10] = pindex & 0xff;    //包序号
+                    console.log("pindex:" + pindex);
+                    for (var i = 0; i < (90 + tmpLen); i++) {
+                        aDataArray[11 + i] = pathArray[i + pindex * 90];
+                    }
+                    socket.send(aDataArray.buffer);
+                }
+                pindex++;
+                toSleep(80);
+            }
+        }
+
+    }
+ }
+
+
+function AddImgFileToPDF(filePath) {
+    if (isSocketConnect) {
+
+        if (filePath == "") {
+            var packageCount = 1;
+            var len = 0;
+            var pindex = 0;
+            var totalLen = 11;
+            var aDataArray = new Uint8Array(totalLen);
+            aDataArray[0] = 0x77;
+            aDataArray[1] = 0x88;
+            aDataArray[2] = 0x31;
+            aDataArray[3] = len >> 16 & 0xff;
+            aDataArray[4] = len >> 8 & 0xff;
+            aDataArray[5] = len & 0xff;
+            aDataArray[6] = packageCount >> 8 & 0xff;   //包总数
+            aDataArray[7] = packageCount & 0xff;   //包总数
+            aDataArray[8] = 0;   //分包长度
+            aDataArray[9] = pindex >> 8 & 0xff;   //包序号
+            aDataArray[10] = pindex & 0xff;    //包序号
+            console.log("pindex:" + pindex);
+            socket.send(aDataArray.buffer);
+        }
+        else {
+            var path = encodeURI(filePath);
+            console.log(path);
+            var pathArray = stringToByte(path);
+            var len = pathArray.length;
+
+            var packageCount = 0;
+            var tmpLen = len;
+            while (tmpLen > 0) {
+                tmpLen = tmpLen - 90;
+                packageCount++;
+            }
+
+            console.log("packageCount:" + packageCount);
+
+            var pindex = 0;
+            tmpLen = len;
+            while (tmpLen > 0) {
+                tmpLen = tmpLen - 90;
+
+                if (tmpLen > 0) {
+                    var totalLen = 90 + 11;
+                    var aDataArray = new Uint8Array(totalLen);
+                    aDataArray[0] = 0x77;
+                    aDataArray[1] = 0x88;
+                    aDataArray[2] = 0x31;
+                    aDataArray[3] = len >> 16 & 0xff;
+                    aDataArray[4] = len >> 8 & 0xff;
+                    aDataArray[5] = len & 0xff;
+                    aDataArray[6] = packageCount >> 8 & 0xff;   //包总数
+                    aDataArray[7] = packageCount & 0xff;   //包总数
+                    aDataArray[8] = 90;   //分包长度
+                    aDataArray[9] = pindex >> 8 & 0xff;   //包序号
+                    aDataArray[10] = pindex & 0xff;    //包序号
+                    console.log("pindex:" + pindex);
+                    for (var i = 0; i < 90; i++) {
+                        aDataArray[11 + i] = pathArray[i + pindex * 90];
+                    }
+                    socket.send(aDataArray.buffer);
+                }
+                else {
+                    var totalLen = 90 + tmpLen + 11;  // 此时tmpLen为负数,做加法运算
+                    var aDataArray = new Uint8Array(totalLen);
+                    aDataArray[0] = 0x77;
+                    aDataArray[1] = 0x88;
+                    aDataArray[2] = 0x31;
+                    aDataArray[3] = len >> 16 & 0xff;
+                    aDataArray[4] = len >> 8 & 0xff;
+                    aDataArray[5] = len & 0xff;
+                    aDataArray[6] = packageCount >> 8 & 0xff;   //包总数
+                    aDataArray[7] = packageCount & 0xff;   //包总数
+                    aDataArray[8] = 90 + tmpLen;   //分包长度
+                    aDataArray[9] = pindex >> 8 & 0xff;   //包序号
+                    aDataArray[10] = pindex & 0xff;    //包序号
+                    console.log("pindex:" + pindex);
+                    for (var i = 0; i < (90 + tmpLen); i++) {
+                        aDataArray[11 + i] = pathArray[i + pindex * 90];
+                    }
+                    socket.send(aDataArray.buffer);
+                }
+                pindex++;
+                toSleep(200);
+            }
+        }
+    }
+}
+
+
+function AddImgFileToPDFex(filePath) {
+    if (isSocketConnect) {
+
+        if (filePath == "") {
+            var packageCount = 1;
+            var len = 0;
+            var pindex = 0;
+            var totalLen = 11;
+            var aDataArray = new Uint8Array(totalLen);
+            aDataArray[0] = 0x77;
+            aDataArray[1] = 0x88;
+            aDataArray[2] = 0x33;
+            aDataArray[3] = len >> 16 & 0xff;
+            aDataArray[4] = len >> 8 & 0xff;
+            aDataArray[5] = len & 0xff;
+            aDataArray[6] = packageCount >> 8 & 0xff;   //包总数
+            aDataArray[7] = packageCount & 0xff;   //包总数
+            aDataArray[8] = 0;   //分包长度
+            aDataArray[9] = pindex >> 8 & 0xff;   //包序号
+            aDataArray[10] = pindex & 0xff;    //包序号
+            console.log("pindex:" + pindex);
+            socket.send(aDataArray.buffer);
+        }
+        else {
+            var path = encodeURI(filePath);
+            console.log(path);
+            var pathArray = stringToByte(path);
+            var len = pathArray.length;
+
+            var packageCount = 0;
+            var tmpLen = len;
+            while (tmpLen > 0) {
+                tmpLen = tmpLen - 90;
+                packageCount++;
+            }
+
+            console.log("packageCount:" + packageCount);
+
+            var pindex = 0;
+            tmpLen = len;
+            while (tmpLen > 0) {
+                tmpLen = tmpLen - 90;
+
+                if (tmpLen > 0) {
+                    var totalLen = 90 + 11;
+                    var aDataArray = new Uint8Array(totalLen);
+                    aDataArray[0] = 0x77;
+                    aDataArray[1] = 0x88;
+                    aDataArray[2] = 0x33;
+                    aDataArray[3] = len >> 16 & 0xff;
+                    aDataArray[4] = len >> 8 & 0xff;
+                    aDataArray[5] = len & 0xff;
+                    aDataArray[6] = packageCount >> 8 & 0xff;   //包总数
+                    aDataArray[7] = packageCount & 0xff;   //包总数
+                    aDataArray[8] = 90;   //分包长度
+                    aDataArray[9] = pindex >> 8 & 0xff;   //包序号
+                    aDataArray[10] = pindex & 0xff;    //包序号
+                    console.log("pindex:" + pindex);
+                    for (var i = 0; i < 90; i++) {
+                        aDataArray[11 + i] = pathArray[i + pindex * 90];
+                    }
+                    socket.send(aDataArray.buffer);
+                }
+                else {
+                    var totalLen = 90 + tmpLen + 11;  // 此时tmpLen为负数,做加法运算
+                    var aDataArray = new Uint8Array(totalLen);
+                    aDataArray[0] = 0x77;
+                    aDataArray[1] = 0x88;
+                    aDataArray[2] = 0x33;
+                    aDataArray[3] = len >> 16 & 0xff;
+                    aDataArray[4] = len >> 8 & 0xff;
+                    aDataArray[5] = len & 0xff;
+                    aDataArray[6] = packageCount >> 8 & 0xff;   //包总数
+                    aDataArray[7] = packageCount & 0xff;   //包总数
+                    aDataArray[8] = 90 + tmpLen;   //分包长度
+                    aDataArray[9] = pindex >> 8 & 0xff;   //包序号
+                    aDataArray[10] = pindex & 0xff;    //包序号
+                    console.log("pindex:" + pindex);
+                    for (var i = 0; i < (90 + tmpLen); i++) {
+                        aDataArray[11 + i] = pathArray[i + pindex * 90];
+                    }
+                    socket.send(aDataArray.buffer);
+                }
+                pindex++;
+                toSleep(80);
+            }
+        }
+
+    }
+}
+
+
+function AddMergeImageFile(filePath) {
+    if (isSocketConnect) {
+        if (filePath == "") {
+            var len = 0;
+            var totalLen = len + 3;
+            var aDataArray = new Uint8Array(totalLen);
+            aDataArray[0] = 0x77;
+            aDataArray[1] = 0x88;
+            aDataArray[2] = 0xC0;
+            for (var i = 0; i < len; i++) {
+                aDataArray[3 + i] = pathArray[i];
+            }
+            socket.send(aDataArray.buffer);
+        }
+        else {
+
+            var path = encodeURI(filePath);
+            var pathArray = stringToByte(path);
+            var len = pathArray.length;
+            var totalLen = len + 3;
+            var aDataArray = new Uint8Array(totalLen);
+            aDataArray[0] = 0x77;
+            aDataArray[1] = 0x88;
+            aDataArray[2] = 0xC0;
+            for (var i = 0; i < len; i++) {
+                aDataArray[3 + i] = pathArray[i];
+            }
+            socket.send(aDataArray.buffer);
+
+        }
+    }
+}
+
+
+function MergeImages(filePath, dir) {
+    if (isSocketConnect) {
+        if (filePath == "") {
+            var len = 0;
+            var totalLen = len + 4;
+            var aDataArray = new Uint8Array(totalLen);
+            aDataArray[0] = 0x77;
+            aDataArray[1] = 0x88;
+            aDataArray[2] = 0xC1;
+            aDataArray[3] = dir;
+            for (var i = 0; i < len; i++) {
+                aDataArray[4 + i] = pathArray[i];
+            }
+            socket.send(aDataArray.buffer);
+        }
+        else {
+
+            var path = encodeURI(filePath);
+            var pathArray = stringToByte(path);
+            var len = pathArray.length;
+            var totalLen = len + 4;
+            var aDataArray = new Uint8Array(totalLen);
+            aDataArray[0] = 0x77;
+            aDataArray[1] = 0x88;
+            aDataArray[2] = 0xC1;
+            aDataArray[3] = dir;
+            for (var i = 0; i < len; i++) {
+                aDataArray[4 + i] = pathArray[i];
+            }
+            socket.send(aDataArray.buffer);
+
+        }
+    }
+ }
+
+
+function RecogQrBarCodeFromCamera(type) {
+    if (isSocketConnect) {
+        var aDataArray = new Uint8Array(4);
+        aDataArray[0] = 0x77;
+        aDataArray[1] = 0x88;
+        aDataArray[2] = 0xA3;
+        aDataArray[3] = type;
+        socket.send(aDataArray.buffer);
+    }
+}
+
+function RecogQrBarCodeFromFile(type, filePath) {
+    if (isSocketConnect) {
+        console.log(filePath);
+        var path = encodeURI(filePath);
+        var pathArray = stringToByte(path);
+        var len = pathArray.length;
+        var totalLen = len + 4;
+        var aDataArray = new Uint8Array(totalLen);
+        aDataArray[0] = 0x77;
+        aDataArray[1] = 0x88;
+        aDataArray[2] = 0xA4;
+        aDataArray[3] = type;
+        for (var i = 0; i < len; i++) {
+            aDataArray[4 + i] = pathArray[i];
+        }
+        socket.send(aDataArray.buffer);
+    }
+}
+
+
+function SetFileType(filetype) {
+    if (isSocketConnect) {
+        var aDataArray = new Uint8Array(4);
+        aDataArray[0] = 0x77;
+        aDataArray[1] = 0x88;
+        aDataArray[2] = 0x28;
+        aDataArray[3] = filetype;
+        if (filetype == 1)  //png格式
+            aDataArray[3] = 2;
+        if (filetype == 2)  //tif格式
+            aDataArray[3] = 3;
+        if (filetype == 3)  //pdf格式
+            aDataArray[3] = 4;
+        socket.send(aDataArray.buffer);
+    }
+}
+
+function SetJpgQuality(val) {
+    if (isSocketConnect) {
+        var aDataArray = new Uint8Array(4);
+        aDataArray[0] = 0x77;
+        aDataArray[1] = 0x88;
+        aDataArray[2] = 0x29;
+        aDataArray[3] = val;
+        socket.send(aDataArray.buffer);
+    }
+}
+
+function SetColorMode(colorMode) {
+    if (isSocketConnect) {
+        var aDataArray = new Uint8Array(4);
+        aDataArray[0] = 0x77;
+        aDataArray[1] = 0x88;
+        aDataArray[2] = 0xA0;
+        aDataArray[3] = colorMode;
+        socket.send(aDataArray.buffer);
+    }
+}
+
+
+function SetDpi(xDpi,yDpi) {
+    if (isSocketConnect) {
+        var aDataArray = new Uint8Array(7);
+        aDataArray[0] = 0x77;
+        aDataArray[1] = 0x88;
+        aDataArray[2] = 0xA9;
+        aDataArray[3] = xDpi >> 8 & 0xff;
+        aDataArray[4] = xDpi & 0xff;
+        aDataArray[5] = yDpi >> 8 & 0xff;
+        aDataArray[6] = yDpi & 0xff;
+        socket.send(aDataArray.buffer);
+    }
+}
+
+
+function SetDeleteBlackEdge(flag) {
+    if (isSocketConnect) {
+        var aDataArray = new Uint8Array(4);
+        aDataArray[0] = 0x77;
+        aDataArray[1] = 0x88;
+        aDataArray[2] = 0xA1;
+        aDataArray[3] = flag;
+        socket.send(aDataArray.buffer);
+    }
+}
+
+function Cam_SetDeleteBgColor(flag) {
+    if (isSocketConnect) {
+        var aDataArray = new Uint8Array(4);
+        aDataArray[0] = 0x77;
+        aDataArray[1] = 0x88;
+        aDataArray[2] = 0xA2;
+        aDataArray[3] = flag;
+        socket.send(aDataArray.buffer);
+    }
+}
+
+
+function toUploadFile(url, filepath) {
+
+    if (isSocketConnect) {
+
+        //console.log(url);
+        var urlpath = encodeURI(url);
+        var urlpathArray = stringToByte(urlpath);
+        //console.log(urlpath);
+
+        var imgpath = encodeURI(filepath);
+        var imgpathArray = stringToByte(imgpath);
+
+        var len = urlpathArray.length + imgpathArray.length;
+        var pathDataArray = new Uint8Array(len);
+        for (var i = 0; i < urlpathArray.length; i++) {
+            pathDataArray[i] = urlpathArray[i];
+        }
+        for (var i = 0; i < imgpathArray.length; i++) {
+            pathDataArray[urlpathArray.length + i] = imgpathArray[i];
+        }
+
+        var packageCount = 0;
+        var tmpLen=len;
+        while (tmpLen > 0) {
+            tmpLen = tmpLen - 90;
+            packageCount++;
+        }
+
+        console.log("packageCount:" + packageCount);
+
+        var pindex = 0;
+        tmpLen = len;
+        while (tmpLen > 0) {
+            tmpLen = tmpLen - 90;
+           
+            if (tmpLen > 0) {
+                var totalLen = 90 + 17;
+                var aDataArray = new Uint8Array(totalLen);
+                aDataArray[0] = 0x77;
+                aDataArray[1] = 0x88;
+                aDataArray[2] = 0x90;
+                aDataArray[3] = len >> 16 & 0xff;
+                aDataArray[4] = len >> 8 & 0xff;
+                aDataArray[5] = len & 0xff;
+                aDataArray[6] = urlpathArray.length >> 16 & 0xff;
+                aDataArray[7] = urlpathArray.length >> 8 & 0xff;
+                aDataArray[8] = urlpathArray.length & 0xff;
+                aDataArray[9] = imgpathArray.length >> 16 & 0xff;
+                aDataArray[10] = imgpathArray.length >> 8 & 0xff;
+                aDataArray[11] = imgpathArray.length & 0xff;
+                aDataArray[12] = packageCount >> 8 & 0xff;   //包总数
+                aDataArray[13] = packageCount & 0xff;   //包总数
+                aDataArray[14] = 90;   //分包长度
+                aDataArray[15] = pindex >> 8 & 0xff;   //包序号
+                aDataArray[16] = pindex & 0xff;    //包序号
+                console.log("pindex:" + pindex);
+                for (var i = 0; i < 90; i++) {
+                    aDataArray[17 + i] = pathDataArray[i + pindex*90];
+                }
+                socket.send(aDataArray.buffer);
+            }
+            else {
+                var totalLen = 90 + tmpLen + 17;  // 此时tmpLen为负数,做加法运算
+                var aDataArray = new Uint8Array(totalLen);
+                aDataArray[0] = 0x77;
+                aDataArray[1] = 0x88;
+                aDataArray[2] = 0x90;
+                aDataArray[3] = len >> 16 & 0xff;
+                aDataArray[4] = len >> 8 & 0xff;
+                aDataArray[5] = len & 0xff;
+                aDataArray[6] = urlpathArray.length >> 16 & 0xff;
+                aDataArray[7] = urlpathArray.length >> 8 & 0xff;
+                aDataArray[8] = urlpathArray.length & 0xff;
+                aDataArray[9] = imgpathArray.length >> 16 & 0xff;
+                aDataArray[10] = imgpathArray.length >> 8 & 0xff;
+                aDataArray[11] = imgpathArray.length & 0xff;
+                aDataArray[12] = packageCount >> 8 & 0xff;   //包总数
+                aDataArray[13] = packageCount & 0xff;   //包总数
+                aDataArray[14] = 90 + tmpLen;   //分包长度
+                aDataArray[15] = pindex >> 8 & 0xff;   //包序号
+                aDataArray[16] = pindex & 0xff;    //包序号
+                console.log("pindex:" + pindex);
+                for (var i = 0; i < (90 + tmpLen); i++) {
+                    aDataArray[17 + i] = pathDataArray[i + pindex * 90];
+                }
+                socket.send(aDataArray.buffer);
+            }
+            pindex++;
+            toSleep(80);
+        }
+
+    }
+
+}
+
+
+
+function toUploadFileEx(lpServer, lpAddr, port, filepath) {
+
+    if (isSocketConnect) {
+
+        //console.log(url);
+        var lpServerPath = encodeURI(lpServer);
+        var lpServerArray = stringToByte(lpServerPath);
+        var lpAddrPath = encodeURI(lpAddr);
+        var lpAddrArray = stringToByte(lpAddrPath);
+        var imgpath = encodeURI(filepath);
+        var imgpathArray = stringToByte(imgpath);
+
+        var len = lpServerArray.length + lpAddrArray.length + imgpathArray.length;
+
+        var pathDataArray = new Uint8Array(len);
+        for (var i = 0; i < lpServerArray.length; i++) {
+            pathDataArray[i] = lpServerArray[i];
+        }
+        for (var i = 0; i < lpAddrArray.length; i++) {
+            pathDataArray[lpServerArray.length + i] = lpAddrArray[i];
+        }
+        for (var i = 0; i < imgpathArray.length; i++) {
+            pathDataArray[lpServerArray.length + lpAddrArray.length + i] = imgpathArray[i];
+        }
+
+        var packageCount = 0;
+        var tmpLen = len;
+        while (tmpLen > 0) {
+            tmpLen = tmpLen - 90;
+            packageCount++;
+        }
+
+        console.log("packageCount:" + packageCount);
+
+        var pindex = 0;
+        tmpLen = len;
+        while (tmpLen > 0) {
+            tmpLen = tmpLen - 90;
+
+            if (tmpLen > 0) {
+                var totalLen = 90 + 23;
+                var aDataArray = new Uint8Array(totalLen);
+                aDataArray[0] = 0x77;
+                aDataArray[1] = 0x88;
+                aDataArray[2] = 0x92;
+                aDataArray[3] = len >> 16 & 0xff;
+                aDataArray[4] = len >> 8 & 0xff;
+                aDataArray[5] = len & 0xff;
+                aDataArray[6] = port >> 16 & 0xff;
+                aDataArray[7] = port >> 8 & 0xff;
+                aDataArray[8] = port & 0xff;
+                aDataArray[9] = lpServerArray.length >> 16 & 0xff;
+                aDataArray[10] = lpServerArray.length >> 8 & 0xff;
+                aDataArray[11] = lpServerArray.length & 0xff;
+                aDataArray[12] = lpAddrArray.length >> 16 & 0xff;
+                aDataArray[13] = lpAddrArray.length >> 8 & 0xff;
+                aDataArray[14] = lpAddrArray.length & 0xff;
+                aDataArray[15] = imgpathArray.length >> 16 & 0xff;
+                aDataArray[16] = imgpathArray.length >> 8 & 0xff;
+                aDataArray[17] = imgpathArray.length & 0xff;
+                aDataArray[18] = packageCount >> 8 & 0xff;   //包总数
+                aDataArray[19] = packageCount & 0xff;   //包总数
+                aDataArray[20] = 90;   //分包长度
+                aDataArray[21] = pindex >> 8 & 0xff;   //包序号
+                aDataArray[22] = pindex & 0xff;    //包序号
+                console.log("pindex:" + pindex);
+                for (var i = 0; i < 90; i++) {
+                    aDataArray[23 + i] = pathDataArray[i + pindex * 90];
+                }
+                socket.send(aDataArray.buffer);
+            }
+            else {
+                var totalLen = 90 + tmpLen + 23;  // 此时tmpLen为负数,做加法运算
+                var aDataArray = new Uint8Array(totalLen);
+                aDataArray[0] = 0x77;
+                aDataArray[1] = 0x88;
+                aDataArray[2] = 0x92;
+                aDataArray[3] = len >> 16 & 0xff;
+                aDataArray[4] = len >> 8 & 0xff;
+                aDataArray[5] = len & 0xff;
+                aDataArray[6] = port >> 16 & 0xff;
+                aDataArray[7] = port >> 8 & 0xff;
+                aDataArray[8] = port & 0xff;
+                aDataArray[9] = lpServerArray.length >> 16 & 0xff;
+                aDataArray[10] = lpServerArray.length >> 8 & 0xff;
+                aDataArray[11] = lpServerArray.length & 0xff;
+                aDataArray[12] = lpAddrArray.length >> 16 & 0xff;
+                aDataArray[13] = lpAddrArray.length >> 8 & 0xff;
+                aDataArray[14] = lpAddrArray.length & 0xff;
+                aDataArray[15] = imgpathArray.length >> 16 & 0xff;
+                aDataArray[16] = imgpathArray.length >> 8 & 0xff;
+                aDataArray[17] = imgpathArray.length & 0xff;
+                aDataArray[18] = packageCount >> 8 & 0xff;   //包总数
+                aDataArray[19] = packageCount & 0xff;   //包总数
+                aDataArray[20] = 90 + tmpLen;   //分包长度
+                aDataArray[21] = pindex >> 8 & 0xff;   //包序号
+                aDataArray[22] = pindex & 0xff;    //包序号
+                console.log("pindex:" + pindex);
+                for (var i = 0; i < (90 + tmpLen); i++) {
+                    aDataArray[23 + i] = pathDataArray[i + pindex * 90];
+                }
+                socket.send(aDataArray.buffer);
+            }
+            pindex++;
+            toSleep(80);
+        }
+
+    }
+
+}
+
+
+function AddOcrRecogFile(filePath) {
+    if (isSocketConnect) {
+
+        if (filePath == "") {
+            var packageCount = 1;
+            var len = 0;
+            var pindex = 0;
+            var totalLen = 11;
+            var aDataArray = new Uint8Array(totalLen);
+            aDataArray[0] = 0x77;
+            aDataArray[1] = 0x88;
+            aDataArray[2] = 0xC3;
+            aDataArray[3] = len >> 16 & 0xff;
+            aDataArray[4] = len >> 8 & 0xff;
+            aDataArray[5] = len & 0xff;
+            aDataArray[6] = packageCount >> 8 & 0xff;   //包总数
+            aDataArray[7] = packageCount & 0xff;   //包总数
+            aDataArray[8] = 0;   //分包长度
+            aDataArray[9] = pindex >> 8 & 0xff;   //包序号
+            aDataArray[10] = pindex & 0xff;    //包序号
+            console.log("pindex:" + pindex);
+            socket.send(aDataArray.buffer);
+        }
+        else {
+            var path = encodeURI(filePath);
+            console.log(path);
+            var pathArray = stringToByte(path);
+            var len = pathArray.length;
+
+            var packageCount = 0;
+            var tmpLen = len;
+            while (tmpLen > 0) {
+                tmpLen = tmpLen - 90;
+                packageCount++;
+            }
+
+            console.log("packageCount:" + packageCount);
+
+            var pindex = 0;
+            tmpLen = len;
+            while (tmpLen > 0) {
+                tmpLen = tmpLen - 90;
+
+                if (tmpLen > 0) {
+                    var totalLen = 90 + 11;
+                    var aDataArray = new Uint8Array(totalLen);
+                    aDataArray[0] = 0x77;
+                    aDataArray[1] = 0x88;
+                    aDataArray[2] = 0xC3;
+                    aDataArray[3] = len >> 16 & 0xff;
+                    aDataArray[4] = len >> 8 & 0xff;
+                    aDataArray[5] = len & 0xff;
+                    aDataArray[6] = packageCount >> 8 & 0xff;   //包总数
+                    aDataArray[7] = packageCount & 0xff;   //包总数
+                    aDataArray[8] = 90;   //分包长度
+                    aDataArray[9] = pindex >> 8 & 0xff;   //包序号
+                    aDataArray[10] = pindex & 0xff;    //包序号
+                    console.log("pindex:" + pindex);
+                    for (var i = 0; i < 90; i++) {
+                        aDataArray[11 + i] = pathArray[i + pindex * 90];
+                    }
+                    socket.send(aDataArray.buffer);
+                }
+                else {
+                    var totalLen = 90 + tmpLen + 11;  // 此时tmpLen为负数,做加法运算
+                    var aDataArray = new Uint8Array(totalLen);
+                    aDataArray[0] = 0x77;
+                    aDataArray[1] = 0x88;
+                    aDataArray[2] = 0xC3;
+                    aDataArray[3] = len >> 16 & 0xff;
+                    aDataArray[4] = len >> 8 & 0xff;
+                    aDataArray[5] = len & 0xff;
+                    aDataArray[6] = packageCount >> 8 & 0xff;   //包总数
+                    aDataArray[7] = packageCount & 0xff;   //包总数
+                    aDataArray[8] = 90 + tmpLen;   //分包长度
+                    aDataArray[9] = pindex >> 8 & 0xff;   //包序号
+                    aDataArray[10] = pindex & 0xff;    //包序号
+                    console.log("pindex:" + pindex);
+                    for (var i = 0; i < (90 + tmpLen); i++) {
+                        aDataArray[11 + i] = pathArray[i + pindex * 90];
+                    }
+                    socket.send(aDataArray.buffer);
+                }
+                pindex++;
+                toSleep(200);
+            }
+        }
+
+//        if (filePath == "") {
+//            var len = 0;
+//            var totalLen = len + 3;
+//            var aDataArray = new Uint8Array(totalLen);
+//            aDataArray[0] = 0x77;
+//            aDataArray[1] = 0x88;
+//            aDataArray[2] = 0xC3;
+//            for (var i = 0; i < len; i++) {
+//                aDataArray[3 + i] = pathArray[i];
+//            }
+//            socket.send(aDataArray.buffer);
+//        }
+//        else {
+
+//            var path = encodeURI(filePath);
+//            var pathArray = stringToByte(path);
+//            var len = pathArray.length;
+//            var totalLen = len + 3;
+//            var aDataArray = new Uint8Array(totalLen);
+//            aDataArray[0] = 0x77;
+//            aDataArray[1] = 0x88;
+//            aDataArray[2] = 0xC3;
+//            for (var i = 0; i < len; i++) {
+//                aDataArray[3 + i] = pathArray[i];
+//            }
+//            socket.send(aDataArray.buffer);
+
+//        }
+    }
+}
+
+
+function OcrCallProEx(languageIndex, outpath, isDelSrcFile) {
+
+    if (isSocketConnect) {
+
+        var iRestPath = encodeURI(outpath);
+        var txtpathArray = stringToByte(iRestPath);
+        var len = txtpathArray.length;
+
+        var packageCount = 0;
+        var tmpLen = len;
+        while (tmpLen > 0) {
+            tmpLen = tmpLen - 90;
+            packageCount++;
+        }
+
+        console.log("packageCount:" + packageCount);
+
+        var pindex = 0;
+        tmpLen = len;
+        while (tmpLen > 0) {
+            tmpLen = tmpLen - 90;
+
+            if (tmpLen > 0) {
+                var totalLen = 90 + 13;
+                var aDataArray = new Uint8Array(totalLen);
+                aDataArray[0] = 0x77;
+                aDataArray[1] = 0x88;
+                aDataArray[2] = 0xC4;
+                aDataArray[3] = languageIndex;
+                aDataArray[4] = isDelSrcFile;
+                aDataArray[5] = len >> 16 & 0xff;
+                aDataArray[6] = len >> 8 & 0xff;
+                aDataArray[7] = len & 0xff;;
+                aDataArray[8] = packageCount >> 8 & 0xff;   //包总数
+                aDataArray[9] = packageCount & 0xff;   //包总数
+                aDataArray[10] = 90;   //分包长度
+                aDataArray[11] = pindex >> 8 & 0xff;   //包序号
+                aDataArray[12] = pindex & 0xff;    //包序号
+                console.log("pindex:" + pindex);
+                for (var i = 0; i < 90; i++) {
+                    aDataArray[13 + i] = txtpathArray[i + pindex * 90];
+                }
+                socket.send(aDataArray.buffer);
+            }
+            else {
+                var totalLen = 90 + tmpLen + 13;  // 此时tmpLen为负数,做加法运算
+                var aDataArray = new Uint8Array(totalLen);
+                aDataArray[0] = 0x77;
+                aDataArray[1] = 0x88;
+                aDataArray[2] = 0xC4;
+                aDataArray[3] = languageIndex;
+                aDataArray[4] = isDelSrcFile;
+                aDataArray[5] = len >> 16 & 0xff;
+                aDataArray[6] = len >> 8 & 0xff;
+                aDataArray[7] = len & 0xff;
+                aDataArray[8] = packageCount >> 8 & 0xff;   //包总数
+                aDataArray[9] = packageCount & 0xff;   //包总数
+                aDataArray[10] = 90 + tmpLen;   //分包长度
+                aDataArray[11] = pindex >> 8 & 0xff;   //包序号
+                aDataArray[12] = pindex & 0xff;    //包序号
+                console.log("pindex:" + pindex);
+                for (var i = 0; i < (90 + tmpLen); i++) {
+                    aDataArray[13 + i] = txtpathArray[i + pindex * 90];
+                }
+                socket.send(aDataArray.buffer);
+            }
+            pindex++;
+            toSleep(80);
+        }
+
+    }
+
+}
+
+
+function OcrCallPro(languageIndex, filePath, txtpath) {
+
+    if (isSocketConnect) {
+
+        //console.log(url);
+        var urlpath = encodeURI(filePath);
+        var urlpathArray = stringToByte(urlpath);
+        //console.log(urlpath);
+
+        var iRestPath = encodeURI(txtpath);
+        var txtpathArray = stringToByte(iRestPath);
+
+        var len = urlpathArray.length + txtpathArray.length;
+        var pathDataArray = new Uint8Array(len);
+        for (var i = 0; i < urlpathArray.length; i++) {
+            pathDataArray[i] = urlpathArray[i];
+        }
+        for (var i = 0; i < txtpathArray.length; i++) {
+            pathDataArray[urlpathArray.length + i] = txtpathArray[i];
+        }
+
+        var packageCount = 0;
+        var tmpLen = len;
+        while (tmpLen > 0) {
+            tmpLen = tmpLen - 90;
+            packageCount++;
+        }
+
+        console.log("packageCount:" + packageCount);
+
+        var pindex = 0;
+        tmpLen = len;
+        while (tmpLen > 0) {
+            tmpLen = tmpLen - 90;
+
+            if (tmpLen > 0) {
+                var totalLen = 90 + 18;
+                var aDataArray = new Uint8Array(totalLen);
+                aDataArray[0] = 0x77;
+                aDataArray[1] = 0x88;
+                aDataArray[2] = 0xC2;
+                aDataArray[3] = languageIndex;
+                aDataArray[4] = len >> 16 & 0xff;
+                aDataArray[5] = len >> 8 & 0xff;
+                aDataArray[6] = len & 0xff;
+                aDataArray[7] = urlpathArray.length >> 16 & 0xff;
+                aDataArray[8] = urlpathArray.length >> 8 & 0xff;
+                aDataArray[9] = urlpathArray.length & 0xff;
+                aDataArray[10] = txtpathArray.length >> 16 & 0xff;
+                aDataArray[11] = txtpathArray.length >> 8 & 0xff;
+                aDataArray[12] = txtpathArray.length & 0xff;
+                aDataArray[13] = packageCount >> 8 & 0xff;   //包总数
+                aDataArray[14] = packageCount & 0xff;   //包总数
+                aDataArray[15] = 90;   //分包长度
+                aDataArray[16] = pindex >> 8 & 0xff;   //包序号
+                aDataArray[17] = pindex & 0xff;    //包序号
+                console.log("pindex:" + pindex);
+                for (var i = 0; i < 90; i++) {
+                    aDataArray[18 + i] = pathDataArray[i + pindex * 90];
+                }
+                socket.send(aDataArray.buffer);
+            }
+            else {
+                var totalLen = 90 + tmpLen + 18;  // 此时tmpLen为负数,做加法运算
+                var aDataArray = new Uint8Array(totalLen);
+                aDataArray[0] = 0x77;
+                aDataArray[1] = 0x88;
+                aDataArray[2] = 0xC2;
+                aDataArray[3] = languageIndex;
+                aDataArray[4] = len >> 16 & 0xff;
+                aDataArray[5] = len >> 8 & 0xff;
+                aDataArray[6] = len & 0xff;
+                aDataArray[7] = urlpathArray.length >> 16 & 0xff;
+                aDataArray[8] = urlpathArray.length >> 8 & 0xff;
+                aDataArray[9] = urlpathArray.length & 0xff;
+                aDataArray[10] = txtpathArray.length >> 16 & 0xff;
+                aDataArray[11] = txtpathArray.length >> 8 & 0xff;
+                aDataArray[12] = txtpathArray.length & 0xff;
+                aDataArray[13] = packageCount >> 8 & 0xff;   //包总数
+                aDataArray[14] = packageCount & 0xff;   //包总数
+                aDataArray[15] = 90 + tmpLen;   //分包长度
+                aDataArray[16] = pindex >> 8 & 0xff;   //包序号
+                aDataArray[17] = pindex & 0xff;    //包序号
+                console.log("pindex:" + pindex);
+                for (var i = 0; i < (90 + tmpLen); i++) {
+                    aDataArray[18 + i] = pathDataArray[i + pindex * 90];
+                }
+                socket.send(aDataArray.buffer);
+            }
+            pindex++;
+            toSleep(80);
+        }
+
+    }
+
+}
+
+
+function StartWiseCaptrue(folderPath) {
+    if (isSocketConnect) {
+
+        if (folderPath == "") {
+            var packageCount = 1;
+            var len = 0;
+            var pindex = 0;
+            var totalLen = 11;
+            var aDataArray = new Uint8Array(totalLen);
+            aDataArray[0] = 0x77;
+            aDataArray[1] = 0x88;
+            aDataArray[2] = 0xE0;
+            aDataArray[3] = len >> 16 & 0xff;
+            aDataArray[4] = len >> 8 & 0xff;
+            aDataArray[5] = len & 0xff;
+            aDataArray[6] = packageCount >> 8 & 0xff;   //包总数
+            aDataArray[7] = packageCount & 0xff;   //包总数
+            aDataArray[8] = 0;   //分包长度
+            aDataArray[9] = pindex >> 8 & 0xff;   //包序号
+            aDataArray[10] = pindex & 0xff;    //包序号
+            console.log("pindex:" + pindex);
+            socket.send(aDataArray.buffer);
+        }
+        else {
+            var path = encodeURI(folderPath);
+            console.log(path);
+            var pathArray = stringToByte(path);
+            var len = pathArray.length;
+
+            var packageCount = 0;
+            var tmpLen = len;
+            while (tmpLen > 0) {
+                tmpLen = tmpLen - 90;
+                packageCount++;
+            }
+
+            console.log("packageCount:" + packageCount);
+
+            var pindex = 0;
+            tmpLen = len;
+            while (tmpLen > 0) {
+                tmpLen = tmpLen - 90;
+
+                if (tmpLen > 0) {
+                    var totalLen = 90 + 11;
+                    var aDataArray = new Uint8Array(totalLen);
+                    aDataArray[0] = 0x77;
+                    aDataArray[1] = 0x88;
+                    aDataArray[2] = 0xE0;
+                    aDataArray[3] = len >> 16 & 0xff;
+                    aDataArray[4] = len >> 8 & 0xff;
+                    aDataArray[5] = len & 0xff;
+                    aDataArray[6] = packageCount >> 8 & 0xff;   //包总数
+                    aDataArray[7] = packageCount & 0xff;   //包总数
+                    aDataArray[8] = 90;   //分包长度
+                    aDataArray[9] = pindex >> 8 & 0xff;   //包序号
+                    aDataArray[10] = pindex & 0xff;    //包序号
+                    console.log("pindex:" + pindex);
+                    for (var i = 0; i < 90; i++) {
+                        aDataArray[11 + i] = pathArray[i + pindex * 90];
+                    }
+                    socket.send(aDataArray.buffer);
+                }
+                else {
+                    var totalLen = 90 + tmpLen + 11;  // 此时tmpLen为负数,做加法运算
+                    var aDataArray = new Uint8Array(totalLen);
+                    aDataArray[0] = 0x77;
+                    aDataArray[1] = 0x88;
+                    aDataArray[2] = 0xE0;
+                    aDataArray[3] = len >> 16 & 0xff;
+                    aDataArray[4] = len >> 8 & 0xff;
+                    aDataArray[5] = len & 0xff;
+                    aDataArray[6] = packageCount >> 8 & 0xff;   //包总数
+                    aDataArray[7] = packageCount & 0xff;   //包总数
+                    aDataArray[8] = 90 + tmpLen;   //分包长度
+                    aDataArray[9] = pindex >> 8 & 0xff;   //包序号
+                    aDataArray[10] = pindex & 0xff;    //包序号
+                    console.log("pindex:" + pindex);
+                    for (var i = 0; i < (90 + tmpLen); i++) {
+                        aDataArray[11 + i] = pathArray[i + pindex * 90];
+                    }
+                    socket.send(aDataArray.buffer);
+                }
+                pindex++;
+                toSleep(200);
+            }
+        }
+    }
+}
+
+
+function StopWiseCaptrue() {
+    var aDataArray = new Uint8Array(3);
+    aDataArray[0] = 0x77;
+    aDataArray[1] = 0x88;
+    aDataArray[2] = 0xE1;
+    socket.send(aDataArray.buffer);
+}
+
+
+function ReadIdCard(cardImgPath) {
+    if (isSocketConnect) {
+
+        if (cardImgPath == "") {
+            var len = 0;
+            var totalLen = len + 3;
+            var aDataArray = new Uint8Array(totalLen);
+            aDataArray[0] = 0x77;
+            aDataArray[1] = 0x88;
+            aDataArray[2] = 0x80;
+            for (var i = 0; i < len; i++) {
+                aDataArray[3 + i] = pathArray[i];
+            }
+            socket.send(aDataArray.buffer);
+
+        }
+        else {
+            var path = encodeURI(cardImgPath);
+            var pathArray = stringToByte(path);
+            var len = pathArray.length;
+            var totalLen = len + 3;
+            var aDataArray = new Uint8Array(totalLen);
+            aDataArray[0] = 0x77;
+            aDataArray[1] = 0x88;
+            aDataArray[2] = 0x80;
+            for (var i = 0; i < len; i++) {
+                aDataArray[3 + i] = pathArray[i];
+            }
+            socket.send(aDataArray.buffer);
+        }       
+    }
+}
+
+
+function ReadIdCardEx(cardImgPath) {
+    if (isSocketConnect) {
+
+        if (cardImgPath == "") {
+            var len = 0;
+            var totalLen = len + 3;
+            var aDataArray = new Uint8Array(totalLen);
+            aDataArray[0] = 0x77;
+            aDataArray[1] = 0x88;
+            aDataArray[2] = 0x81;
+            for (var i = 0; i < len; i++) {
+                aDataArray[3 + i] = pathArray[i];
+            }
+            socket.send(aDataArray.buffer);
+
+        }
+        else {
+            var path = encodeURI(cardImgPath);
+            var pathArray = stringToByte(path);
+            var len = pathArray.length;
+            var totalLen = len + 3;
+            var aDataArray = new Uint8Array(totalLen);
+            aDataArray[0] = 0x77;
+            aDataArray[1] = 0x88;
+            aDataArray[2] = 0x81;
+            for (var i = 0; i < len; i++) {
+                aDataArray[3 + i] = pathArray[i];
+            }
+            socket.send(aDataArray.buffer);
+        }
+    }
+}
+
+
+function GetDevCount() {
+    var aDataArray = new Uint8Array(3);
+    aDataArray[0] = 0x77;
+    aDataArray[1] = 0x88;
+    aDataArray[2] = 0x50;  
+    socket.send(aDataArray.buffer);
+}
+
+function GetResolution(iCamNo) {
+    var aDataArray = new Uint8Array(4);
+    aDataArray[0] = 0x77;
+    aDataArray[1] = 0x88;
+    aDataArray[2] = 0x51;
+    aDataArray[3] = iCamNo;
+    socket.send(aDataArray.buffer);
+}
+
+function OpenCamera(iCamNo, width, height) {
+
+    pALastX = 0;
+    pALastY = 0;
+    pACurrentX = 0;
+    pACurrentY = 0;
+
+    if (isSocketConnect) {
+        var aDataArray = new Uint8Array(12);
+        aDataArray[0] = 0x77;
+        aDataArray[1] = 0x88;
+        aDataArray[2] = 0x01;   //打开摄像头
+        aDataArray[3] = iCamNo;
+        aDataArray[4] = MainCanvas.width >> 8 & 0xff;
+        aDataArray[5] = MainCanvas.width & 0xff;
+        aDataArray[6] = MainCanvas.height >> 8 & 0xff;
+        aDataArray[7] = MainCanvas.height & 0xff;
+        aDataArray[8] = width >> 8 & 0xff;
+        aDataArray[9] = width & 0xff;
+        aDataArray[10] = height >> 8 & 0xff;
+        aDataArray[11] = height & 0xff;
+
+        socket.send(aDataArray.buffer);
+    }
+}
+
+function CloseCamera() {
+    if (isSocketConnect) {
+        var aDataArray = new Uint8Array(4);
+        aDataArray[0] = 0x77;
+        aDataArray[1] = 0x88;
+        aDataArray[2] = 0x02;  //关闭摄像头
+        aDataArray[3] = 0x00;
+        socket.send(aDataArray.buffer);
+    }
+}
+
+
+function CaptureImage(fileAddr) {
+
+    if (isSocketConnect) {
+
+        // var pathArray = stringToUint8Array(fileAddr);
+        if (fileAddr == "") {
+            var packageCount = 1;
+            var len = 0;
+            var pindex = 0;
+            var totalLen =  12;  
+            var aDataArray = new Uint8Array(totalLen);
+            aDataArray[0] = 0x77;
+            aDataArray[1] = 0x88;
+            aDataArray[2] = 0x10;
+            aDataArray[3] = 0x00;
+            aDataArray[4] = len >> 16 & 0xff;
+            aDataArray[5] = len >> 8 & 0xff;
+            aDataArray[6] = len & 0xff;
+            aDataArray[7] = packageCount >> 8 & 0xff;   //包总数
+            aDataArray[8] = packageCount & 0xff;   //包总数
+            aDataArray[9] = 0;   //分包长度
+            aDataArray[10] = pindex >> 8 & 0xff;   //包序号
+            aDataArray[11] = pindex & 0xff;    //包序号
+            console.log("pindex:" + pindex);
+            socket.send(aDataArray.buffer);
+        }
+        else {
+            var path = encodeURI(fileAddr);
+            //console.log(path);
+            var pathArray = stringToByte(path);
+            var len = pathArray.length;
+
+            var packageCount = 0;
+            var tmpLen = len;
+            while (tmpLen > 0) {
+                tmpLen = tmpLen - 90;
+                packageCount++;
+            }
+
+            console.log("packageCount:" + packageCount);
+
+            var pindex = 0;
+            tmpLen = len;
+            while (tmpLen > 0) {
+                tmpLen = tmpLen - 90;
+
+                if (tmpLen > 0) {
+                    var totalLen = 90 + 12;
+                    var aDataArray = new Uint8Array(totalLen);
+                    aDataArray[0] = 0x77;
+                    aDataArray[1] = 0x88;
+                    aDataArray[2] = 0x10;
+                    aDataArray[3] = 0x00;
+                    aDataArray[4] = len >> 16 & 0xff;
+                    aDataArray[5] = len >> 8 & 0xff;
+                    aDataArray[6] = len & 0xff;
+                    aDataArray[7] = packageCount >> 8 & 0xff;   //包总数
+                    aDataArray[8] = packageCount & 0xff;   //包总数
+                    aDataArray[9] = 90;   //分包长度
+                    aDataArray[10] = pindex >> 8 & 0xff;   //包序号
+                    aDataArray[11] = pindex & 0xff;    //包序号
+                    console.log("pindex:" + pindex);
+                    for (var i = 0; i < 90; i++) {
+                        aDataArray[12 + i] = pathArray[i + pindex * 90];
+                    }
+                    socket.send(aDataArray.buffer);
+                }
+                else {
+                    var totalLen = 90 + tmpLen + 12;  // 此时tmpLen为负数,做加法运算
+                    var aDataArray = new Uint8Array(totalLen);
+                    aDataArray[0] = 0x77;
+                    aDataArray[1] = 0x88;
+                    aDataArray[2] = 0x10;
+                    aDataArray[3] = 0x00;
+                    aDataArray[4] = len >> 16 & 0xff;
+                    aDataArray[5] = len >> 8 & 0xff;
+                    aDataArray[6] = len & 0xff;
+                    aDataArray[7] = packageCount >> 8 & 0xff;   //包总数
+                    aDataArray[8] = packageCount & 0xff;   //包总数
+                    aDataArray[9] = 90 + tmpLen;   //分包长度
+                    aDataArray[10] = pindex >> 8 & 0xff;   //包序号
+                    aDataArray[11] = pindex & 0xff;    //包序号
+                    console.log("pindex:" + pindex);
+                    for (var i = 0; i < (90 + tmpLen); i++) {
+                        aDataArray[12 + i] = pathArray[i + pindex * 90];
+                    }
+                    socket.send(aDataArray.buffer);
+                }
+                pindex++;
+                toSleep(80);
+            }
+         }
+
+    }
+ }
+
+
+function ZoomIn() {
+    if (isSocketConnect) {
+        var aDataArray = new Uint8Array(4);
+        aDataArray[0] = 0x77;
+        aDataArray[1] = 0x88;
+        aDataArray[2] = 0x03;  //放大
+        aDataArray[3] = 0x00;
+        socket.send(aDataArray.buffer);
+    }
+}
+
+function ZoomOut() {
+    if (isSocketConnect) {
+        var aDataArray = new Uint8Array(4);
+        aDataArray[0] = 0x77;
+        aDataArray[1] = 0x88;
+        aDataArray[2] = 0x04;  //缩小
+        aDataArray[3] = 0x00;
+        socket.send(aDataArray.buffer);
+    }
+}
+
+function BestSize() {
+    if (isSocketConnect) {
+        var aDataArray = new Uint8Array(4);
+        aDataArray[0] = 0x77;
+        aDataArray[1] = 0x88;
+        aDataArray[2] = 0x05;  //适合大小
+        aDataArray[3] = 0x00;
+        socket.send(aDataArray.buffer);
+    }
+}
+
+function TrueSize() {
+    if (isSocketConnect) {
+        var aDataArray = new Uint8Array(4);
+        aDataArray[0] = 0x77;
+        aDataArray[1] = 0x88;
+        aDataArray[2] = 0x06;  //1:1
+        aDataArray[3] = 0x00;
+        socket.send(aDataArray.buffer);
+    }
+}
+
+
+function Rotate(angle) {
+    if (isSocketConnect) {
+        var aDataArray = new Uint8Array(5);
+        aDataArray[0] = 0x77;
+        aDataArray[1] = 0x88;
+        aDataArray[2] = 0x78;
+        aDataArray[3] = 0x00;
+        if (angle > 3 || angle<0)
+            angle=0;
+        aDataArray[4] = angle;
+        socket.send(aDataArray.buffer);
+    }
+ }
+
+function RotateL() {
+    if (isSocketConnect) {
+        var aDataArray = new Uint8Array(4);
+        aDataArray[0] = 0x77;
+        aDataArray[1] = 0x88;
+        aDataArray[2] = 0x07;  //左旋
+        aDataArray[3] = 0x00;
+        socket.send(aDataArray.buffer);
+    }
+}
+
+function RotateR() {
+    if (isSocketConnect ) {
+        var aDataArray = new Uint8Array(4);
+        aDataArray[0] = 0x77;
+        aDataArray[1] = 0x88;
+        aDataArray[2] = 0x08;  //右旋
+        aDataArray[3] = 0x00;
+        socket.send(aDataArray.buffer);
+    }
+}
+
+
+function ManualFocus() {
+    if (isSocketConnect) {
+        var aDataArray = new Uint8Array(4);
+        aDataArray[0] = 0x77;
+        aDataArray[1] = 0x88;
+        aDataArray[2] = 0x30;
+        aDataArray[3] = 0x00; 
+        socket.send(aDataArray.buffer);
+    }
+ }
+
+
+function SetCutMode(cutMode) {
+    if (isSocketConnect) {
+
+        MainCamCutMode = cutMode; 
+        var aDataArray = new Uint8Array(5);
+        aDataArray[0] = 0x77;
+        aDataArray[1] = 0x88;
+        aDataArray[2] = 0x11;  //设置裁剪模式
+        aDataArray[3] = 0x00;
+        aDataArray[4] = cutMode;
+        socket.send(aDataArray.buffer);     
+    }
+}
+
+
+
+function SetCutRect(rectX,rectY,rectW,rectH) {
+    if (isSocketConnect) {
+        var aDataArray = new Uint8Array(12);
+        aDataArray[0] = 0x77;
+        aDataArray[1] = 0x88;
+        aDataArray[2] = 0x13;  //设置裁剪模式
+        aDataArray[3] = 0x00;
+        aDataArray[4] = rectX >> 8 & 0xff;
+        aDataArray[5] = rectX & 0xff;
+        aDataArray[6] = rectY >> 8 & 0xff;
+        aDataArray[7] = rectY & 0xff;
+        aDataArray[8] = rectW >> 8 & 0xff;
+        aDataArray[9] = rectW & 0xff;
+        aDataArray[10] = rectH >> 8 & 0xff;
+        aDataArray[11] = rectH & 0xff;
+
+        //console.log(aDataArray[8] + "," + aDataArray[9]);
+
+        socket.send(aDataArray.buffer);
+    }
+}
+
+
+function SetCustomArea(iX1, iY1, iX2, iY2) {
+    if (isSocketConnect) {
+        var aDataArray = new Uint8Array(12);
+        aDataArray[0] = 0x77;
+        aDataArray[1] = 0x88;
+        aDataArray[2] = 0x23;  //设置自定义裁剪区域
+        aDataArray[3] = 0x00;
+        aDataArray[4] = iX1 >> 8 & 0xff;
+        aDataArray[5] = iX1 & 0xff;
+        aDataArray[6] = iY1 >> 8 & 0xff;
+        aDataArray[7] = iY1 & 0xff;
+        aDataArray[8] = iX2 >> 8 & 0xff;
+        aDataArray[9] = iX2 & 0xff;
+        aDataArray[10] = iY2 >> 8 & 0xff;
+        aDataArray[11] = iY2 & 0xff;
+
+        socket.send(aDataArray.buffer);
+    }
+}
+
+
+
+function ShowVideoProp() {
+     if (isSocketConnect ) {
+        var aDataArray = new Uint8Array(4);
+        aDataArray[0] = 0x77;
+        aDataArray[1] = 0x88;
+        aDataArray[2] = 0x12;  //设置视频属性
+        aDataArray[3] = 0x00;
+        socket.send(aDataArray.buffer);
+    }
+ }
+
+
+function MoveOffsetXY(px,py,xdir,ydir) {
+    if (isSocketConnect) {
+        var aDataArray = new Uint8Array(10);
+        aDataArray[0] = 0x77;
+        aDataArray[1] = 0x88;
+        aDataArray[2] = 0x09;  //移动
+        aDataArray[3] = 0x00;
+        aDataArray[4] = px >> 8 & 0xff;
+        aDataArray[5] = px & 0xff;
+        aDataArray[6] = py >> 8 & 0xff;
+        aDataArray[7] = py & 0xff;
+        aDataArray[8] = xdir ;
+        aDataArray[9] = ydir ;
+        socket.send(aDataArray.buffer);
+    }
+}
+
+function onMouseWheel(ev) { /*当鼠标滚轮事件发生时,执行一些操作*/
+    var ev = ev || window.event;
+    var down = true;
+    per = 1;
+    down = ev.wheelDelta ? ev.wheelDelta < 0 : ev.detail > 0;
+    if (down) {
+        ZoomOut();
+        //per += 0.05;
+        //console.log("onMouseWheel down");
+    } else {
+        ZoomIn();
+        //per -= 0.05;
+        //console.log("onMouseWheel up");
+    }
+    //    if (ev.preventDefault) { /*FF 和 Chrome*/
+    //        ev.preventDefault(); // 阻止默认事件
+    //    }
+    return false;
+}
+
+function MainCanvasMouseDown(e) {
+    isMouseDown = true;
+    pALastX = e.pageX - MainCanvas.offsetLeft;
+    pALastY = e.pageY - MainCanvas.offsetTop;
+    if (MainCamCutMode == 2) {
+        pACurrentX = pALastX;
+        pACurrentY = pALastY;
+    }
+}
+
+function MainCanvasMouseUp(e) {
+    isMouseDown = false;
+}
+
+function MainCanvasMouseOut(e) {
+    isMouseDown = false;
+}
+
+function MainCanvasMouseMove(e) {
+    if (isMouseDown) {
+
+        if (MainCamCutMode == 2) {
+
+            pACurrentX = e.pageX - MainCanvas.offsetLeft;
+            pACurrentY = e.pageY - MainCanvas.offsetTop;
+
+            //console.log("MainCanvas:" + MainCanvas.offsetLeft + "," + MainCanvas.offsetTop);
+
+            var rectx,recty,rectw,recth ;
+            if (pALastX > pACurrentX)
+                rectx = pACurrentX;
+            else
+                rectx = pALastX;
+            if (pALastY > pACurrentY)
+                recty = pACurrentY;
+            else
+                recty = pALastY;
+            rectw = Math.abs(pACurrentX - pALastX);
+            recth = Math.abs(pACurrentY - pALastY);
+
+            SetCutRect(rectx, recty, rectw, recth);  //手动裁剪区域
+            //console.log(rectx + "," + recty + "," + rectw + "," + recth);
+        }
+        else {
+            pACurrentX = e.pageX - MainCanvas.offsetLeft;
+            pACurrentY = e.pageY - MainCanvas.offsetTop;
+            var dx = pACurrentX - pALastX;
+            var dy = pACurrentY - pALastY;
+            var xdir = 0;
+            var ydir = 0;
+            if (dx < 0)
+                xdir = 0;
+            else
+                xdir = 1;
+            if (dy < 0)
+                ydir = 0;
+            else
+                ydir = 1;
+            pALastX = pACurrentX;
+            pALastY = pACurrentY;
+            MoveOffsetXY(Math.abs(dx), Math.abs(dy), xdir, ydir);            
+         }      
+     }
+}
+
+/************************************************************************************************************************************************/
+
+
+//>>>>>>>>>>>>>>>>.修改的地方>>>>>>>>>>>>>>>
+var lockReconnect = false;
+var connectCount = 0;
+var heartTimerId = -1;
+
+//心跳检测
+function heartCheck() {
+
+    clearInterval(heartTimerId);
+    heartTimerId = setInterval(function () {
+        if (isSocketConnect) {
+            var aDataArray = new Uint8Array(3);
+            aDataArray[0] = 0x11;
+            aDataArray[1] = 0x11;
+            aDataArray[2] = 0x11;
+            socket.send(aDataArray.buffer);
+            console.log("heartCheck...........");
+        }
+    }, 6000);
+}
+
+
+
+//var heartCheck = {   
+//    timeout: 4000,    //4秒发一次心跳
+//    timeoutObj: null,
+//    serverTimeoutObj: null,
+//    reset: function () {
+//        //console.log("clearTimeout");
+//        clearTimeout(this.timeoutObj);
+//        clearTimeout(this.serverTimeoutObj);
+//        return this;
+//    },
+
+//    start: function () {
+//        var self = this;
+//        console.log(self.timeout);
+//        this.timeoutObj = setTimeout(function(){
+//            //这里发送一个心跳,后端收到后,返回一个心跳消息,
+//            console.log("websocket ping 01");
+//            var aDataArray = new Uint8Array(3);
+//            aDataArray[0] = 0x11;
+//            aDataArray[1] = 0x11;
+//            aDataArray[2] = 0x11;
+//            socket.send(aDataArray.buffer);
+//            console.log("websocket ping 02");
+//            self.serverTimeoutObj = setTimeout(function () {//如果超过一定时间还没重置,说明后端主动断开了
+//                console.log("websocket ping 03");
+//                socket.close();     //如果onclose会执行reconnect,我们执行ws.close()就行了.如果直接执行reconnect 会触发onclose导致重连两次
+//            }, self.timeout)
+//        }, this.timeout)
+//    }
+//}
+
+
+//掉线重连
+var intervalId = -1;
+function reconnect() {
+
+        clearInterval(intervalId);
+        intervalId = setInterval(function () {
+            if (isSocketConnect == false) {
+                WebSocketConnect();
+                console.log("reconnect...")
+            }
+            console.log("reconnectTimer.........!")
+        }, 3000);
+    }
+
+
+function WebSocketConnect() {
+    socket = new WebSocket("ws://127.0.0.1:22225");
+    socket.binaryType = "arraybuffer";
+    try {
+
+        socket.onopen = function (event) {
+
+            //heartCheck.reset().start(); 
+            heartCheck();
+            isSocketConnect = true;
+            clearInterval(intervalId);
+            //if (isOpenMainCamera == false)         
+            Cam_GetDevCount();
+            console.log("socket.onopen");
+
+        };
+
+        socket.onclose = function (event) {
+
+            console.log("socket.onclose");
+            isSocketConnect = false;
+            reconnect();                           
+            $("TextInfo").value = "websocket connect close!"
+        };
+
+        socket.onerror = function (event) {
+            isSocketConnect = false;
+            reconnect();                        
+            $("TextInfo").value = "websocket connect error!"
+        };
+
+
+        socket.onmessage = function (event) {
+
+            //heartCheck.reset().start();      
+
+            var rDataArr = new Uint8Array(event.data);
+            if (rDataArr.length > 0) {
+
+
+                if (rDataArr[0] == 0x11 && rDataArr[1] == 0x11 && rDataArr[2] == 0x11) {
+                    console.log("heart socket!!!!");
+                }
+
+                if (rDataArr[0] == 0x55 && rDataArr[1] == 0x66) {
+
+                    //摄像头数目返回
+                    if (rDataArr[2] == 0x50) {
+
+                        var devCount = rDataArr[3];
+                        var devNameBufLen = rDataArr.length - 4;
+                        var devNameData = new Uint8Array(devNameBufLen);
+                        for (var i = 0; i < devNameBufLen; i++) {
+                            devNameData[i] = rDataArr[4 + i];
+                        }
+                        //var AllCamName = Uint8ArrayToString(devNameData);
+                        var str = byteToString(devNameData);
+                        var AllCamName = decodeURIComponent(str);
+                        var camName = new Array();
+                        camName = AllCamName.split('|');
+                        GetDevCountAndNameResultCB(devCount, camName);
+                    }
+
+                    //摄像头分辨率返回
+                    if (rDataArr[2] == 0x51) {
+
+                        var resCount = rDataArr[3];
+                        var resArr = new Array();
+                        for (var i = 0; i < resCount; i++) {
+                            var width = rDataArr[4 + i * 4 + 0] * 256 + rDataArr[4 + i * 4 + 1];
+                            var height = rDataArr[4 + i * 4 + 2] * 256 + rDataArr[4 + i * 4 + 3];
+                            var resStr = "" + width + "*" + height;
+                            resArr.push(resStr);
+                        }
+                        GetResolutionResultCB(resCount, resArr);
+                    }
+
+                    //摄像头开启状态返回
+                    if (rDataArr[2] == 0x01) {
+
+                        if (rDataArr[3] == 0x01) {
+                            isOpenMainCamera = true;
+                            GetCameraOnOffStatus(0);
+                            //Cam_Rotate(1);
+                        }
+                        if (rDataArr[3] == 0x03) {
+                            isOpenMainCamera = false;
+                            GetCameraOnOffStatus(1);
+                        }
+                    }
+
+
+                    if (rDataArr[2] == 0xA5) {
+                        var flag;
+                        if (rDataArr[3] == 0x00) {
+                            flag = 2;
+                        }
+                        if (rDataArr[3] == 0x01) {
+                            flag = 0;
+                        }
+                        if (flag == 0) {
+                            var ResultStr = "";
+                            var pDataLen = rDataArr.length - 4;
+                            if (pDataLen > 0) {
+                                var pData = new Uint8Array(pDataLen);
+                                for (var i = 0; i < pDataLen; i++) {
+                                    pData[i] = rDataArr[4 + i];
+                                }
+                                var str = byteToString(pData);
+                                console.log(str);
+                                ResultStr = decodeURIComponent(str);
+                            }
+                            console.log(ResultStr);
+                        }
+                    }
+
+
+                    //当前拍照状态返回
+                    if (rDataArr[2] == 0x10) {
+                        //console.log(rDataArr[3]);
+                        //GetCaptrueStatusResultCB(rDataArr[3]);
+                    }
+
+
+
+                    //拍照结果返回
+                    if (rDataArr[2] == 0x10) {
+
+                        var flag;
+                        if (rDataArr[3] == 0x01) {
+                            flag = 0;
+                            var imgpathLen = rDataArr[4] * 256 + rDataArr[5];
+                            if (imgpathLen == 0) {
+                                var base64Len = rDataArr[6] * 65536 + rDataArr[7] * 256 + rDataArr[8];
+                                var imgPathStr = "";
+                                var base64Data = new Uint8Array(base64Len);
+                                for (var i = 0; i < base64Len; i++) {
+                                    base64Data[i] = rDataArr[9 + imgpathLen + i];
+                                }
+                                var base64Str = Uint8ArrayToString(base64Data);
+                                GetCaptrueImgResultCB(flag, imgPathStr, base64Str);
+                            }
+                            else {
+                                var base64Len = rDataArr[6] * 65536 + rDataArr[7] * 256 + rDataArr[8];
+                                var pData = new Uint8Array(imgpathLen);
+                                for (var i = 0; i < imgpathLen; i++) {
+                                    pData[i] = rDataArr[9 + i];
+                                }
+                                var str = byteToString(pData);
+                                var imgPathStr = decodeURIComponent(str);
+
+                                var base64Data = new Uint8Array(base64Len);
+                                for (var i = 0; i < base64Len; i++) {
+                                    base64Data[i] = rDataArr[9 + imgpathLen + i];
+                                }
+                                var base64Str = Uint8ArrayToString(base64Data);
+
+                                GetCaptrueImgResultCB(flag, imgPathStr, base64Str);
+                            }
+                        }
+                        if (rDataArr[3] == 0x02) {
+                            flag = 2;
+                            GetCaptrueImgResultCB(flag, "", "");
+                        }
+
+                    }
+
+                    //身份证信息返回
+                    if (rDataArr[2] == 0x80) {
+                        var flag;
+                        if (rDataArr[3] == 0x01) {
+                            flag = 0;
+                        }
+                        if (rDataArr[3] == 0x02) {
+                            flag = 2;
+                        }
+                        var pDataLen = rDataArr.length - 4;
+                        var pData = new Uint8Array(pDataLen);
+                        for (var i = 0; i < pDataLen; i++) {
+                            pData[i] = rDataArr[4 + i];
+                        }
+                        var str = byteToString(pData);
+                        var AllInfoStr = decodeURIComponent(str);
+                        var resultStr = new Array();
+                        resultStr = AllInfoStr.split(';');
+                        //console.log(resultStr);
+                        GetIdCardInfoResultCB(flag, resultStr[0], resultStr[1], resultStr[2], resultStr[3], resultStr[4], resultStr[5], resultStr[6], resultStr[7], resultStr[8], resultStr[9]);
+                    }
+
+
+                    //身份证信息及证件合并照片信息返回
+                    if (rDataArr[2] == 0x81) {
+                        var flag;
+                        if (rDataArr[3] == 0x01) {
+                            flag = 0;
+                        }
+                        if (rDataArr[3] == 0x02) {
+                            flag = 2;
+                        }
+
+                        var pDataLen = rDataArr.length - 4;
+                        var pData = new Uint8Array(pDataLen);
+                        for (var i = 0; i < pDataLen; i++) {
+                            pData[i] = rDataArr[4 + i];
+                        }
+                        var str = byteToString(pData);
+                        var AllInfoStr = decodeURIComponent(str);
+                        var resultStr = new Array();
+                        resultStr = AllInfoStr.split(';');
+                        GetIdCardInfoAndImgResultCB(flag, resultStr[0], resultStr[1], resultStr[2], resultStr[3], resultStr[4], resultStr[5], resultStr[6], resultStr[7], resultStr[8], resultStr[9], resultStr[10]);
+                    }
+
+                    //上传结果返回
+                    if (rDataArr[2] == 0x90) {
+                        var flag;
+                        if (rDataArr[3] == 0x01) {
+                            flag = 0;
+                        }
+                        if (rDataArr[3] == 0x02) {
+                            flag = 2;
+                        }
+                        if (rDataArr[3] == 0x03) {
+                            flag = 3;
+                        }
+                        var pDataLen = rDataArr.length - 6;
+                        if (pDataLen <= 0) {
+                            HttpResultCB(flag, ResultStr);
+                        }
+                        var pData = new Uint8Array(pDataLen);
+                        for (var i = 0; i < pDataLen; i++) {
+                            pData[i] = rDataArr[6 + i];
+                        }
+                        var str = byteToString(pData);
+                        console.log(str);
+                        var ResultStr = decodeURIComponent(str);
+                        console.log(ResultStr);
+                        HttpResultCB(flag, ResultStr);
+
+                    }
+
+
+                    //添加需要OCR识别的图片文件返回结果
+                    if (rDataArr[2] == 0xC3) {
+                        var flag;
+                        var base64Len = rDataArr.length - 4;
+                        var base64Str = "";
+                        if (base64Len > 0) {
+                            var base64Data = new Uint8Array(base64Len);
+                            for (var i = 0; i < base64Len; i++) {
+                                base64Data[i] = rDataArr[4 + i];
+                            }
+                            base64Str = Uint8ArrayToString(base64Data);
+                        }
+                        if (rDataArr[3] == 0x01) {
+                            flag = 0;
+                        }
+                        if (rDataArr[3] == 0x02) {
+                            flag = 2;
+                        }
+                        AddOcrRecogFileResultCB(flag, base64Str);
+                    }
+
+
+                    //OCR识别结果
+                    if (rDataArr[2] == 0xC2) {
+                        var flag, proValue;
+                        flag = rDataArr[3];
+                        proValue = rDataArr[4];
+                        var ResultStr = "";
+
+                        console.log("result:" + flag + "_proValue:" + proValue);
+
+                        if (flag == 0) {
+                            //var pDataLen = rDataArr.length - 7;
+                            //var pData = new Uint8Array(pDataLen);
+                            //for (var i = 0; i < pDataLen; i++) {
+                            //    pData[i] = rDataArr[7 + i];
+                            //}
+                            //var str = byteToString(pData);
+                            //console.log(str);
+                            //ResultStr = decodeURIComponent(str);
+                            //console.log(ResultStr);
+
+                            var pathLen = rDataArr[5] * 256 + rDataArr[6];
+                            var base64Len = rDataArr[7] * 65536 + rDataArr[8] * 256 + rDataArr[9];
+                            var pData = new Uint8Array(pathLen);
+                            for (var i = 0; i < pathLen; i++) {
+                                pData[i] = rDataArr[10 + i];
+                            }
+                            var str = byteToString(pData);
+                            ResultStr = decodeURIComponent(str);
+
+                            var base64Data = new Uint8Array(base64Len);
+                            for (var i = 0; i < base64Len; i++) {
+                                base64Data[i] = rDataArr[10 + pathLen + i];
+                            }
+                            var base64Str = Uint8ArrayToString(base64Data);
+
+                            OcrCallResultCB(flag, proValue, ResultStr, base64Str);
+                        }
+                        else {
+                            OcrCallResultCB(flag, proValue, ResultStr, "");
+                        }
+
+                    }
+
+
+                    //条码二维码识别结果返回
+                    if (rDataArr[2] == 0x91) {
+                        var flag;
+                        if (rDataArr[3] == 0x00) {
+                            flag = 2;    //未识别到内容
+                        }
+                        if (rDataArr[3] == 0x01) {
+                            flag = 0;    //识别到内容
+                        }
+                        var ResultStr = "";
+                        var pDataLen = rDataArr.length - 4;
+                        if (flag == 0 && pDataLen > 0) {
+                            var pData = new Uint8Array(pDataLen);
+                            for (var i = 0; i < pDataLen; i++) {
+                                pData[i] = rDataArr[4 + i];
+                            }
+                            var str = byteToString(pData);
+                            ResultStr = decodeURIComponent(str);
+                        }
+                        console.log(ResultStr);
+                        QrBarCodeRecogResultCB(flag, ResultStr);
+
+                    }
+
+
+                    //添加合并PDF文件结果返回
+                    if (rDataArr[2] == 0x31) {
+                        var flag;
+                        var base64Len = rDataArr.length - 4;
+                        var base64Str = "";
+                        if (base64Len > 0) {
+                            var base64Data = new Uint8Array(base64Len);
+                            for (var i = 0; i < base64Len; i++) {
+                                base64Data[i] = rDataArr[4 + i];
+                            }
+                            base64Str = Uint8ArrayToString(base64Data);
+                        }
+                        if (rDataArr[3] == 0x01) {
+                            flag = 0;
+                        }
+                        if (rDataArr[3] == 0x02) {
+                            flag = 2;
+                        }
+                        AddImgFileToPDFResultCB(flag, base64Str);
+                    }
+
+
+                    //合并PDF结果返回
+                    if (rDataArr[2] == 0x32) {
+                        var flag;
+                        var base64Len = rDataArr.length - 4;
+                        var base64Str = "";
+                        if (base64Len > 0) {
+                            var base64Data = new Uint8Array(base64Len);
+                            for (var i = 0; i < base64Len; i++) {
+                                base64Data[i] = rDataArr[4 + i];
+                            }
+                            base64Str = Uint8ArrayToString(base64Data);
+                        }
+                        if (rDataArr[3] == 0x01) {
+                            flag = 0;
+                        }
+                        if (rDataArr[3] == 0x02) {
+                            flag = 2;
+                        }
+                        PdfCombineResultCB(flag, base64Str);
+                    }
+
+
+
+                    //添加合并图像文件结果返回
+                    if (rDataArr[2] == 0xC0) {
+                        var flag;
+                        var base64Len = rDataArr.length - 4;
+                        var base64Str = "";
+                        if (base64Len > 0) {
+                            var base64Data = new Uint8Array(base64Len);
+                            for (var i = 0; i < base64Len; i++) {
+                                base64Data[i] = rDataArr[4 + i];
+                            }
+                            base64Str = Uint8ArrayToString(base64Data);
+                        }
+                        if (rDataArr[3] == 0x01) {
+                            flag = 0;
+                        }
+                        if (rDataArr[3] == 0x02) {
+                            flag = 2;
+                        }
+                        AddMergeImageFileResultCB(flag, base64Str);
+                    }
+
+                    //合并图像结果返回
+                    if (rDataArr[2] == 0xC1) {
+                        var flag;
+                        var base64Len = rDataArr.length - 4;
+                        var base64Str = "";
+                        if (base64Len > 0) {
+                            var base64Data = new Uint8Array(base64Len);
+                            for (var i = 0; i < base64Len; i++) {
+                                base64Data[i] = rDataArr[4 + i];
+                            }
+                            base64Str = Uint8ArrayToString(base64Data);
+                        }
+                        if (rDataArr[3] == 0x01) {
+                            flag = 0;
+                        }
+                        if (rDataArr[3] == 0x02) {
+                            flag = 2;
+                        }
+                        console.log("MergeImagesResultCB 01");
+                        MergeImagesResultCB(flag, base64Str);
+                        console.log("MergeImagesResultCB 02");
+                    }
+
+
+                    if (rDataArr[2] == 0xA5) {
+                        var flag;
+                        if (rDataArr[3] == 0x00) {
+                            flag = 2;
+                        }
+                        if (rDataArr[3] == 0x01) {
+                            flag = 0;
+                        }
+                        var ResultStr = "";
+                        if (flag == 0) {
+                            var pDataLen = rDataArr.length - 4;
+                            if (pDataLen > 0) {
+                                var pData = new Uint8Array(pDataLen);
+                                for (var i = 0; i < pDataLen; i++) {
+                                    pData[i] = rDataArr[4 + i];
+                                }
+                                var str = byteToString(pData);
+                                ResultStr = decodeURIComponent(str);
+                            }
+                            // console.log(ResultStr);
+                        }
+                        GetLicenseResultCB(ResultStr);
+                    }
+
+
+                    //获取驱动盘符
+                    if (rDataArr[2] == 0xA6) {
+                        var strLen = rDataArr.length - 3;
+                        if (strLen > 0) {
+                            var driveData = new Uint8Array(strLen);
+                            for (var i = 0; i < strLen; i++) {
+                                driveData[i] = rDataArr[3 + i];
+                            }
+                            var driveStr = Uint8ArrayToString(driveData);
+                            GetDriveResultCB(driveStr);
+                        }
+                        else {
+                            GetDriveResultCB("");
+                        }
+                    }
+
+
+                    //连拍返回结果
+                    if (rDataArr[2] == 0xE0) {
+                        var flag;
+                        if (rDataArr[3] == 0) {
+                            //console.log("wise captrue fail !!");
+                            GetWiseCaptrueResultCB(2, Steady, "", "");
+                        }
+                        else {
+                            var Steady = rDataArr[4];
+                            if (Steady == 1) {
+
+                                var imgpathLen = rDataArr[5] * 256 + rDataArr[6];
+                                var base64Len = rDataArr[7] * 65536 + rDataArr[8] * 256 + rDataArr[9];
+                                var pData = new Uint8Array(imgpathLen);
+                                for (var i = 0; i < imgpathLen; i++) {
+                                    pData[i] = rDataArr[10 + i];
+                                }
+                                var str = byteToString(pData);
+                                var imgPathStr = decodeURIComponent(str);
+
+                                var base64Data = new Uint8Array(base64Len);
+                                for (var i = 0; i < base64Len; i++) {
+                                    base64Data[i] = rDataArr[10 + imgpathLen + i];
+                                }
+                                var base64Str = Uint8ArrayToString(base64Data);
+                                GetWiseCaptrueResultCB(0, Steady, imgPathStr, base64Str);
+                            }
+                            else {
+                                GetWiseCaptrueResultCB(0, Steady, "", "");
+                            }
+                        }
+
+                    }
+
+
+                    //删除文件结果
+                    if (rDataArr[2] == 0xA8) {
+                        var flag;
+                        if (rDataArr[3] == 0) {
+                            flag = 0;
+                        }
+                        else {
+                            flag = 2;
+                        }
+                        GetDeleteFileResultCB(flag);
+                    }
+
+
+                    //摄像头数据
+                    if (rDataArr[2] == 0xcc) {
+
+                        var ww = rDataArr[3] * 256 + rDataArr[4];
+                        var hh = rDataArr[5] * 256 + rDataArr[6];
+                        pMainShowStartX = rDataArr[7] * 256 + rDataArr[8];
+                        pMainShowStartY = rDataArr[9] * 256 + rDataArr[10];
+                        MainContext.clearRect(0, 0, MainCanvas.width, MainCanvas.height);
+                        var imgData = MainContext.createImageData(ww, hh);
+                        var dataNum = 0;
+                        dataNum = dataNum + 11;
+                        for (var i = 0; i < imgData.data.length; i += 4) {
+                            imgData.data[i + 0] = rDataArr[dataNum];
+                            imgData.data[i + 1] = rDataArr[dataNum + 1];
+                            imgData.data[i + 2] = rDataArr[dataNum + 2];
+                            imgData.data[i + 3] = 255;
+                            dataNum = dataNum + 3;
+                        }
+
+                        MainContext.putImageData(imgData, pMainShowStartX, pMainShowStartY);
+
+                        if (MainCamCutMode == 2) {
+                            MainContext.strokeStyle = 'blue'; // 设置线条的颜色
+                            MainContext.lineWidth = 2; // 设置线条的宽度
+                            MainContext.beginPath(); // 绘制直线
+                            MainContext.rect(pALastX, pALastY, (pACurrentX - pALastX), (pACurrentY - pALastY));
+                            MainContext.closePath();
+                            MainContext.stroke();
+                        }
+                    }
+
+                    rDataArr = null;
+
+                }
+            }
+
+
+
+        };    
+    }
+    catch (ex) {
+        alert("异常错误!") 
+    }
+}
+
+

+ 167 - 0
scanner/jquery-1.4.4.min.js

@@ -0,0 +1,167 @@
+/*!
+ * jQuery JavaScript Library v1.4.4
+ * http://jquery.com/
+ *
+ * Copyright 2010, John Resig
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * Includes Sizzle.js
+ * http://sizzlejs.com/
+ * Copyright 2010, The Dojo Foundation
+ * Released under the MIT, BSD, and GPL Licenses.
+ *
+ * Date: Thu Nov 11 19:04:53 2010 -0500
+ */
+(function(E,B){function ka(a,b,d){if(d===B&&a.nodeType===1){d=a.getAttribute("data-"+b);if(typeof d==="string"){try{d=d==="true"?true:d==="false"?false:d==="null"?null:!c.isNaN(d)?parseFloat(d):Ja.test(d)?c.parseJSON(d):d}catch(e){}c.data(a,b,d)}else d=B}return d}function U(){return false}function ca(){return true}function la(a,b,d){d[0].type=a;return c.event.handle.apply(b,d)}function Ka(a){var b,d,e,f,h,l,k,o,x,r,A,C=[];f=[];h=c.data(this,this.nodeType?"events":"__events__");if(typeof h==="function")h=
+h.events;if(!(a.liveFired===this||!h||!h.live||a.button&&a.type==="click")){if(a.namespace)A=RegExp("(^|\\.)"+a.namespace.split(".").join("\\.(?:.*\\.)?")+"(\\.|$)");a.liveFired=this;var J=h.live.slice(0);for(k=0;k<J.length;k++){h=J[k];h.origType.replace(X,"")===a.type?f.push(h.selector):J.splice(k--,1)}f=c(a.target).closest(f,a.currentTarget);o=0;for(x=f.length;o<x;o++){r=f[o];for(k=0;k<J.length;k++){h=J[k];if(r.selector===h.selector&&(!A||A.test(h.namespace))){l=r.elem;e=null;if(h.preType==="mouseenter"||
+h.preType==="mouseleave"){a.type=h.preType;e=c(a.relatedTarget).closest(h.selector)[0]}if(!e||e!==l)C.push({elem:l,handleObj:h,level:r.level})}}}o=0;for(x=C.length;o<x;o++){f=C[o];if(d&&f.level>d)break;a.currentTarget=f.elem;a.data=f.handleObj.data;a.handleObj=f.handleObj;A=f.handleObj.origHandler.apply(f.elem,arguments);if(A===false||a.isPropagationStopped()){d=f.level;if(A===false)b=false;if(a.isImmediatePropagationStopped())break}}return b}}function Y(a,b){return(a&&a!=="*"?a+".":"")+b.replace(La,
+"`").replace(Ma,"&")}function ma(a,b,d){if(c.isFunction(b))return c.grep(a,function(f,h){return!!b.call(f,h,f)===d});else if(b.nodeType)return c.grep(a,function(f){return f===b===d});else if(typeof b==="string"){var e=c.grep(a,function(f){return f.nodeType===1});if(Na.test(b))return c.filter(b,e,!d);else b=c.filter(b,e)}return c.grep(a,function(f){return c.inArray(f,b)>=0===d})}function na(a,b){var d=0;b.each(function(){if(this.nodeName===(a[d]&&a[d].nodeName)){var e=c.data(a[d++]),f=c.data(this,
+e);if(e=e&&e.events){delete f.handle;f.events={};for(var h in e)for(var l in e[h])c.event.add(this,h,e[h][l],e[h][l].data)}}})}function Oa(a,b){b.src?c.ajax({url:b.src,async:false,dataType:"script"}):c.globalEval(b.text||b.textContent||b.innerHTML||"");b.parentNode&&b.parentNode.removeChild(b)}function oa(a,b,d){var e=b==="width"?a.offsetWidth:a.offsetHeight;if(d==="border")return e;c.each(b==="width"?Pa:Qa,function(){d||(e-=parseFloat(c.css(a,"padding"+this))||0);if(d==="margin")e+=parseFloat(c.css(a,
+"margin"+this))||0;else e-=parseFloat(c.css(a,"border"+this+"Width"))||0});return e}function da(a,b,d,e){if(c.isArray(b)&&b.length)c.each(b,function(f,h){d||Ra.test(a)?e(a,h):da(a+"["+(typeof h==="object"||c.isArray(h)?f:"")+"]",h,d,e)});else if(!d&&b!=null&&typeof b==="object")c.isEmptyObject(b)?e(a,""):c.each(b,function(f,h){da(a+"["+f+"]",h,d,e)});else e(a,b)}function S(a,b){var d={};c.each(pa.concat.apply([],pa.slice(0,b)),function(){d[this]=a});return d}function qa(a){if(!ea[a]){var b=c("<"+
+a+">").appendTo("body"),d=b.css("display");b.remove();if(d==="none"||d==="")d="block";ea[a]=d}return ea[a]}function fa(a){return c.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:false}var t=E.document,c=function(){function a(){if(!b.isReady){try{t.documentElement.doScroll("left")}catch(j){setTimeout(a,1);return}b.ready()}}var b=function(j,s){return new b.fn.init(j,s)},d=E.jQuery,e=E.$,f,h=/^(?:[^<]*(<[\w\W]+>)[^>]*$|#([\w\-]+)$)/,l=/\S/,k=/^\s+/,o=/\s+$/,x=/\W/,r=/\d/,A=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,
+C=/^[\],:{}\s]*$/,J=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,w=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,I=/(?:^|:|,)(?:\s*\[)+/g,L=/(webkit)[ \/]([\w.]+)/,g=/(opera)(?:.*version)?[ \/]([\w.]+)/,i=/(msie) ([\w.]+)/,n=/(mozilla)(?:.*? rv:([\w.]+))?/,m=navigator.userAgent,p=false,q=[],u,y=Object.prototype.toString,F=Object.prototype.hasOwnProperty,M=Array.prototype.push,N=Array.prototype.slice,O=String.prototype.trim,D=Array.prototype.indexOf,R={};b.fn=b.prototype={init:function(j,
+s){var v,z,H;if(!j)return this;if(j.nodeType){this.context=this[0]=j;this.length=1;return this}if(j==="body"&&!s&&t.body){this.context=t;this[0]=t.body;this.selector="body";this.length=1;return this}if(typeof j==="string")if((v=h.exec(j))&&(v[1]||!s))if(v[1]){H=s?s.ownerDocument||s:t;if(z=A.exec(j))if(b.isPlainObject(s)){j=[t.createElement(z[1])];b.fn.attr.call(j,s,true)}else j=[H.createElement(z[1])];else{z=b.buildFragment([v[1]],[H]);j=(z.cacheable?z.fragment.cloneNode(true):z.fragment).childNodes}return b.merge(this,
+j)}else{if((z=t.getElementById(v[2]))&&z.parentNode){if(z.id!==v[2])return f.find(j);this.length=1;this[0]=z}this.context=t;this.selector=j;return this}else if(!s&&!x.test(j)){this.selector=j;this.context=t;j=t.getElementsByTagName(j);return b.merge(this,j)}else return!s||s.jquery?(s||f).find(j):b(s).find(j);else if(b.isFunction(j))return f.ready(j);if(j.selector!==B){this.selector=j.selector;this.context=j.context}return b.makeArray(j,this)},selector:"",jquery:"1.4.4",length:0,size:function(){return this.length},
+toArray:function(){return N.call(this,0)},get:function(j){return j==null?this.toArray():j<0?this.slice(j)[0]:this[j]},pushStack:function(j,s,v){var z=b();b.isArray(j)?M.apply(z,j):b.merge(z,j);z.prevObject=this;z.context=this.context;if(s==="find")z.selector=this.selector+(this.selector?" ":"")+v;else if(s)z.selector=this.selector+"."+s+"("+v+")";return z},each:function(j,s){return b.each(this,j,s)},ready:function(j){b.bindReady();if(b.isReady)j.call(t,b);else q&&q.push(j);return this},eq:function(j){return j===
+-1?this.slice(j):this.slice(j,+j+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(N.apply(this,arguments),"slice",N.call(arguments).join(","))},map:function(j){return this.pushStack(b.map(this,function(s,v){return j.call(s,v,s)}))},end:function(){return this.prevObject||b(null)},push:M,sort:[].sort,splice:[].splice};b.fn.init.prototype=b.fn;b.extend=b.fn.extend=function(){var j,s,v,z,H,G=arguments[0]||{},K=1,Q=arguments.length,ga=false;
+if(typeof G==="boolean"){ga=G;G=arguments[1]||{};K=2}if(typeof G!=="object"&&!b.isFunction(G))G={};if(Q===K){G=this;--K}for(;K<Q;K++)if((j=arguments[K])!=null)for(s in j){v=G[s];z=j[s];if(G!==z)if(ga&&z&&(b.isPlainObject(z)||(H=b.isArray(z)))){if(H){H=false;v=v&&b.isArray(v)?v:[]}else v=v&&b.isPlainObject(v)?v:{};G[s]=b.extend(ga,v,z)}else if(z!==B)G[s]=z}return G};b.extend({noConflict:function(j){E.$=e;if(j)E.jQuery=d;return b},isReady:false,readyWait:1,ready:function(j){j===true&&b.readyWait--;
+if(!b.readyWait||j!==true&&!b.isReady){if(!t.body)return setTimeout(b.ready,1);b.isReady=true;if(!(j!==true&&--b.readyWait>0))if(q){var s=0,v=q;for(q=null;j=v[s++];)j.call(t,b);b.fn.trigger&&b(t).trigger("ready").unbind("ready")}}},bindReady:function(){if(!p){p=true;if(t.readyState==="complete")return setTimeout(b.ready,1);if(t.addEventListener){t.addEventListener("DOMContentLoaded",u,false);E.addEventListener("load",b.ready,false)}else if(t.attachEvent){t.attachEvent("onreadystatechange",u);E.attachEvent("onload",
+b.ready);var j=false;try{j=E.frameElement==null}catch(s){}t.documentElement.doScroll&&j&&a()}}},isFunction:function(j){return b.type(j)==="function"},isArray:Array.isArray||function(j){return b.type(j)==="array"},isWindow:function(j){return j&&typeof j==="object"&&"setInterval"in j},isNaN:function(j){return j==null||!r.test(j)||isNaN(j)},type:function(j){return j==null?String(j):R[y.call(j)]||"object"},isPlainObject:function(j){if(!j||b.type(j)!=="object"||j.nodeType||b.isWindow(j))return false;if(j.constructor&&
+!F.call(j,"constructor")&&!F.call(j.constructor.prototype,"isPrototypeOf"))return false;for(var s in j);return s===B||F.call(j,s)},isEmptyObject:function(j){for(var s in j)return false;return true},error:function(j){throw j;},parseJSON:function(j){if(typeof j!=="string"||!j)return null;j=b.trim(j);if(C.test(j.replace(J,"@").replace(w,"]").replace(I,"")))return E.JSON&&E.JSON.parse?E.JSON.parse(j):(new Function("return "+j))();else b.error("Invalid JSON: "+j)},noop:function(){},globalEval:function(j){if(j&&
+l.test(j)){var s=t.getElementsByTagName("head")[0]||t.documentElement,v=t.createElement("script");v.type="text/javascript";if(b.support.scriptEval)v.appendChild(t.createTextNode(j));else v.text=j;s.insertBefore(v,s.firstChild);s.removeChild(v)}},nodeName:function(j,s){return j.nodeName&&j.nodeName.toUpperCase()===s.toUpperCase()},each:function(j,s,v){var z,H=0,G=j.length,K=G===B||b.isFunction(j);if(v)if(K)for(z in j){if(s.apply(j[z],v)===false)break}else for(;H<G;){if(s.apply(j[H++],v)===false)break}else if(K)for(z in j){if(s.call(j[z],
+z,j[z])===false)break}else for(v=j[0];H<G&&s.call(v,H,v)!==false;v=j[++H]);return j},trim:O?function(j){return j==null?"":O.call(j)}:function(j){return j==null?"":j.toString().replace(k,"").replace(o,"")},makeArray:function(j,s){var v=s||[];if(j!=null){var z=b.type(j);j.length==null||z==="string"||z==="function"||z==="regexp"||b.isWindow(j)?M.call(v,j):b.merge(v,j)}return v},inArray:function(j,s){if(s.indexOf)return s.indexOf(j);for(var v=0,z=s.length;v<z;v++)if(s[v]===j)return v;return-1},merge:function(j,
+s){var v=j.length,z=0;if(typeof s.length==="number")for(var H=s.length;z<H;z++)j[v++]=s[z];else for(;s[z]!==B;)j[v++]=s[z++];j.length=v;return j},grep:function(j,s,v){var z=[],H;v=!!v;for(var G=0,K=j.length;G<K;G++){H=!!s(j[G],G);v!==H&&z.push(j[G])}return z},map:function(j,s,v){for(var z=[],H,G=0,K=j.length;G<K;G++){H=s(j[G],G,v);if(H!=null)z[z.length]=H}return z.concat.apply([],z)},guid:1,proxy:function(j,s,v){if(arguments.length===2)if(typeof s==="string"){v=j;j=v[s];s=B}else if(s&&!b.isFunction(s)){v=
+s;s=B}if(!s&&j)s=function(){return j.apply(v||this,arguments)};if(j)s.guid=j.guid=j.guid||s.guid||b.guid++;return s},access:function(j,s,v,z,H,G){var K=j.length;if(typeof s==="object"){for(var Q in s)b.access(j,Q,s[Q],z,H,v);return j}if(v!==B){z=!G&&z&&b.isFunction(v);for(Q=0;Q<K;Q++)H(j[Q],s,z?v.call(j[Q],Q,H(j[Q],s)):v,G);return j}return K?H(j[0],s):B},now:function(){return(new Date).getTime()},uaMatch:function(j){j=j.toLowerCase();j=L.exec(j)||g.exec(j)||i.exec(j)||j.indexOf("compatible")<0&&n.exec(j)||
+[];return{browser:j[1]||"",version:j[2]||"0"}},browser:{}});b.each("Boolean Number String Function Array Date RegExp Object".split(" "),function(j,s){R["[object "+s+"]"]=s.toLowerCase()});m=b.uaMatch(m);if(m.browser){b.browser[m.browser]=true;b.browser.version=m.version}if(b.browser.webkit)b.browser.safari=true;if(D)b.inArray=function(j,s){return D.call(s,j)};if(!/\s/.test("\u00a0")){k=/^[\s\xA0]+/;o=/[\s\xA0]+$/}f=b(t);if(t.addEventListener)u=function(){t.removeEventListener("DOMContentLoaded",u,
+false);b.ready()};else if(t.attachEvent)u=function(){if(t.readyState==="complete"){t.detachEvent("onreadystatechange",u);b.ready()}};return E.jQuery=E.$=b}();(function(){c.support={};var a=t.documentElement,b=t.createElement("script"),d=t.createElement("div"),e="script"+c.now();d.style.display="none";d.innerHTML="   <link/><table></table><a href='/a' style='color:red;float:left;opacity:.55;'>a</a><input type='checkbox'/>";var f=d.getElementsByTagName("*"),h=d.getElementsByTagName("a")[0],l=t.createElement("select"),
+k=l.appendChild(t.createElement("option"));if(!(!f||!f.length||!h)){c.support={leadingWhitespace:d.firstChild.nodeType===3,tbody:!d.getElementsByTagName("tbody").length,htmlSerialize:!!d.getElementsByTagName("link").length,style:/red/.test(h.getAttribute("style")),hrefNormalized:h.getAttribute("href")==="/a",opacity:/^0.55$/.test(h.style.opacity),cssFloat:!!h.style.cssFloat,checkOn:d.getElementsByTagName("input")[0].value==="on",optSelected:k.selected,deleteExpando:true,optDisabled:false,checkClone:false,
+scriptEval:false,noCloneEvent:true,boxModel:null,inlineBlockNeedsLayout:false,shrinkWrapBlocks:false,reliableHiddenOffsets:true};l.disabled=true;c.support.optDisabled=!k.disabled;b.type="text/javascript";try{b.appendChild(t.createTextNode("window."+e+"=1;"))}catch(o){}a.insertBefore(b,a.firstChild);if(E[e]){c.support.scriptEval=true;delete E[e]}try{delete b.test}catch(x){c.support.deleteExpando=false}a.removeChild(b);if(d.attachEvent&&d.fireEvent){d.attachEvent("onclick",function r(){c.support.noCloneEvent=
+false;d.detachEvent("onclick",r)});d.cloneNode(true).fireEvent("onclick")}d=t.createElement("div");d.innerHTML="<input type='radio' name='radiotest' checked='checked'/>";a=t.createDocumentFragment();a.appendChild(d.firstChild);c.support.checkClone=a.cloneNode(true).cloneNode(true).lastChild.checked;c(function(){var r=t.createElement("div");r.style.width=r.style.paddingLeft="1px";t.body.appendChild(r);c.boxModel=c.support.boxModel=r.offsetWidth===2;if("zoom"in r.style){r.style.display="inline";r.style.zoom=
+1;c.support.inlineBlockNeedsLayout=r.offsetWidth===2;r.style.display="";r.innerHTML="<div style='width:4px;'></div>";c.support.shrinkWrapBlocks=r.offsetWidth!==2}r.innerHTML="<table><tr><td style='padding:0;display:none'></td><td>t</td></tr></table>";var A=r.getElementsByTagName("td");c.support.reliableHiddenOffsets=A[0].offsetHeight===0;A[0].style.display="";A[1].style.display="none";c.support.reliableHiddenOffsets=c.support.reliableHiddenOffsets&&A[0].offsetHeight===0;r.innerHTML="";t.body.removeChild(r).style.display=
+"none"});a=function(r){var A=t.createElement("div");r="on"+r;var C=r in A;if(!C){A.setAttribute(r,"return;");C=typeof A[r]==="function"}return C};c.support.submitBubbles=a("submit");c.support.changeBubbles=a("change");a=b=d=f=h=null}})();var ra={},Ja=/^(?:\{.*\}|\[.*\])$/;c.extend({cache:{},uuid:0,expando:"jQuery"+c.now(),noData:{embed:true,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:true},data:function(a,b,d){if(c.acceptData(a)){a=a==E?ra:a;var e=a.nodeType,f=e?a[c.expando]:null,h=
+c.cache;if(!(e&&!f&&typeof b==="string"&&d===B)){if(e)f||(a[c.expando]=f=++c.uuid);else h=a;if(typeof b==="object")if(e)h[f]=c.extend(h[f],b);else c.extend(h,b);else if(e&&!h[f])h[f]={};a=e?h[f]:h;if(d!==B)a[b]=d;return typeof b==="string"?a[b]:a}}},removeData:function(a,b){if(c.acceptData(a)){a=a==E?ra:a;var d=a.nodeType,e=d?a[c.expando]:a,f=c.cache,h=d?f[e]:e;if(b){if(h){delete h[b];d&&c.isEmptyObject(h)&&c.removeData(a)}}else if(d&&c.support.deleteExpando)delete a[c.expando];else if(a.removeAttribute)a.removeAttribute(c.expando);
+else if(d)delete f[e];else for(var l in a)delete a[l]}},acceptData:function(a){if(a.nodeName){var b=c.noData[a.nodeName.toLowerCase()];if(b)return!(b===true||a.getAttribute("classid")!==b)}return true}});c.fn.extend({data:function(a,b){var d=null;if(typeof a==="undefined"){if(this.length){var e=this[0].attributes,f;d=c.data(this[0]);for(var h=0,l=e.length;h<l;h++){f=e[h].name;if(f.indexOf("data-")===0){f=f.substr(5);ka(this[0],f,d[f])}}}return d}else if(typeof a==="object")return this.each(function(){c.data(this,
+a)});var k=a.split(".");k[1]=k[1]?"."+k[1]:"";if(b===B){d=this.triggerHandler("getData"+k[1]+"!",[k[0]]);if(d===B&&this.length){d=c.data(this[0],a);d=ka(this[0],a,d)}return d===B&&k[1]?this.data(k[0]):d}else return this.each(function(){var o=c(this),x=[k[0],b];o.triggerHandler("setData"+k[1]+"!",x);c.data(this,a,b);o.triggerHandler("changeData"+k[1]+"!",x)})},removeData:function(a){return this.each(function(){c.removeData(this,a)})}});c.extend({queue:function(a,b,d){if(a){b=(b||"fx")+"queue";var e=
+c.data(a,b);if(!d)return e||[];if(!e||c.isArray(d))e=c.data(a,b,c.makeArray(d));else e.push(d);return e}},dequeue:function(a,b){b=b||"fx";var d=c.queue(a,b),e=d.shift();if(e==="inprogress")e=d.shift();if(e){b==="fx"&&d.unshift("inprogress");e.call(a,function(){c.dequeue(a,b)})}}});c.fn.extend({queue:function(a,b){if(typeof a!=="string"){b=a;a="fx"}if(b===B)return c.queue(this[0],a);return this.each(function(){var d=c.queue(this,a,b);a==="fx"&&d[0]!=="inprogress"&&c.dequeue(this,a)})},dequeue:function(a){return this.each(function(){c.dequeue(this,
+a)})},delay:function(a,b){a=c.fx?c.fx.speeds[a]||a:a;b=b||"fx";return this.queue(b,function(){var d=this;setTimeout(function(){c.dequeue(d,b)},a)})},clearQueue:function(a){return this.queue(a||"fx",[])}});var sa=/[\n\t]/g,ha=/\s+/,Sa=/\r/g,Ta=/^(?:href|src|style)$/,Ua=/^(?:button|input)$/i,Va=/^(?:button|input|object|select|textarea)$/i,Wa=/^a(?:rea)?$/i,ta=/^(?:radio|checkbox)$/i;c.props={"for":"htmlFor","class":"className",readonly:"readOnly",maxlength:"maxLength",cellspacing:"cellSpacing",rowspan:"rowSpan",
+colspan:"colSpan",tabindex:"tabIndex",usemap:"useMap",frameborder:"frameBorder"};c.fn.extend({attr:function(a,b){return c.access(this,a,b,true,c.attr)},removeAttr:function(a){return this.each(function(){c.attr(this,a,"");this.nodeType===1&&this.removeAttribute(a)})},addClass:function(a){if(c.isFunction(a))return this.each(function(x){var r=c(this);r.addClass(a.call(this,x,r.attr("class")))});if(a&&typeof a==="string")for(var b=(a||"").split(ha),d=0,e=this.length;d<e;d++){var f=this[d];if(f.nodeType===
+1)if(f.className){for(var h=" "+f.className+" ",l=f.className,k=0,o=b.length;k<o;k++)if(h.indexOf(" "+b[k]+" ")<0)l+=" "+b[k];f.className=c.trim(l)}else f.className=a}return this},removeClass:function(a){if(c.isFunction(a))return this.each(function(o){var x=c(this);x.removeClass(a.call(this,o,x.attr("class")))});if(a&&typeof a==="string"||a===B)for(var b=(a||"").split(ha),d=0,e=this.length;d<e;d++){var f=this[d];if(f.nodeType===1&&f.className)if(a){for(var h=(" "+f.className+" ").replace(sa," "),
+l=0,k=b.length;l<k;l++)h=h.replace(" "+b[l]+" "," ");f.className=c.trim(h)}else f.className=""}return this},toggleClass:function(a,b){var d=typeof a,e=typeof b==="boolean";if(c.isFunction(a))return this.each(function(f){var h=c(this);h.toggleClass(a.call(this,f,h.attr("class"),b),b)});return this.each(function(){if(d==="string")for(var f,h=0,l=c(this),k=b,o=a.split(ha);f=o[h++];){k=e?k:!l.hasClass(f);l[k?"addClass":"removeClass"](f)}else if(d==="undefined"||d==="boolean"){this.className&&c.data(this,
+"__className__",this.className);this.className=this.className||a===false?"":c.data(this,"__className__")||""}})},hasClass:function(a){a=" "+a+" ";for(var b=0,d=this.length;b<d;b++)if((" "+this[b].className+" ").replace(sa," ").indexOf(a)>-1)return true;return false},val:function(a){if(!arguments.length){var b=this[0];if(b){if(c.nodeName(b,"option")){var d=b.attributes.value;return!d||d.specified?b.value:b.text}if(c.nodeName(b,"select")){var e=b.selectedIndex;d=[];var f=b.options;b=b.type==="select-one";
+if(e<0)return null;var h=b?e:0;for(e=b?e+1:f.length;h<e;h++){var l=f[h];if(l.selected&&(c.support.optDisabled?!l.disabled:l.getAttribute("disabled")===null)&&(!l.parentNode.disabled||!c.nodeName(l.parentNode,"optgroup"))){a=c(l).val();if(b)return a;d.push(a)}}return d}if(ta.test(b.type)&&!c.support.checkOn)return b.getAttribute("value")===null?"on":b.value;return(b.value||"").replace(Sa,"")}return B}var k=c.isFunction(a);return this.each(function(o){var x=c(this),r=a;if(this.nodeType===1){if(k)r=
+a.call(this,o,x.val());if(r==null)r="";else if(typeof r==="number")r+="";else if(c.isArray(r))r=c.map(r,function(C){return C==null?"":C+""});if(c.isArray(r)&&ta.test(this.type))this.checked=c.inArray(x.val(),r)>=0;else if(c.nodeName(this,"select")){var A=c.makeArray(r);c("option",this).each(function(){this.selected=c.inArray(c(this).val(),A)>=0});if(!A.length)this.selectedIndex=-1}else this.value=r}})}});c.extend({attrFn:{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true},
+attr:function(a,b,d,e){if(!a||a.nodeType===3||a.nodeType===8)return B;if(e&&b in c.attrFn)return c(a)[b](d);e=a.nodeType!==1||!c.isXMLDoc(a);var f=d!==B;b=e&&c.props[b]||b;var h=Ta.test(b);if((b in a||a[b]!==B)&&e&&!h){if(f){b==="type"&&Ua.test(a.nodeName)&&a.parentNode&&c.error("type property can't be changed");if(d===null)a.nodeType===1&&a.removeAttribute(b);else a[b]=d}if(c.nodeName(a,"form")&&a.getAttributeNode(b))return a.getAttributeNode(b).nodeValue;if(b==="tabIndex")return(b=a.getAttributeNode("tabIndex"))&&
+b.specified?b.value:Va.test(a.nodeName)||Wa.test(a.nodeName)&&a.href?0:B;return a[b]}if(!c.support.style&&e&&b==="style"){if(f)a.style.cssText=""+d;return a.style.cssText}f&&a.setAttribute(b,""+d);if(!a.attributes[b]&&a.hasAttribute&&!a.hasAttribute(b))return B;a=!c.support.hrefNormalized&&e&&h?a.getAttribute(b,2):a.getAttribute(b);return a===null?B:a}});var X=/\.(.*)$/,ia=/^(?:textarea|input|select)$/i,La=/\./g,Ma=/ /g,Xa=/[^\w\s.|`]/g,Ya=function(a){return a.replace(Xa,"\\$&")},ua={focusin:0,focusout:0};
+c.event={add:function(a,b,d,e){if(!(a.nodeType===3||a.nodeType===8)){if(c.isWindow(a)&&a!==E&&!a.frameElement)a=E;if(d===false)d=U;else if(!d)return;var f,h;if(d.handler){f=d;d=f.handler}if(!d.guid)d.guid=c.guid++;if(h=c.data(a)){var l=a.nodeType?"events":"__events__",k=h[l],o=h.handle;if(typeof k==="function"){o=k.handle;k=k.events}else if(!k){a.nodeType||(h[l]=h=function(){});h.events=k={}}if(!o)h.handle=o=function(){return typeof c!=="undefined"&&!c.event.triggered?c.event.handle.apply(o.elem,
+arguments):B};o.elem=a;b=b.split(" ");for(var x=0,r;l=b[x++];){h=f?c.extend({},f):{handler:d,data:e};if(l.indexOf(".")>-1){r=l.split(".");l=r.shift();h.namespace=r.slice(0).sort().join(".")}else{r=[];h.namespace=""}h.type=l;if(!h.guid)h.guid=d.guid;var A=k[l],C=c.event.special[l]||{};if(!A){A=k[l]=[];if(!C.setup||C.setup.call(a,e,r,o)===false)if(a.addEventListener)a.addEventListener(l,o,false);else a.attachEvent&&a.attachEvent("on"+l,o)}if(C.add){C.add.call(a,h);if(!h.handler.guid)h.handler.guid=
+d.guid}A.push(h);c.event.global[l]=true}a=null}}},global:{},remove:function(a,b,d,e){if(!(a.nodeType===3||a.nodeType===8)){if(d===false)d=U;var f,h,l=0,k,o,x,r,A,C,J=a.nodeType?"events":"__events__",w=c.data(a),I=w&&w[J];if(w&&I){if(typeof I==="function"){w=I;I=I.events}if(b&&b.type){d=b.handler;b=b.type}if(!b||typeof b==="string"&&b.charAt(0)==="."){b=b||"";for(f in I)c.event.remove(a,f+b)}else{for(b=b.split(" ");f=b[l++];){r=f;k=f.indexOf(".")<0;o=[];if(!k){o=f.split(".");f=o.shift();x=RegExp("(^|\\.)"+
+c.map(o.slice(0).sort(),Ya).join("\\.(?:.*\\.)?")+"(\\.|$)")}if(A=I[f])if(d){r=c.event.special[f]||{};for(h=e||0;h<A.length;h++){C=A[h];if(d.guid===C.guid){if(k||x.test(C.namespace)){e==null&&A.splice(h--,1);r.remove&&r.remove.call(a,C)}if(e!=null)break}}if(A.length===0||e!=null&&A.length===1){if(!r.teardown||r.teardown.call(a,o)===false)c.removeEvent(a,f,w.handle);delete I[f]}}else for(h=0;h<A.length;h++){C=A[h];if(k||x.test(C.namespace)){c.event.remove(a,r,C.handler,h);A.splice(h--,1)}}}if(c.isEmptyObject(I)){if(b=
+w.handle)b.elem=null;delete w.events;delete w.handle;if(typeof w==="function")c.removeData(a,J);else c.isEmptyObject(w)&&c.removeData(a)}}}}},trigger:function(a,b,d,e){var f=a.type||a;if(!e){a=typeof a==="object"?a[c.expando]?a:c.extend(c.Event(f),a):c.Event(f);if(f.indexOf("!")>=0){a.type=f=f.slice(0,-1);a.exclusive=true}if(!d){a.stopPropagation();c.event.global[f]&&c.each(c.cache,function(){this.events&&this.events[f]&&c.event.trigger(a,b,this.handle.elem)})}if(!d||d.nodeType===3||d.nodeType===
+8)return B;a.result=B;a.target=d;b=c.makeArray(b);b.unshift(a)}a.currentTarget=d;(e=d.nodeType?c.data(d,"handle"):(c.data(d,"__events__")||{}).handle)&&e.apply(d,b);e=d.parentNode||d.ownerDocument;try{if(!(d&&d.nodeName&&c.noData[d.nodeName.toLowerCase()]))if(d["on"+f]&&d["on"+f].apply(d,b)===false){a.result=false;a.preventDefault()}}catch(h){}if(!a.isPropagationStopped()&&e)c.event.trigger(a,b,e,true);else if(!a.isDefaultPrevented()){var l;e=a.target;var k=f.replace(X,""),o=c.nodeName(e,"a")&&k===
+"click",x=c.event.special[k]||{};if((!x._default||x._default.call(d,a)===false)&&!o&&!(e&&e.nodeName&&c.noData[e.nodeName.toLowerCase()])){try{if(e[k]){if(l=e["on"+k])e["on"+k]=null;c.event.triggered=true;e[k]()}}catch(r){}if(l)e["on"+k]=l;c.event.triggered=false}}},handle:function(a){var b,d,e,f;d=[];var h=c.makeArray(arguments);a=h[0]=c.event.fix(a||E.event);a.currentTarget=this;b=a.type.indexOf(".")<0&&!a.exclusive;if(!b){e=a.type.split(".");a.type=e.shift();d=e.slice(0).sort();e=RegExp("(^|\\.)"+
+d.join("\\.(?:.*\\.)?")+"(\\.|$)")}a.namespace=a.namespace||d.join(".");f=c.data(this,this.nodeType?"events":"__events__");if(typeof f==="function")f=f.events;d=(f||{})[a.type];if(f&&d){d=d.slice(0);f=0;for(var l=d.length;f<l;f++){var k=d[f];if(b||e.test(k.namespace)){a.handler=k.handler;a.data=k.data;a.handleObj=k;k=k.handler.apply(this,h);if(k!==B){a.result=k;if(k===false){a.preventDefault();a.stopPropagation()}}if(a.isImmediatePropagationStopped())break}}}return a.result},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode layerX layerY metaKey newValue offsetX offsetY pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),
+fix:function(a){if(a[c.expando])return a;var b=a;a=c.Event(b);for(var d=this.props.length,e;d;){e=this.props[--d];a[e]=b[e]}if(!a.target)a.target=a.srcElement||t;if(a.target.nodeType===3)a.target=a.target.parentNode;if(!a.relatedTarget&&a.fromElement)a.relatedTarget=a.fromElement===a.target?a.toElement:a.fromElement;if(a.pageX==null&&a.clientX!=null){b=t.documentElement;d=t.body;a.pageX=a.clientX+(b&&b.scrollLeft||d&&d.scrollLeft||0)-(b&&b.clientLeft||d&&d.clientLeft||0);a.pageY=a.clientY+(b&&b.scrollTop||
+d&&d.scrollTop||0)-(b&&b.clientTop||d&&d.clientTop||0)}if(a.which==null&&(a.charCode!=null||a.keyCode!=null))a.which=a.charCode!=null?a.charCode:a.keyCode;if(!a.metaKey&&a.ctrlKey)a.metaKey=a.ctrlKey;if(!a.which&&a.button!==B)a.which=a.button&1?1:a.button&2?3:a.button&4?2:0;return a},guid:1E8,proxy:c.proxy,special:{ready:{setup:c.bindReady,teardown:c.noop},live:{add:function(a){c.event.add(this,Y(a.origType,a.selector),c.extend({},a,{handler:Ka,guid:a.handler.guid}))},remove:function(a){c.event.remove(this,
+Y(a.origType,a.selector),a)}},beforeunload:{setup:function(a,b,d){if(c.isWindow(this))this.onbeforeunload=d},teardown:function(a,b){if(this.onbeforeunload===b)this.onbeforeunload=null}}}};c.removeEvent=t.removeEventListener?function(a,b,d){a.removeEventListener&&a.removeEventListener(b,d,false)}:function(a,b,d){a.detachEvent&&a.detachEvent("on"+b,d)};c.Event=function(a){if(!this.preventDefault)return new c.Event(a);if(a&&a.type){this.originalEvent=a;this.type=a.type}else this.type=a;this.timeStamp=
+c.now();this[c.expando]=true};c.Event.prototype={preventDefault:function(){this.isDefaultPrevented=ca;var a=this.originalEvent;if(a)if(a.preventDefault)a.preventDefault();else a.returnValue=false},stopPropagation:function(){this.isPropagationStopped=ca;var a=this.originalEvent;if(a){a.stopPropagation&&a.stopPropagation();a.cancelBubble=true}},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=ca;this.stopPropagation()},isDefaultPrevented:U,isPropagationStopped:U,isImmediatePropagationStopped:U};
+var va=function(a){var b=a.relatedTarget;try{for(;b&&b!==this;)b=b.parentNode;if(b!==this){a.type=a.data;c.event.handle.apply(this,arguments)}}catch(d){}},wa=function(a){a.type=a.data;c.event.handle.apply(this,arguments)};c.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){c.event.special[a]={setup:function(d){c.event.add(this,b,d&&d.selector?wa:va,a)},teardown:function(d){c.event.remove(this,b,d&&d.selector?wa:va)}}});if(!c.support.submitBubbles)c.event.special.submit={setup:function(){if(this.nodeName.toLowerCase()!==
+"form"){c.event.add(this,"click.specialSubmit",function(a){var b=a.target,d=b.type;if((d==="submit"||d==="image")&&c(b).closest("form").length){a.liveFired=B;return la("submit",this,arguments)}});c.event.add(this,"keypress.specialSubmit",function(a){var b=a.target,d=b.type;if((d==="text"||d==="password")&&c(b).closest("form").length&&a.keyCode===13){a.liveFired=B;return la("submit",this,arguments)}})}else return false},teardown:function(){c.event.remove(this,".specialSubmit")}};if(!c.support.changeBubbles){var V,
+xa=function(a){var b=a.type,d=a.value;if(b==="radio"||b==="checkbox")d=a.checked;else if(b==="select-multiple")d=a.selectedIndex>-1?c.map(a.options,function(e){return e.selected}).join("-"):"";else if(a.nodeName.toLowerCase()==="select")d=a.selectedIndex;return d},Z=function(a,b){var d=a.target,e,f;if(!(!ia.test(d.nodeName)||d.readOnly)){e=c.data(d,"_change_data");f=xa(d);if(a.type!=="focusout"||d.type!=="radio")c.data(d,"_change_data",f);if(!(e===B||f===e))if(e!=null||f){a.type="change";a.liveFired=
+B;return c.event.trigger(a,b,d)}}};c.event.special.change={filters:{focusout:Z,beforedeactivate:Z,click:function(a){var b=a.target,d=b.type;if(d==="radio"||d==="checkbox"||b.nodeName.toLowerCase()==="select")return Z.call(this,a)},keydown:function(a){var b=a.target,d=b.type;if(a.keyCode===13&&b.nodeName.toLowerCase()!=="textarea"||a.keyCode===32&&(d==="checkbox"||d==="radio")||d==="select-multiple")return Z.call(this,a)},beforeactivate:function(a){a=a.target;c.data(a,"_change_data",xa(a))}},setup:function(){if(this.type===
+"file")return false;for(var a in V)c.event.add(this,a+".specialChange",V[a]);return ia.test(this.nodeName)},teardown:function(){c.event.remove(this,".specialChange");return ia.test(this.nodeName)}};V=c.event.special.change.filters;V.focus=V.beforeactivate}t.addEventListener&&c.each({focus:"focusin",blur:"focusout"},function(a,b){function d(e){e=c.event.fix(e);e.type=b;return c.event.trigger(e,null,e.target)}c.event.special[b]={setup:function(){ua[b]++===0&&t.addEventListener(a,d,true)},teardown:function(){--ua[b]===
+0&&t.removeEventListener(a,d,true)}}});c.each(["bind","one"],function(a,b){c.fn[b]=function(d,e,f){if(typeof d==="object"){for(var h in d)this[b](h,e,d[h],f);return this}if(c.isFunction(e)||e===false){f=e;e=B}var l=b==="one"?c.proxy(f,function(o){c(this).unbind(o,l);return f.apply(this,arguments)}):f;if(d==="unload"&&b!=="one")this.one(d,e,f);else{h=0;for(var k=this.length;h<k;h++)c.event.add(this[h],d,l,e)}return this}});c.fn.extend({unbind:function(a,b){if(typeof a==="object"&&!a.preventDefault)for(var d in a)this.unbind(d,
+a[d]);else{d=0;for(var e=this.length;d<e;d++)c.event.remove(this[d],a,b)}return this},delegate:function(a,b,d,e){return this.live(b,d,e,a)},undelegate:function(a,b,d){return arguments.length===0?this.unbind("live"):this.die(b,null,d,a)},trigger:function(a,b){return this.each(function(){c.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0]){var d=c.Event(a);d.preventDefault();d.stopPropagation();c.event.trigger(d,b,this[0]);return d.result}},toggle:function(a){for(var b=arguments,d=
+1;d<b.length;)c.proxy(a,b[d++]);return this.click(c.proxy(a,function(e){var f=(c.data(this,"lastToggle"+a.guid)||0)%d;c.data(this,"lastToggle"+a.guid,f+1);e.preventDefault();return b[f].apply(this,arguments)||false}))},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}});var ya={focus:"focusin",blur:"focusout",mouseenter:"mouseover",mouseleave:"mouseout"};c.each(["live","die"],function(a,b){c.fn[b]=function(d,e,f,h){var l,k=0,o,x,r=h||this.selector;h=h?this:c(this.context);if(typeof d===
+"object"&&!d.preventDefault){for(l in d)h[b](l,e,d[l],r);return this}if(c.isFunction(e)){f=e;e=B}for(d=(d||"").split(" ");(l=d[k++])!=null;){o=X.exec(l);x="";if(o){x=o[0];l=l.replace(X,"")}if(l==="hover")d.push("mouseenter"+x,"mouseleave"+x);else{o=l;if(l==="focus"||l==="blur"){d.push(ya[l]+x);l+=x}else l=(ya[l]||l)+x;if(b==="live"){x=0;for(var A=h.length;x<A;x++)c.event.add(h[x],"live."+Y(l,r),{data:e,selector:r,handler:f,origType:l,origHandler:f,preType:o})}else h.unbind("live."+Y(l,r),f)}}return this}});
+c.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error".split(" "),function(a,b){c.fn[b]=function(d,e){if(e==null){e=d;d=null}return arguments.length>0?this.bind(b,d,e):this.trigger(b)};if(c.attrFn)c.attrFn[b]=true});E.attachEvent&&!E.addEventListener&&c(E).bind("unload",function(){for(var a in c.cache)if(c.cache[a].handle)try{c.event.remove(c.cache[a].handle.elem)}catch(b){}});
+(function(){function a(g,i,n,m,p,q){p=0;for(var u=m.length;p<u;p++){var y=m[p];if(y){var F=false;for(y=y[g];y;){if(y.sizcache===n){F=m[y.sizset];break}if(y.nodeType===1&&!q){y.sizcache=n;y.sizset=p}if(y.nodeName.toLowerCase()===i){F=y;break}y=y[g]}m[p]=F}}}function b(g,i,n,m,p,q){p=0;for(var u=m.length;p<u;p++){var y=m[p];if(y){var F=false;for(y=y[g];y;){if(y.sizcache===n){F=m[y.sizset];break}if(y.nodeType===1){if(!q){y.sizcache=n;y.sizset=p}if(typeof i!=="string"){if(y===i){F=true;break}}else if(k.filter(i,
+[y]).length>0){F=y;break}}y=y[g]}m[p]=F}}}var d=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,e=0,f=Object.prototype.toString,h=false,l=true;[0,0].sort(function(){l=false;return 0});var k=function(g,i,n,m){n=n||[];var p=i=i||t;if(i.nodeType!==1&&i.nodeType!==9)return[];if(!g||typeof g!=="string")return n;var q,u,y,F,M,N=true,O=k.isXML(i),D=[],R=g;do{d.exec("");if(q=d.exec(R)){R=q[3];D.push(q[1]);if(q[2]){F=q[3];
+break}}}while(q);if(D.length>1&&x.exec(g))if(D.length===2&&o.relative[D[0]])u=L(D[0]+D[1],i);else for(u=o.relative[D[0]]?[i]:k(D.shift(),i);D.length;){g=D.shift();if(o.relative[g])g+=D.shift();u=L(g,u)}else{if(!m&&D.length>1&&i.nodeType===9&&!O&&o.match.ID.test(D[0])&&!o.match.ID.test(D[D.length-1])){q=k.find(D.shift(),i,O);i=q.expr?k.filter(q.expr,q.set)[0]:q.set[0]}if(i){q=m?{expr:D.pop(),set:C(m)}:k.find(D.pop(),D.length===1&&(D[0]==="~"||D[0]==="+")&&i.parentNode?i.parentNode:i,O);u=q.expr?k.filter(q.expr,
+q.set):q.set;if(D.length>0)y=C(u);else N=false;for(;D.length;){q=M=D.pop();if(o.relative[M])q=D.pop();else M="";if(q==null)q=i;o.relative[M](y,q,O)}}else y=[]}y||(y=u);y||k.error(M||g);if(f.call(y)==="[object Array]")if(N)if(i&&i.nodeType===1)for(g=0;y[g]!=null;g++){if(y[g]&&(y[g]===true||y[g].nodeType===1&&k.contains(i,y[g])))n.push(u[g])}else for(g=0;y[g]!=null;g++)y[g]&&y[g].nodeType===1&&n.push(u[g]);else n.push.apply(n,y);else C(y,n);if(F){k(F,p,n,m);k.uniqueSort(n)}return n};k.uniqueSort=function(g){if(w){h=
+l;g.sort(w);if(h)for(var i=1;i<g.length;i++)g[i]===g[i-1]&&g.splice(i--,1)}return g};k.matches=function(g,i){return k(g,null,null,i)};k.matchesSelector=function(g,i){return k(i,null,null,[g]).length>0};k.find=function(g,i,n){var m;if(!g)return[];for(var p=0,q=o.order.length;p<q;p++){var u,y=o.order[p];if(u=o.leftMatch[y].exec(g)){var F=u[1];u.splice(1,1);if(F.substr(F.length-1)!=="\\"){u[1]=(u[1]||"").replace(/\\/g,"");m=o.find[y](u,i,n);if(m!=null){g=g.replace(o.match[y],"");break}}}}m||(m=i.getElementsByTagName("*"));
+return{set:m,expr:g}};k.filter=function(g,i,n,m){for(var p,q,u=g,y=[],F=i,M=i&&i[0]&&k.isXML(i[0]);g&&i.length;){for(var N in o.filter)if((p=o.leftMatch[N].exec(g))!=null&&p[2]){var O,D,R=o.filter[N];D=p[1];q=false;p.splice(1,1);if(D.substr(D.length-1)!=="\\"){if(F===y)y=[];if(o.preFilter[N])if(p=o.preFilter[N](p,F,n,y,m,M)){if(p===true)continue}else q=O=true;if(p)for(var j=0;(D=F[j])!=null;j++)if(D){O=R(D,p,j,F);var s=m^!!O;if(n&&O!=null)if(s)q=true;else F[j]=false;else if(s){y.push(D);q=true}}if(O!==
+B){n||(F=y);g=g.replace(o.match[N],"");if(!q)return[];break}}}if(g===u)if(q==null)k.error(g);else break;u=g}return F};k.error=function(g){throw"Syntax error, unrecognized expression: "+g;};var o=k.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\((even|odd|[\dn+\-]*)\))?/,
+POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(g){return g.getAttribute("href")}},relative:{"+":function(g,i){var n=typeof i==="string",m=n&&!/\W/.test(i);n=n&&!m;if(m)i=i.toLowerCase();m=0;for(var p=g.length,q;m<p;m++)if(q=g[m]){for(;(q=q.previousSibling)&&q.nodeType!==1;);g[m]=n||q&&q.nodeName.toLowerCase()===
+i?q||false:q===i}n&&k.filter(i,g,true)},">":function(g,i){var n,m=typeof i==="string",p=0,q=g.length;if(m&&!/\W/.test(i))for(i=i.toLowerCase();p<q;p++){if(n=g[p]){n=n.parentNode;g[p]=n.nodeName.toLowerCase()===i?n:false}}else{for(;p<q;p++)if(n=g[p])g[p]=m?n.parentNode:n.parentNode===i;m&&k.filter(i,g,true)}},"":function(g,i,n){var m,p=e++,q=b;if(typeof i==="string"&&!/\W/.test(i)){m=i=i.toLowerCase();q=a}q("parentNode",i,p,g,m,n)},"~":function(g,i,n){var m,p=e++,q=b;if(typeof i==="string"&&!/\W/.test(i)){m=
+i=i.toLowerCase();q=a}q("previousSibling",i,p,g,m,n)}},find:{ID:function(g,i,n){if(typeof i.getElementById!=="undefined"&&!n)return(g=i.getElementById(g[1]))&&g.parentNode?[g]:[]},NAME:function(g,i){if(typeof i.getElementsByName!=="undefined"){for(var n=[],m=i.getElementsByName(g[1]),p=0,q=m.length;p<q;p++)m[p].getAttribute("name")===g[1]&&n.push(m[p]);return n.length===0?null:n}},TAG:function(g,i){return i.getElementsByTagName(g[1])}},preFilter:{CLASS:function(g,i,n,m,p,q){g=" "+g[1].replace(/\\/g,
+"")+" ";if(q)return g;q=0;for(var u;(u=i[q])!=null;q++)if(u)if(p^(u.className&&(" "+u.className+" ").replace(/[\t\n]/g," ").indexOf(g)>=0))n||m.push(u);else if(n)i[q]=false;return false},ID:function(g){return g[1].replace(/\\/g,"")},TAG:function(g){return g[1].toLowerCase()},CHILD:function(g){if(g[1]==="nth"){var i=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(g[2]==="even"&&"2n"||g[2]==="odd"&&"2n+1"||!/\D/.test(g[2])&&"0n+"+g[2]||g[2]);g[2]=i[1]+(i[2]||1)-0;g[3]=i[3]-0}g[0]=e++;return g},ATTR:function(g,i,n,
+m,p,q){i=g[1].replace(/\\/g,"");if(!q&&o.attrMap[i])g[1]=o.attrMap[i];if(g[2]==="~=")g[4]=" "+g[4]+" ";return g},PSEUDO:function(g,i,n,m,p){if(g[1]==="not")if((d.exec(g[3])||"").length>1||/^\w/.test(g[3]))g[3]=k(g[3],null,null,i);else{g=k.filter(g[3],i,n,true^p);n||m.push.apply(m,g);return false}else if(o.match.POS.test(g[0])||o.match.CHILD.test(g[0]))return true;return g},POS:function(g){g.unshift(true);return g}},filters:{enabled:function(g){return g.disabled===false&&g.type!=="hidden"},disabled:function(g){return g.disabled===
+true},checked:function(g){return g.checked===true},selected:function(g){return g.selected===true},parent:function(g){return!!g.firstChild},empty:function(g){return!g.firstChild},has:function(g,i,n){return!!k(n[3],g).length},header:function(g){return/h\d/i.test(g.nodeName)},text:function(g){return"text"===g.type},radio:function(g){return"radio"===g.type},checkbox:function(g){return"checkbox"===g.type},file:function(g){return"file"===g.type},password:function(g){return"password"===g.type},submit:function(g){return"submit"===
+g.type},image:function(g){return"image"===g.type},reset:function(g){return"reset"===g.type},button:function(g){return"button"===g.type||g.nodeName.toLowerCase()==="button"},input:function(g){return/input|select|textarea|button/i.test(g.nodeName)}},setFilters:{first:function(g,i){return i===0},last:function(g,i,n,m){return i===m.length-1},even:function(g,i){return i%2===0},odd:function(g,i){return i%2===1},lt:function(g,i,n){return i<n[3]-0},gt:function(g,i,n){return i>n[3]-0},nth:function(g,i,n){return n[3]-
+0===i},eq:function(g,i,n){return n[3]-0===i}},filter:{PSEUDO:function(g,i,n,m){var p=i[1],q=o.filters[p];if(q)return q(g,n,i,m);else if(p==="contains")return(g.textContent||g.innerText||k.getText([g])||"").indexOf(i[3])>=0;else if(p==="not"){i=i[3];n=0;for(m=i.length;n<m;n++)if(i[n]===g)return false;return true}else k.error("Syntax error, unrecognized expression: "+p)},CHILD:function(g,i){var n=i[1],m=g;switch(n){case "only":case "first":for(;m=m.previousSibling;)if(m.nodeType===1)return false;if(n===
+"first")return true;m=g;case "last":for(;m=m.nextSibling;)if(m.nodeType===1)return false;return true;case "nth":n=i[2];var p=i[3];if(n===1&&p===0)return true;var q=i[0],u=g.parentNode;if(u&&(u.sizcache!==q||!g.nodeIndex)){var y=0;for(m=u.firstChild;m;m=m.nextSibling)if(m.nodeType===1)m.nodeIndex=++y;u.sizcache=q}m=g.nodeIndex-p;return n===0?m===0:m%n===0&&m/n>=0}},ID:function(g,i){return g.nodeType===1&&g.getAttribute("id")===i},TAG:function(g,i){return i==="*"&&g.nodeType===1||g.nodeName.toLowerCase()===
+i},CLASS:function(g,i){return(" "+(g.className||g.getAttribute("class"))+" ").indexOf(i)>-1},ATTR:function(g,i){var n=i[1];n=o.attrHandle[n]?o.attrHandle[n](g):g[n]!=null?g[n]:g.getAttribute(n);var m=n+"",p=i[2],q=i[4];return n==null?p==="!=":p==="="?m===q:p==="*="?m.indexOf(q)>=0:p==="~="?(" "+m+" ").indexOf(q)>=0:!q?m&&n!==false:p==="!="?m!==q:p==="^="?m.indexOf(q)===0:p==="$="?m.substr(m.length-q.length)===q:p==="|="?m===q||m.substr(0,q.length+1)===q+"-":false},POS:function(g,i,n,m){var p=o.setFilters[i[2]];
+if(p)return p(g,n,i,m)}}},x=o.match.POS,r=function(g,i){return"\\"+(i-0+1)},A;for(A in o.match){o.match[A]=RegExp(o.match[A].source+/(?![^\[]*\])(?![^\(]*\))/.source);o.leftMatch[A]=RegExp(/(^(?:.|\r|\n)*?)/.source+o.match[A].source.replace(/\\(\d+)/g,r))}var C=function(g,i){g=Array.prototype.slice.call(g,0);if(i){i.push.apply(i,g);return i}return g};try{Array.prototype.slice.call(t.documentElement.childNodes,0)}catch(J){C=function(g,i){var n=0,m=i||[];if(f.call(g)==="[object Array]")Array.prototype.push.apply(m,
+g);else if(typeof g.length==="number")for(var p=g.length;n<p;n++)m.push(g[n]);else for(;g[n];n++)m.push(g[n]);return m}}var w,I;if(t.documentElement.compareDocumentPosition)w=function(g,i){if(g===i){h=true;return 0}if(!g.compareDocumentPosition||!i.compareDocumentPosition)return g.compareDocumentPosition?-1:1;return g.compareDocumentPosition(i)&4?-1:1};else{w=function(g,i){var n,m,p=[],q=[];n=g.parentNode;m=i.parentNode;var u=n;if(g===i){h=true;return 0}else if(n===m)return I(g,i);else if(n){if(!m)return 1}else return-1;
+for(;u;){p.unshift(u);u=u.parentNode}for(u=m;u;){q.unshift(u);u=u.parentNode}n=p.length;m=q.length;for(u=0;u<n&&u<m;u++)if(p[u]!==q[u])return I(p[u],q[u]);return u===n?I(g,q[u],-1):I(p[u],i,1)};I=function(g,i,n){if(g===i)return n;for(g=g.nextSibling;g;){if(g===i)return-1;g=g.nextSibling}return 1}}k.getText=function(g){for(var i="",n,m=0;g[m];m++){n=g[m];if(n.nodeType===3||n.nodeType===4)i+=n.nodeValue;else if(n.nodeType!==8)i+=k.getText(n.childNodes)}return i};(function(){var g=t.createElement("div"),
+i="script"+(new Date).getTime(),n=t.documentElement;g.innerHTML="<a name='"+i+"'/>";n.insertBefore(g,n.firstChild);if(t.getElementById(i)){o.find.ID=function(m,p,q){if(typeof p.getElementById!=="undefined"&&!q)return(p=p.getElementById(m[1]))?p.id===m[1]||typeof p.getAttributeNode!=="undefined"&&p.getAttributeNode("id").nodeValue===m[1]?[p]:B:[]};o.filter.ID=function(m,p){var q=typeof m.getAttributeNode!=="undefined"&&m.getAttributeNode("id");return m.nodeType===1&&q&&q.nodeValue===p}}n.removeChild(g);
+n=g=null})();(function(){var g=t.createElement("div");g.appendChild(t.createComment(""));if(g.getElementsByTagName("*").length>0)o.find.TAG=function(i,n){var m=n.getElementsByTagName(i[1]);if(i[1]==="*"){for(var p=[],q=0;m[q];q++)m[q].nodeType===1&&p.push(m[q]);m=p}return m};g.innerHTML="<a href='#'></a>";if(g.firstChild&&typeof g.firstChild.getAttribute!=="undefined"&&g.firstChild.getAttribute("href")!=="#")o.attrHandle.href=function(i){return i.getAttribute("href",2)};g=null})();t.querySelectorAll&&
+function(){var g=k,i=t.createElement("div");i.innerHTML="<p class='TEST'></p>";if(!(i.querySelectorAll&&i.querySelectorAll(".TEST").length===0)){k=function(m,p,q,u){p=p||t;m=m.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!u&&!k.isXML(p))if(p.nodeType===9)try{return C(p.querySelectorAll(m),q)}catch(y){}else if(p.nodeType===1&&p.nodeName.toLowerCase()!=="object"){var F=p.getAttribute("id"),M=F||"__sizzle__";F||p.setAttribute("id",M);try{return C(p.querySelectorAll("#"+M+" "+m),q)}catch(N){}finally{F||
+p.removeAttribute("id")}}return g(m,p,q,u)};for(var n in g)k[n]=g[n];i=null}}();(function(){var g=t.documentElement,i=g.matchesSelector||g.mozMatchesSelector||g.webkitMatchesSelector||g.msMatchesSelector,n=false;try{i.call(t.documentElement,"[test!='']:sizzle")}catch(m){n=true}if(i)k.matchesSelector=function(p,q){q=q.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!k.isXML(p))try{if(n||!o.match.PSEUDO.test(q)&&!/!=/.test(q))return i.call(p,q)}catch(u){}return k(q,null,null,[p]).length>0}})();(function(){var g=
+t.createElement("div");g.innerHTML="<div class='test e'></div><div class='test'></div>";if(!(!g.getElementsByClassName||g.getElementsByClassName("e").length===0)){g.lastChild.className="e";if(g.getElementsByClassName("e").length!==1){o.order.splice(1,0,"CLASS");o.find.CLASS=function(i,n,m){if(typeof n.getElementsByClassName!=="undefined"&&!m)return n.getElementsByClassName(i[1])};g=null}}})();k.contains=t.documentElement.contains?function(g,i){return g!==i&&(g.contains?g.contains(i):true)}:t.documentElement.compareDocumentPosition?
+function(g,i){return!!(g.compareDocumentPosition(i)&16)}:function(){return false};k.isXML=function(g){return(g=(g?g.ownerDocument||g:0).documentElement)?g.nodeName!=="HTML":false};var L=function(g,i){for(var n,m=[],p="",q=i.nodeType?[i]:i;n=o.match.PSEUDO.exec(g);){p+=n[0];g=g.replace(o.match.PSEUDO,"")}g=o.relative[g]?g+"*":g;n=0;for(var u=q.length;n<u;n++)k(g,q[n],m);return k.filter(p,m)};c.find=k;c.expr=k.selectors;c.expr[":"]=c.expr.filters;c.unique=k.uniqueSort;c.text=k.getText;c.isXMLDoc=k.isXML;
+c.contains=k.contains})();var Za=/Until$/,$a=/^(?:parents|prevUntil|prevAll)/,ab=/,/,Na=/^.[^:#\[\.,]*$/,bb=Array.prototype.slice,cb=c.expr.match.POS;c.fn.extend({find:function(a){for(var b=this.pushStack("","find",a),d=0,e=0,f=this.length;e<f;e++){d=b.length;c.find(a,this[e],b);if(e>0)for(var h=d;h<b.length;h++)for(var l=0;l<d;l++)if(b[l]===b[h]){b.splice(h--,1);break}}return b},has:function(a){var b=c(a);return this.filter(function(){for(var d=0,e=b.length;d<e;d++)if(c.contains(this,b[d]))return true})},
+not:function(a){return this.pushStack(ma(this,a,false),"not",a)},filter:function(a){return this.pushStack(ma(this,a,true),"filter",a)},is:function(a){return!!a&&c.filter(a,this).length>0},closest:function(a,b){var d=[],e,f,h=this[0];if(c.isArray(a)){var l,k={},o=1;if(h&&a.length){e=0;for(f=a.length;e<f;e++){l=a[e];k[l]||(k[l]=c.expr.match.POS.test(l)?c(l,b||this.context):l)}for(;h&&h.ownerDocument&&h!==b;){for(l in k){e=k[l];if(e.jquery?e.index(h)>-1:c(h).is(e))d.push({selector:l,elem:h,level:o})}h=
+h.parentNode;o++}}return d}l=cb.test(a)?c(a,b||this.context):null;e=0;for(f=this.length;e<f;e++)for(h=this[e];h;)if(l?l.index(h)>-1:c.find.matchesSelector(h,a)){d.push(h);break}else{h=h.parentNode;if(!h||!h.ownerDocument||h===b)break}d=d.length>1?c.unique(d):d;return this.pushStack(d,"closest",a)},index:function(a){if(!a||typeof a==="string")return c.inArray(this[0],a?c(a):this.parent().children());return c.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var d=typeof a==="string"?c(a,b||this.context):
+c.makeArray(a),e=c.merge(this.get(),d);return this.pushStack(!d[0]||!d[0].parentNode||d[0].parentNode.nodeType===11||!e[0]||!e[0].parentNode||e[0].parentNode.nodeType===11?e:c.unique(e))},andSelf:function(){return this.add(this.prevObject)}});c.each({parent:function(a){return(a=a.parentNode)&&a.nodeType!==11?a:null},parents:function(a){return c.dir(a,"parentNode")},parentsUntil:function(a,b,d){return c.dir(a,"parentNode",d)},next:function(a){return c.nth(a,2,"nextSibling")},prev:function(a){return c.nth(a,
+2,"previousSibling")},nextAll:function(a){return c.dir(a,"nextSibling")},prevAll:function(a){return c.dir(a,"previousSibling")},nextUntil:function(a,b,d){return c.dir(a,"nextSibling",d)},prevUntil:function(a,b,d){return c.dir(a,"previousSibling",d)},siblings:function(a){return c.sibling(a.parentNode.firstChild,a)},children:function(a){return c.sibling(a.firstChild)},contents:function(a){return c.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:c.makeArray(a.childNodes)}},function(a,
+b){c.fn[a]=function(d,e){var f=c.map(this,b,d);Za.test(a)||(e=d);if(e&&typeof e==="string")f=c.filter(e,f);f=this.length>1?c.unique(f):f;if((this.length>1||ab.test(e))&&$a.test(a))f=f.reverse();return this.pushStack(f,a,bb.call(arguments).join(","))}});c.extend({filter:function(a,b,d){if(d)a=":not("+a+")";return b.length===1?c.find.matchesSelector(b[0],a)?[b[0]]:[]:c.find.matches(a,b)},dir:function(a,b,d){var e=[];for(a=a[b];a&&a.nodeType!==9&&(d===B||a.nodeType!==1||!c(a).is(d));){a.nodeType===1&&
+e.push(a);a=a[b]}return e},nth:function(a,b,d){b=b||1;for(var e=0;a;a=a[d])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){for(var d=[];a;a=a.nextSibling)a.nodeType===1&&a!==b&&d.push(a);return d}});var za=/ jQuery\d+="(?:\d+|null)"/g,$=/^\s+/,Aa=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,Ba=/<([\w:]+)/,db=/<tbody/i,eb=/<|&#?\w+;/,Ca=/<(?:script|object|embed|option|style)/i,Da=/checked\s*(?:[^=]|=\s*.checked.)/i,fb=/\=([^="'>\s]+\/)>/g,P={option:[1,
+"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]};P.optgroup=P.option;P.tbody=P.tfoot=P.colgroup=P.caption=P.thead;P.th=P.td;if(!c.support.htmlSerialize)P._default=[1,"div<div>","</div>"];c.fn.extend({text:function(a){if(c.isFunction(a))return this.each(function(b){var d=
+c(this);d.text(a.call(this,b,d.text()))});if(typeof a!=="object"&&a!==B)return this.empty().append((this[0]&&this[0].ownerDocument||t).createTextNode(a));return c.text(this)},wrapAll:function(a){if(c.isFunction(a))return this.each(function(d){c(this).wrapAll(a.call(this,d))});if(this[0]){var b=c(a,this[0].ownerDocument).eq(0).clone(true);this[0].parentNode&&b.insertBefore(this[0]);b.map(function(){for(var d=this;d.firstChild&&d.firstChild.nodeType===1;)d=d.firstChild;return d}).append(this)}return this},
+wrapInner:function(a){if(c.isFunction(a))return this.each(function(b){c(this).wrapInner(a.call(this,b))});return this.each(function(){var b=c(this),d=b.contents();d.length?d.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){c(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){c.nodeName(this,"body")||c(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.appendChild(a)})},
+prepend:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b,this)});else if(arguments.length){var a=c(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b,
+this.nextSibling)});else if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,c(arguments[0]).toArray());return a}},remove:function(a,b){for(var d=0,e;(e=this[d])!=null;d++)if(!a||c.filter(a,[e]).length){if(!b&&e.nodeType===1){c.cleanData(e.getElementsByTagName("*"));c.cleanData([e])}e.parentNode&&e.parentNode.removeChild(e)}return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++)for(b.nodeType===1&&c.cleanData(b.getElementsByTagName("*"));b.firstChild;)b.removeChild(b.firstChild);
+return this},clone:function(a){var b=this.map(function(){if(!c.support.noCloneEvent&&!c.isXMLDoc(this)){var d=this.outerHTML,e=this.ownerDocument;if(!d){d=e.createElement("div");d.appendChild(this.cloneNode(true));d=d.innerHTML}return c.clean([d.replace(za,"").replace(fb,'="$1">').replace($,"")],e)[0]}else return this.cloneNode(true)});if(a===true){na(this,b);na(this.find("*"),b.find("*"))}return b},html:function(a){if(a===B)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(za,""):null;
+else if(typeof a==="string"&&!Ca.test(a)&&(c.support.leadingWhitespace||!$.test(a))&&!P[(Ba.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Aa,"<$1></$2>");try{for(var b=0,d=this.length;b<d;b++)if(this[b].nodeType===1){c.cleanData(this[b].getElementsByTagName("*"));this[b].innerHTML=a}}catch(e){this.empty().append(a)}}else c.isFunction(a)?this.each(function(f){var h=c(this);h.html(a.call(this,f,h.html()))}):this.empty().append(a);return this},replaceWith:function(a){if(this[0]&&this[0].parentNode){if(c.isFunction(a))return this.each(function(b){var d=
+c(this),e=d.html();d.replaceWith(a.call(this,b,e))});if(typeof a!=="string")a=c(a).detach();return this.each(function(){var b=this.nextSibling,d=this.parentNode;c(this).remove();b?c(b).before(a):c(d).append(a)})}else return this.pushStack(c(c.isFunction(a)?a():a),"replaceWith",a)},detach:function(a){return this.remove(a,true)},domManip:function(a,b,d){var e,f,h,l=a[0],k=[];if(!c.support.checkClone&&arguments.length===3&&typeof l==="string"&&Da.test(l))return this.each(function(){c(this).domManip(a,
+b,d,true)});if(c.isFunction(l))return this.each(function(x){var r=c(this);a[0]=l.call(this,x,b?r.html():B);r.domManip(a,b,d)});if(this[0]){e=l&&l.parentNode;e=c.support.parentNode&&e&&e.nodeType===11&&e.childNodes.length===this.length?{fragment:e}:c.buildFragment(a,this,k);h=e.fragment;if(f=h.childNodes.length===1?h=h.firstChild:h.firstChild){b=b&&c.nodeName(f,"tr");f=0;for(var o=this.length;f<o;f++)d.call(b?c.nodeName(this[f],"table")?this[f].getElementsByTagName("tbody")[0]||this[f].appendChild(this[f].ownerDocument.createElement("tbody")):
+this[f]:this[f],f>0||e.cacheable||this.length>1?h.cloneNode(true):h)}k.length&&c.each(k,Oa)}return this}});c.buildFragment=function(a,b,d){var e,f,h;b=b&&b[0]?b[0].ownerDocument||b[0]:t;if(a.length===1&&typeof a[0]==="string"&&a[0].length<512&&b===t&&!Ca.test(a[0])&&(c.support.checkClone||!Da.test(a[0]))){f=true;if(h=c.fragments[a[0]])if(h!==1)e=h}if(!e){e=b.createDocumentFragment();c.clean(a,b,e,d)}if(f)c.fragments[a[0]]=h?e:1;return{fragment:e,cacheable:f}};c.fragments={};c.each({appendTo:"append",
+prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){c.fn[a]=function(d){var e=[];d=c(d);var f=this.length===1&&this[0].parentNode;if(f&&f.nodeType===11&&f.childNodes.length===1&&d.length===1){d[b](this[0]);return this}else{f=0;for(var h=d.length;f<h;f++){var l=(f>0?this.clone(true):this).get();c(d[f])[b](l);e=e.concat(l)}return this.pushStack(e,a,d.selector)}}});c.extend({clean:function(a,b,d,e){b=b||t;if(typeof b.createElement==="undefined")b=b.ownerDocument||
+b[0]&&b[0].ownerDocument||t;for(var f=[],h=0,l;(l=a[h])!=null;h++){if(typeof l==="number")l+="";if(l){if(typeof l==="string"&&!eb.test(l))l=b.createTextNode(l);else if(typeof l==="string"){l=l.replace(Aa,"<$1></$2>");var k=(Ba.exec(l)||["",""])[1].toLowerCase(),o=P[k]||P._default,x=o[0],r=b.createElement("div");for(r.innerHTML=o[1]+l+o[2];x--;)r=r.lastChild;if(!c.support.tbody){x=db.test(l);k=k==="table"&&!x?r.firstChild&&r.firstChild.childNodes:o[1]==="<table>"&&!x?r.childNodes:[];for(o=k.length-
+1;o>=0;--o)c.nodeName(k[o],"tbody")&&!k[o].childNodes.length&&k[o].parentNode.removeChild(k[o])}!c.support.leadingWhitespace&&$.test(l)&&r.insertBefore(b.createTextNode($.exec(l)[0]),r.firstChild);l=r.childNodes}if(l.nodeType)f.push(l);else f=c.merge(f,l)}}if(d)for(h=0;f[h];h++)if(e&&c.nodeName(f[h],"script")&&(!f[h].type||f[h].type.toLowerCase()==="text/javascript"))e.push(f[h].parentNode?f[h].parentNode.removeChild(f[h]):f[h]);else{f[h].nodeType===1&&f.splice.apply(f,[h+1,0].concat(c.makeArray(f[h].getElementsByTagName("script"))));
+d.appendChild(f[h])}return f},cleanData:function(a){for(var b,d,e=c.cache,f=c.event.special,h=c.support.deleteExpando,l=0,k;(k=a[l])!=null;l++)if(!(k.nodeName&&c.noData[k.nodeName.toLowerCase()]))if(d=k[c.expando]){if((b=e[d])&&b.events)for(var o in b.events)f[o]?c.event.remove(k,o):c.removeEvent(k,o,b.handle);if(h)delete k[c.expando];else k.removeAttribute&&k.removeAttribute(c.expando);delete e[d]}}});var Ea=/alpha\([^)]*\)/i,gb=/opacity=([^)]*)/,hb=/-([a-z])/ig,ib=/([A-Z])/g,Fa=/^-?\d+(?:px)?$/i,
+jb=/^-?\d/,kb={position:"absolute",visibility:"hidden",display:"block"},Pa=["Left","Right"],Qa=["Top","Bottom"],W,Ga,aa,lb=function(a,b){return b.toUpperCase()};c.fn.css=function(a,b){if(arguments.length===2&&b===B)return this;return c.access(this,a,b,true,function(d,e,f){return f!==B?c.style(d,e,f):c.css(d,e)})};c.extend({cssHooks:{opacity:{get:function(a,b){if(b){var d=W(a,"opacity","opacity");return d===""?"1":d}else return a.style.opacity}}},cssNumber:{zIndex:true,fontWeight:true,opacity:true,
+zoom:true,lineHeight:true},cssProps:{"float":c.support.cssFloat?"cssFloat":"styleFloat"},style:function(a,b,d,e){if(!(!a||a.nodeType===3||a.nodeType===8||!a.style)){var f,h=c.camelCase(b),l=a.style,k=c.cssHooks[h];b=c.cssProps[h]||h;if(d!==B){if(!(typeof d==="number"&&isNaN(d)||d==null)){if(typeof d==="number"&&!c.cssNumber[h])d+="px";if(!k||!("set"in k)||(d=k.set(a,d))!==B)try{l[b]=d}catch(o){}}}else{if(k&&"get"in k&&(f=k.get(a,false,e))!==B)return f;return l[b]}}},css:function(a,b,d){var e,f=c.camelCase(b),
+h=c.cssHooks[f];b=c.cssProps[f]||f;if(h&&"get"in h&&(e=h.get(a,true,d))!==B)return e;else if(W)return W(a,b,f)},swap:function(a,b,d){var e={},f;for(f in b){e[f]=a.style[f];a.style[f]=b[f]}d.call(a);for(f in b)a.style[f]=e[f]},camelCase:function(a){return a.replace(hb,lb)}});c.curCSS=c.css;c.each(["height","width"],function(a,b){c.cssHooks[b]={get:function(d,e,f){var h;if(e){if(d.offsetWidth!==0)h=oa(d,b,f);else c.swap(d,kb,function(){h=oa(d,b,f)});if(h<=0){h=W(d,b,b);if(h==="0px"&&aa)h=aa(d,b,b);
+if(h!=null)return h===""||h==="auto"?"0px":h}if(h<0||h==null){h=d.style[b];return h===""||h==="auto"?"0px":h}return typeof h==="string"?h:h+"px"}},set:function(d,e){if(Fa.test(e)){e=parseFloat(e);if(e>=0)return e+"px"}else return e}}});if(!c.support.opacity)c.cssHooks.opacity={get:function(a,b){return gb.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var d=a.style;d.zoom=1;var e=c.isNaN(b)?"":"alpha(opacity="+b*100+")",f=
+d.filter||"";d.filter=Ea.test(f)?f.replace(Ea,e):d.filter+" "+e}};if(t.defaultView&&t.defaultView.getComputedStyle)Ga=function(a,b,d){var e;d=d.replace(ib,"-$1").toLowerCase();if(!(b=a.ownerDocument.defaultView))return B;if(b=b.getComputedStyle(a,null)){e=b.getPropertyValue(d);if(e===""&&!c.contains(a.ownerDocument.documentElement,a))e=c.style(a,d)}return e};if(t.documentElement.currentStyle)aa=function(a,b){var d,e,f=a.currentStyle&&a.currentStyle[b],h=a.style;if(!Fa.test(f)&&jb.test(f)){d=h.left;
+e=a.runtimeStyle.left;a.runtimeStyle.left=a.currentStyle.left;h.left=b==="fontSize"?"1em":f||0;f=h.pixelLeft+"px";h.left=d;a.runtimeStyle.left=e}return f===""?"auto":f};W=Ga||aa;if(c.expr&&c.expr.filters){c.expr.filters.hidden=function(a){var b=a.offsetHeight;return a.offsetWidth===0&&b===0||!c.support.reliableHiddenOffsets&&(a.style.display||c.css(a,"display"))==="none"};c.expr.filters.visible=function(a){return!c.expr.filters.hidden(a)}}var mb=c.now(),nb=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,
+ob=/^(?:select|textarea)/i,pb=/^(?:color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,qb=/^(?:GET|HEAD)$/,Ra=/\[\]$/,T=/\=\?(&|$)/,ja=/\?/,rb=/([?&])_=[^&]*/,sb=/^(\w+:)?\/\/([^\/?#]+)/,tb=/%20/g,ub=/#.*$/,Ha=c.fn.load;c.fn.extend({load:function(a,b,d){if(typeof a!=="string"&&Ha)return Ha.apply(this,arguments);else if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var f=a.slice(e,a.length);a=a.slice(0,e)}e="GET";if(b)if(c.isFunction(b)){d=b;b=null}else if(typeof b===
+"object"){b=c.param(b,c.ajaxSettings.traditional);e="POST"}var h=this;c.ajax({url:a,type:e,dataType:"html",data:b,complete:function(l,k){if(k==="success"||k==="notmodified")h.html(f?c("<div>").append(l.responseText.replace(nb,"")).find(f):l.responseText);d&&h.each(d,[l.responseText,k,l])}});return this},serialize:function(){return c.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?c.makeArray(this.elements):this}).filter(function(){return this.name&&
+!this.disabled&&(this.checked||ob.test(this.nodeName)||pb.test(this.type))}).map(function(a,b){var d=c(this).val();return d==null?null:c.isArray(d)?c.map(d,function(e){return{name:b.name,value:e}}):{name:b.name,value:d}}).get()}});c.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){c.fn[b]=function(d){return this.bind(b,d)}});c.extend({get:function(a,b,d,e){if(c.isFunction(b)){e=e||d;d=b;b=null}return c.ajax({type:"GET",url:a,data:b,success:d,dataType:e})},
+getScript:function(a,b){return c.get(a,null,b,"script")},getJSON:function(a,b,d){return c.get(a,b,d,"json")},post:function(a,b,d,e){if(c.isFunction(b)){e=e||d;d=b;b={}}return c.ajax({type:"POST",url:a,data:b,success:d,dataType:e})},ajaxSetup:function(a){c.extend(c.ajaxSettings,a)},ajaxSettings:{url:location.href,global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:function(){return new E.XMLHttpRequest},accepts:{xml:"application/xml, text/xml",html:"text/html",
+script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},ajax:function(a){var b=c.extend(true,{},c.ajaxSettings,a),d,e,f,h=b.type.toUpperCase(),l=qb.test(h);b.url=b.url.replace(ub,"");b.context=a&&a.context!=null?a.context:b;if(b.data&&b.processData&&typeof b.data!=="string")b.data=c.param(b.data,b.traditional);if(b.dataType==="jsonp"){if(h==="GET")T.test(b.url)||(b.url+=(ja.test(b.url)?"&":"?")+(b.jsonp||"callback")+"=?");else if(!b.data||
+!T.test(b.data))b.data=(b.data?b.data+"&":"")+(b.jsonp||"callback")+"=?";b.dataType="json"}if(b.dataType==="json"&&(b.data&&T.test(b.data)||T.test(b.url))){d=b.jsonpCallback||"jsonp"+mb++;if(b.data)b.data=(b.data+"").replace(T,"="+d+"$1");b.url=b.url.replace(T,"="+d+"$1");b.dataType="script";var k=E[d];E[d]=function(m){if(c.isFunction(k))k(m);else{E[d]=B;try{delete E[d]}catch(p){}}f=m;c.handleSuccess(b,w,e,f);c.handleComplete(b,w,e,f);r&&r.removeChild(A)}}if(b.dataType==="script"&&b.cache===null)b.cache=
+false;if(b.cache===false&&l){var o=c.now(),x=b.url.replace(rb,"$1_="+o);b.url=x+(x===b.url?(ja.test(b.url)?"&":"?")+"_="+o:"")}if(b.data&&l)b.url+=(ja.test(b.url)?"&":"?")+b.data;b.global&&c.active++===0&&c.event.trigger("ajaxStart");o=(o=sb.exec(b.url))&&(o[1]&&o[1].toLowerCase()!==location.protocol||o[2].toLowerCase()!==location.host);if(b.dataType==="script"&&h==="GET"&&o){var r=t.getElementsByTagName("head")[0]||t.documentElement,A=t.createElement("script");if(b.scriptCharset)A.charset=b.scriptCharset;
+A.src=b.url;if(!d){var C=false;A.onload=A.onreadystatechange=function(){if(!C&&(!this.readyState||this.readyState==="loaded"||this.readyState==="complete")){C=true;c.handleSuccess(b,w,e,f);c.handleComplete(b,w,e,f);A.onload=A.onreadystatechange=null;r&&A.parentNode&&r.removeChild(A)}}}r.insertBefore(A,r.firstChild);return B}var J=false,w=b.xhr();if(w){b.username?w.open(h,b.url,b.async,b.username,b.password):w.open(h,b.url,b.async);try{if(b.data!=null&&!l||a&&a.contentType)w.setRequestHeader("Content-Type",
+b.contentType);if(b.ifModified){c.lastModified[b.url]&&w.setRequestHeader("If-Modified-Since",c.lastModified[b.url]);c.etag[b.url]&&w.setRequestHeader("If-None-Match",c.etag[b.url])}o||w.setRequestHeader("X-Requested-With","XMLHttpRequest");w.setRequestHeader("Accept",b.dataType&&b.accepts[b.dataType]?b.accepts[b.dataType]+", */*; q=0.01":b.accepts._default)}catch(I){}if(b.beforeSend&&b.beforeSend.call(b.context,w,b)===false){b.global&&c.active--===1&&c.event.trigger("ajaxStop");w.abort();return false}b.global&&
+c.triggerGlobal(b,"ajaxSend",[w,b]);var L=w.onreadystatechange=function(m){if(!w||w.readyState===0||m==="abort"){J||c.handleComplete(b,w,e,f);J=true;if(w)w.onreadystatechange=c.noop}else if(!J&&w&&(w.readyState===4||m==="timeout")){J=true;w.onreadystatechange=c.noop;e=m==="timeout"?"timeout":!c.httpSuccess(w)?"error":b.ifModified&&c.httpNotModified(w,b.url)?"notmodified":"success";var p;if(e==="success")try{f=c.httpData(w,b.dataType,b)}catch(q){e="parsererror";p=q}if(e==="success"||e==="notmodified")d||
+c.handleSuccess(b,w,e,f);else c.handleError(b,w,e,p);d||c.handleComplete(b,w,e,f);m==="timeout"&&w.abort();if(b.async)w=null}};try{var g=w.abort;w.abort=function(){w&&Function.prototype.call.call(g,w);L("abort")}}catch(i){}b.async&&b.timeout>0&&setTimeout(function(){w&&!J&&L("timeout")},b.timeout);try{w.send(l||b.data==null?null:b.data)}catch(n){c.handleError(b,w,null,n);c.handleComplete(b,w,e,f)}b.async||L();return w}},param:function(a,b){var d=[],e=function(h,l){l=c.isFunction(l)?l():l;d[d.length]=
+encodeURIComponent(h)+"="+encodeURIComponent(l)};if(b===B)b=c.ajaxSettings.traditional;if(c.isArray(a)||a.jquery)c.each(a,function(){e(this.name,this.value)});else for(var f in a)da(f,a[f],b,e);return d.join("&").replace(tb,"+")}});c.extend({active:0,lastModified:{},etag:{},handleError:function(a,b,d,e){a.error&&a.error.call(a.context,b,d,e);a.global&&c.triggerGlobal(a,"ajaxError",[b,a,e])},handleSuccess:function(a,b,d,e){a.success&&a.success.call(a.context,e,d,b);a.global&&c.triggerGlobal(a,"ajaxSuccess",
+[b,a])},handleComplete:function(a,b,d){a.complete&&a.complete.call(a.context,b,d);a.global&&c.triggerGlobal(a,"ajaxComplete",[b,a]);a.global&&c.active--===1&&c.event.trigger("ajaxStop")},triggerGlobal:function(a,b,d){(a.context&&a.context.url==null?c(a.context):c.event).trigger(b,d)},httpSuccess:function(a){try{return!a.status&&location.protocol==="file:"||a.status>=200&&a.status<300||a.status===304||a.status===1223}catch(b){}return false},httpNotModified:function(a,b){var d=a.getResponseHeader("Last-Modified"),
+e=a.getResponseHeader("Etag");if(d)c.lastModified[b]=d;if(e)c.etag[b]=e;return a.status===304},httpData:function(a,b,d){var e=a.getResponseHeader("content-type")||"",f=b==="xml"||!b&&e.indexOf("xml")>=0;a=f?a.responseXML:a.responseText;f&&a.documentElement.nodeName==="parsererror"&&c.error("parsererror");if(d&&d.dataFilter)a=d.dataFilter(a,b);if(typeof a==="string")if(b==="json"||!b&&e.indexOf("json")>=0)a=c.parseJSON(a);else if(b==="script"||!b&&e.indexOf("javascript")>=0)c.globalEval(a);return a}});
+if(E.ActiveXObject)c.ajaxSettings.xhr=function(){if(E.location.protocol!=="file:")try{return new E.XMLHttpRequest}catch(a){}try{return new E.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}};c.support.ajax=!!c.ajaxSettings.xhr();var ea={},vb=/^(?:toggle|show|hide)$/,wb=/^([+\-]=)?([\d+.\-]+)(.*)$/,ba,pa=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];c.fn.extend({show:function(a,b,d){if(a||a===0)return this.animate(S("show",
+3),a,b,d);else{d=0;for(var e=this.length;d<e;d++){a=this[d];b=a.style.display;if(!c.data(a,"olddisplay")&&b==="none")b=a.style.display="";b===""&&c.css(a,"display")==="none"&&c.data(a,"olddisplay",qa(a.nodeName))}for(d=0;d<e;d++){a=this[d];b=a.style.display;if(b===""||b==="none")a.style.display=c.data(a,"olddisplay")||""}return this}},hide:function(a,b,d){if(a||a===0)return this.animate(S("hide",3),a,b,d);else{a=0;for(b=this.length;a<b;a++){d=c.css(this[a],"display");d!=="none"&&c.data(this[a],"olddisplay",
+d)}for(a=0;a<b;a++)this[a].style.display="none";return this}},_toggle:c.fn.toggle,toggle:function(a,b,d){var e=typeof a==="boolean";if(c.isFunction(a)&&c.isFunction(b))this._toggle.apply(this,arguments);else a==null||e?this.each(function(){var f=e?a:c(this).is(":hidden");c(this)[f?"show":"hide"]()}):this.animate(S("toggle",3),a,b,d);return this},fadeTo:function(a,b,d,e){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:b},a,d,e)},animate:function(a,b,d,e){var f=c.speed(b,
+d,e);if(c.isEmptyObject(a))return this.each(f.complete);return this[f.queue===false?"each":"queue"](function(){var h=c.extend({},f),l,k=this.nodeType===1,o=k&&c(this).is(":hidden"),x=this;for(l in a){var r=c.camelCase(l);if(l!==r){a[r]=a[l];delete a[l];l=r}if(a[l]==="hide"&&o||a[l]==="show"&&!o)return h.complete.call(this);if(k&&(l==="height"||l==="width")){h.overflow=[this.style.overflow,this.style.overflowX,this.style.overflowY];if(c.css(this,"display")==="inline"&&c.css(this,"float")==="none")if(c.support.inlineBlockNeedsLayout)if(qa(this.nodeName)===
+"inline")this.style.display="inline-block";else{this.style.display="inline";this.style.zoom=1}else this.style.display="inline-block"}if(c.isArray(a[l])){(h.specialEasing=h.specialEasing||{})[l]=a[l][1];a[l]=a[l][0]}}if(h.overflow!=null)this.style.overflow="hidden";h.curAnim=c.extend({},a);c.each(a,function(A,C){var J=new c.fx(x,h,A);if(vb.test(C))J[C==="toggle"?o?"show":"hide":C](a);else{var w=wb.exec(C),I=J.cur()||0;if(w){var L=parseFloat(w[2]),g=w[3]||"px";if(g!=="px"){c.style(x,A,(L||1)+g);I=(L||
+1)/J.cur()*I;c.style(x,A,I+g)}if(w[1])L=(w[1]==="-="?-1:1)*L+I;J.custom(I,L,g)}else J.custom(I,C,"")}});return true})},stop:function(a,b){var d=c.timers;a&&this.queue([]);this.each(function(){for(var e=d.length-1;e>=0;e--)if(d[e].elem===this){b&&d[e](true);d.splice(e,1)}});b||this.dequeue();return this}});c.each({slideDown:S("show",1),slideUp:S("hide",1),slideToggle:S("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){c.fn[a]=function(d,e,f){return this.animate(b,
+d,e,f)}});c.extend({speed:function(a,b,d){var e=a&&typeof a==="object"?c.extend({},a):{complete:d||!d&&b||c.isFunction(a)&&a,duration:a,easing:d&&b||b&&!c.isFunction(b)&&b};e.duration=c.fx.off?0:typeof e.duration==="number"?e.duration:e.duration in c.fx.speeds?c.fx.speeds[e.duration]:c.fx.speeds._default;e.old=e.complete;e.complete=function(){e.queue!==false&&c(this).dequeue();c.isFunction(e.old)&&e.old.call(this)};return e},easing:{linear:function(a,b,d,e){return d+e*a},swing:function(a,b,d,e){return(-Math.cos(a*
+Math.PI)/2+0.5)*e+d}},timers:[],fx:function(a,b,d){this.options=b;this.elem=a;this.prop=d;if(!b.orig)b.orig={}}});c.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this);(c.fx.step[this.prop]||c.fx.step._default)(this)},cur:function(){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];var a=parseFloat(c.css(this.elem,this.prop));return a&&a>-1E4?a:0},custom:function(a,b,d){function e(l){return f.step(l)}
+var f=this,h=c.fx;this.startTime=c.now();this.start=a;this.end=b;this.unit=d||this.unit||"px";this.now=this.start;this.pos=this.state=0;e.elem=this.elem;if(e()&&c.timers.push(e)&&!ba)ba=setInterval(h.tick,h.interval)},show:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.show=true;this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur());c(this.elem).show()},hide:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.hide=true;
+this.custom(this.cur(),0)},step:function(a){var b=c.now(),d=true;if(a||b>=this.options.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;for(var e in this.options.curAnim)if(this.options.curAnim[e]!==true)d=false;if(d){if(this.options.overflow!=null&&!c.support.shrinkWrapBlocks){var f=this.elem,h=this.options;c.each(["","X","Y"],function(k,o){f.style["overflow"+o]=h.overflow[k]})}this.options.hide&&c(this.elem).hide();if(this.options.hide||
+this.options.show)for(var l in this.options.curAnim)c.style(this.elem,l,this.options.orig[l]);this.options.complete.call(this.elem)}return false}else{a=b-this.startTime;this.state=a/this.options.duration;b=this.options.easing||(c.easing.swing?"swing":"linear");this.pos=c.easing[this.options.specialEasing&&this.options.specialEasing[this.prop]||b](this.state,a,0,1,this.options.duration);this.now=this.start+(this.end-this.start)*this.pos;this.update()}return true}};c.extend(c.fx,{tick:function(){for(var a=
+c.timers,b=0;b<a.length;b++)a[b]()||a.splice(b--,1);a.length||c.fx.stop()},interval:13,stop:function(){clearInterval(ba);ba=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(a){c.style(a.elem,"opacity",a.now)},_default:function(a){if(a.elem.style&&a.elem.style[a.prop]!=null)a.elem.style[a.prop]=(a.prop==="width"||a.prop==="height"?Math.max(0,a.now):a.now)+a.unit;else a.elem[a.prop]=a.now}}});if(c.expr&&c.expr.filters)c.expr.filters.animated=function(a){return c.grep(c.timers,function(b){return a===
+b.elem}).length};var xb=/^t(?:able|d|h)$/i,Ia=/^(?:body|html)$/i;c.fn.offset="getBoundingClientRect"in t.documentElement?function(a){var b=this[0],d;if(a)return this.each(function(l){c.offset.setOffset(this,a,l)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return c.offset.bodyOffset(b);try{d=b.getBoundingClientRect()}catch(e){}var f=b.ownerDocument,h=f.documentElement;if(!d||!c.contains(h,b))return d||{top:0,left:0};b=f.body;f=fa(f);return{top:d.top+(f.pageYOffset||c.support.boxModel&&
+h.scrollTop||b.scrollTop)-(h.clientTop||b.clientTop||0),left:d.left+(f.pageXOffset||c.support.boxModel&&h.scrollLeft||b.scrollLeft)-(h.clientLeft||b.clientLeft||0)}}:function(a){var b=this[0];if(a)return this.each(function(x){c.offset.setOffset(this,a,x)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return c.offset.bodyOffset(b);c.offset.initialize();var d,e=b.offsetParent,f=b.ownerDocument,h=f.documentElement,l=f.body;d=(f=f.defaultView)?f.getComputedStyle(b,null):b.currentStyle;
+for(var k=b.offsetTop,o=b.offsetLeft;(b=b.parentNode)&&b!==l&&b!==h;){if(c.offset.supportsFixedPosition&&d.position==="fixed")break;d=f?f.getComputedStyle(b,null):b.currentStyle;k-=b.scrollTop;o-=b.scrollLeft;if(b===e){k+=b.offsetTop;o+=b.offsetLeft;if(c.offset.doesNotAddBorder&&!(c.offset.doesAddBorderForTableAndCells&&xb.test(b.nodeName))){k+=parseFloat(d.borderTopWidth)||0;o+=parseFloat(d.borderLeftWidth)||0}e=b.offsetParent}if(c.offset.subtractsBorderForOverflowNotVisible&&d.overflow!=="visible"){k+=
+parseFloat(d.borderTopWidth)||0;o+=parseFloat(d.borderLeftWidth)||0}d=d}if(d.position==="relative"||d.position==="static"){k+=l.offsetTop;o+=l.offsetLeft}if(c.offset.supportsFixedPosition&&d.position==="fixed"){k+=Math.max(h.scrollTop,l.scrollTop);o+=Math.max(h.scrollLeft,l.scrollLeft)}return{top:k,left:o}};c.offset={initialize:function(){var a=t.body,b=t.createElement("div"),d,e,f,h=parseFloat(c.css(a,"marginTop"))||0;c.extend(b.style,{position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",
+height:"1px",visibility:"hidden"});b.innerHTML="<div style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;'><div></div></div><table style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;' cellpadding='0' cellspacing='0'><tr><td></td></tr></table>";a.insertBefore(b,a.firstChild);d=b.firstChild;e=d.firstChild;f=d.nextSibling.firstChild.firstChild;this.doesNotAddBorder=e.offsetTop!==5;this.doesAddBorderForTableAndCells=
+f.offsetTop===5;e.style.position="fixed";e.style.top="20px";this.supportsFixedPosition=e.offsetTop===20||e.offsetTop===15;e.style.position=e.style.top="";d.style.overflow="hidden";d.style.position="relative";this.subtractsBorderForOverflowNotVisible=e.offsetTop===-5;this.doesNotIncludeMarginInBodyOffset=a.offsetTop!==h;a.removeChild(b);c.offset.initialize=c.noop},bodyOffset:function(a){var b=a.offsetTop,d=a.offsetLeft;c.offset.initialize();if(c.offset.doesNotIncludeMarginInBodyOffset){b+=parseFloat(c.css(a,
+"marginTop"))||0;d+=parseFloat(c.css(a,"marginLeft"))||0}return{top:b,left:d}},setOffset:function(a,b,d){var e=c.css(a,"position");if(e==="static")a.style.position="relative";var f=c(a),h=f.offset(),l=c.css(a,"top"),k=c.css(a,"left"),o=e==="absolute"&&c.inArray("auto",[l,k])>-1;e={};var x={};if(o)x=f.position();l=o?x.top:parseInt(l,10)||0;k=o?x.left:parseInt(k,10)||0;if(c.isFunction(b))b=b.call(a,d,h);if(b.top!=null)e.top=b.top-h.top+l;if(b.left!=null)e.left=b.left-h.left+k;"using"in b?b.using.call(a,
+e):f.css(e)}};c.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),d=this.offset(),e=Ia.test(b[0].nodeName)?{top:0,left:0}:b.offset();d.top-=parseFloat(c.css(a,"marginTop"))||0;d.left-=parseFloat(c.css(a,"marginLeft"))||0;e.top+=parseFloat(c.css(b[0],"borderTopWidth"))||0;e.left+=parseFloat(c.css(b[0],"borderLeftWidth"))||0;return{top:d.top-e.top,left:d.left-e.left}},offsetParent:function(){return this.map(function(){for(var a=this.offsetParent||t.body;a&&!Ia.test(a.nodeName)&&
+c.css(a,"position")==="static";)a=a.offsetParent;return a})}});c.each(["Left","Top"],function(a,b){var d="scroll"+b;c.fn[d]=function(e){var f=this[0],h;if(!f)return null;if(e!==B)return this.each(function(){if(h=fa(this))h.scrollTo(!a?e:c(h).scrollLeft(),a?e:c(h).scrollTop());else this[d]=e});else return(h=fa(f))?"pageXOffset"in h?h[a?"pageYOffset":"pageXOffset"]:c.support.boxModel&&h.document.documentElement[d]||h.document.body[d]:f[d]}});c.each(["Height","Width"],function(a,b){var d=b.toLowerCase();
+c.fn["inner"+b]=function(){return this[0]?parseFloat(c.css(this[0],d,"padding")):null};c.fn["outer"+b]=function(e){return this[0]?parseFloat(c.css(this[0],d,e?"margin":"border")):null};c.fn[d]=function(e){var f=this[0];if(!f)return e==null?null:this;if(c.isFunction(e))return this.each(function(l){var k=c(this);k[d](e.call(this,l,k[d]()))});if(c.isWindow(f))return f.document.compatMode==="CSS1Compat"&&f.document.documentElement["client"+b]||f.document.body["client"+b];else if(f.nodeType===9)return Math.max(f.documentElement["client"+
+b],f.body["scroll"+b],f.documentElement["scroll"+b],f.body["offset"+b],f.documentElement["offset"+b]);else if(e===B){f=c.css(f,d);var h=parseFloat(f);return c.isNaN(h)?f:h}else return this.css(d,typeof e==="string"?e:e+"px")}})})(window);

+ 840 - 0
scanner/ocr.htm

@@ -0,0 +1,840 @@
+<!DOCTYPE html
+    PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+
+<head>
+    <title>跨浏览器调用高拍仪测试demo</title>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    <style type="text/css">
+        body,
+        html {
+            overflow: hidden;
+        }
+    </style>
+</head>
+
+<!-- 引入高拍仪JS接口-->
+<script src="gpyhs.js" type="text/javascript" charset="utf-8"></script>
+
+<script type="text/javascript">
+
+    document.domain = "cocorobo.cn"
+    //时间格式化显示
+    function formatDate(time) {
+        var date = new Date(time);
+        var year = date.getFullYear(),
+            month = date.getMonth() + 1,
+            day = date.getDate(),
+            hour = date.getHours(),
+            min = date.getMinutes(),
+            sec = date.getSeconds();
+        var newTime = year +
+            (month < 10 ? '0' + month : month) +
+            (day < 10 ? '0' + day : day) +
+            (hour < 10 ? '0' + hour : hour) +
+            (min < 10 ? '0' + min : min) +
+            (sec < 10 ? '0' + sec : sec);
+        return newTime;
+    }
+
+
+    function sleep(milliSeconds) {
+        var startTime = new Date().getTime();
+        while (new Date().getTime() < startTime + milliSeconds);
+    }
+
+    function ShowInfo(op) {
+        var obj = document.getElementById("TextInfo");
+        obj.value = obj.value + "\r\n" + op
+    }
+
+
+    /*----------------------------------------------------
+    ---(必须重写该函数)返回获取的设备数目及设备名称  ---
+    -----------------------------------------------------*/
+    function GetDevCountAndNameResultCB(devCount, devNameArr) {
+
+        if (devCount > 0) {
+
+            var obj = document.getElementById("DevName");
+            obj.options.length = 0;
+            for (var i = 0; i < devCount; i++) {
+                var objOption = document.createElement("option");
+                objOption.text = devNameArr[i];
+                objOption.value = i;
+                obj.options.add(objOption);
+            }
+            obj.selectedIndex = 0;
+            var CamID = obj.selectedIndex;
+
+            //获取分辨率
+            Cam_GetDevResolution(CamID);
+
+        }
+        else {
+            ShowInfo("没有发现合适的设备!");
+        }
+    }
+
+    /*---------------------------------------------------
+    ---  (必须重写该函数)返回获取的设备分辨率信息   ---
+    ----------------------------------------------------*/
+    function GetResolutionResultCB(resCount, resArr) {
+
+        if (resCount > 0) {
+            var selectIndex = 0;
+            var obj = document.getElementById("DevResolution");
+            obj.options.length = 0;
+            for (var i = 0; i < resCount; i++) {
+                var objOption = document.createElement("option");
+                objOption.text = resArr[i];
+                objOption.value = i;
+                obj.options.add(objOption);
+                //默认500万分辨率打开
+                if (resArr[i] == "2592*1944") {
+                    selectIndex = i;
+                }
+            }
+            obj.selectedIndex = selectIndex;
+
+            //打开摄像头
+            Cam_Close();
+            sleep(100);
+            var restr = obj[obj.selectedIndex].text;
+            var pos = restr.lastIndexOf("*");
+            var width = parseInt(restr.substring(0, pos));
+            var height = parseInt(restr.substring(pos + 1, restr.length));
+            var CamID = document.getElementById("DevName").selectedIndex;
+            Cam_Open(CamID, width, height);
+        }
+        else {
+            ShowInfo("获取分辨率信息失败!");
+        }
+    }
+
+
+    /*---------------------------------------------------
+    ---     (必须重写该函数)返回摄像头开启状态      ---
+    ----------------------------------------------------*/
+    function GetCameraOnOffStatus(status) {
+        if (status == 0) {
+            ShowInfo("设备开启成功");
+            //Cam_Rotate(1);   // 0-> 0度, 1->90度, 2->180度, 3->270度
+        }
+        else {
+            ShowInfo("设备开启失败!");
+        }
+
+    }
+
+
+    //    /*---------------------------------------------------
+    //    --------     (必须重写该函数)当前拍照状态 ---------
+    //    ----------------------------------------------------*/
+    //    function GetCaptrueStatusResultCB(status) {
+    //        if (status == 0) {
+    //            ShowInfo("拍照完成");
+    //        }
+    //        else {
+    //            ShowInfo("正在拍摄...");
+    //        }
+
+    //    }
+
+
+    /*---------------------------------------------------
+    --------     (必须重写该函数)拍照结果     ---------
+    ----------------------------------------------------*/
+    function GetCaptrueImgResultCB(flag, path, base64Str) {
+        if (flag == 0) {
+            var obj = document.getElementById("CameraPhoto");
+            obj.src = "data:;base64," + base64Str;
+            if (path == "") {
+                ShowInfo("拍照成功");
+            }
+            else {
+                return "data:;base64," + base64Str
+                ShowInfo("拍照成功,图片保存位置:" + path);
+            }
+        }
+        else {
+            ShowInfo("拍照失败!");
+        }
+
+    }
+
+
+    /*---------------------------------------------------
+    ------  (必须重写该函数)身份证信息返回结果   ------
+    ----------------------------------------------------*/
+    function GetIdCardInfoResultCB(flag, Name, Sex, Nation, Born, Address, CardNum, IssuedAt, EffectedDate, CardImgPath, CardImgBase64) {
+        if (flag == 0) {
+            document.getElementById("CardName").value = Name;
+            document.getElementById("CardSex").value = Sex;
+            document.getElementById("CardNation").value = Nation;
+            document.getElementById("CardBorn").value = Born;
+            document.getElementById("CardAddress").value = Address;
+            document.getElementById("CardNum").value = CardNum;
+            document.getElementById("CardIssuedAt").value = IssuedAt;
+            document.getElementById("CardEffectDate").value = EffectedDate;
+            var obj = document.getElementById("IdCardPhoto");
+            obj.src = "data:;base64," + CardImgBase64;
+            ShowInfo("读卡成功");
+        }
+        else {
+            ShowInfo("读卡失败!");
+        }
+
+    }
+
+
+
+    /*-------------------------------------------------------------------
+    ------  (必须重写该函数)身份证信息及正反面合并照片返回结果   ------
+    --------------------------------------------------------------------*/
+    function GetIdCardInfoAndImgResultCB(flag, Name, Sex, Nation, Born, Address, CardNum, IssuedAt, EffectedDate, CardImgPath, CardHeadImgBase64, CardImgBase64) {
+        if (flag == 0) {
+            document.getElementById("CardName").value = Name;
+            document.getElementById("CardSex").value = Sex;
+            document.getElementById("CardNation").value = Nation;
+            document.getElementById("CardBorn").value = Born;
+            document.getElementById("CardAddress").value = Address;
+            document.getElementById("CardNum").value = CardNum;
+            document.getElementById("CardIssuedAt").value = IssuedAt;
+            document.getElementById("CardEffectDate").value = EffectedDate;
+            var obj = document.getElementById("IdCardPhoto");
+            obj.src = "data:;base64," + CardHeadImgBase64;
+            var obj = document.getElementById("CameraPhoto");
+            obj.src = "data:;base64," + CardImgBase64;
+            ShowInfo("读卡成功");
+        }
+        else {
+            ShowInfo("读卡失败!");
+        }
+
+    }
+
+
+    /*---------------------------------------------------
+    ------  (必须重写该函数)条码二维码识别返回结果------
+    ----------------------------------------------------*/
+    function QrBarCodeRecogResultCB(flag, codeStr) {
+        if (flag == 0)
+            ShowInfo("条码/二维码 识别结果:" + codeStr);
+        else
+            ShowInfo("未识别到内容!");
+    }
+
+
+
+    /*********************
+    ***    初始化操作  ***
+    **********************/
+
+
+    function LoadCameraDocument() {
+
+        if (!window.WebSocket) {
+            alert("浏览器不支持HTML5,请更新浏览器或者使用其它浏览器");
+        }
+        //console.log("LoadCameraDocument");
+        var obj = document.getElementById("CameraCtl");
+        Cam_ControlInit(obj, 0, 0, 600, 400);
+    }
+
+
+    window.onload = function () {
+        document.domain = "cocorobo.cn"
+        console.log("window.onload");
+    }
+
+
+    /*********************
+    ***    打开摄像头  ***
+    **********************/
+    function toOpenCamera() {
+        var CamID = document.getElementById("DevName").selectedIndex;
+        var obj = document.getElementById("DevResolution");
+        var restr = obj[obj.selectedIndex].text;
+        var pos = restr.lastIndexOf("*");
+        var width = parseInt(restr.substring(0, pos));
+        var height = parseInt(restr.substring(pos + 1, restr.length));
+        Cam_Open(CamID, width, height);
+
+    }
+
+    /*********************
+    ***    关闭摄像头  ***
+    **********************/
+    function toCloseCamera() {
+        Cam_Close();
+    }
+
+
+    /*********************
+    ***    切换摄像头  ***
+    **********************/
+    function SelectDevice() {
+        var CamID = document.getElementById("DevName").selectedIndex;
+        //获取分辨率
+        Cam_GetDevResolution(CamID);
+    }
+
+
+    /*********************
+    ***    切换分辨率  ***
+    **********************/
+    function SelectResolution() {
+        var obj = document.getElementById("DevResolution");
+        var restr = obj[obj.selectedIndex].text;
+        var pos = restr.lastIndexOf("*");
+        var width = parseInt(restr.substring(0, pos));
+        var height = parseInt(restr.substring(pos + 1, restr.length));
+        var CamID = document.getElementById("DevName").selectedIndex;
+        Cam_Open(CamID, width, height);
+    }
+
+
+    /*********************
+    ***       拍照     ***
+    **********************/
+    function TakePhoto() {
+
+        var name = formatDate(new Date().getTime());
+
+        var obj = document.getElementById("FileType");
+        var path;
+        Cam_SetFileType(obj.selectedIndex); //设置文件格式
+        if (obj.selectedIndex == 0) {
+            path = "D:\\" + name + ".jpg";
+        }
+        else if (obj.selectedIndex == 1) {
+            path = "D:\\" + name + ".png";
+        }
+        else if (obj.selectedIndex == 2) {
+            path = "D:\\" + name + ".tif";
+        }
+        else if (obj.selectedIndex == 3) {
+            path = "D:\\" + name + ".pdf";
+        }
+        else {
+            path = "D:\\" + name + ".jpg";
+        }
+
+
+
+        Cam_Photo(path);  //主摄像头拍照
+        //Cam_Photo("");  //主摄像头拍照
+
+    }
+
+
+    function SetCameraCutMode() {
+
+        if (document.getElementById("Radio1").checked) {
+            Cam_SetCutMode(0);
+        }
+        if (document.getElementById("Radio3").checked) {
+            Cam_SetCutMode(1);
+        }
+        if (document.getElementById("Radio2").checked) {
+            Cam_SetCutMode(2);
+        }
+        if (document.getElementById("Radio4").checked) {
+
+            Cam_SetCutMode(3);
+            //设置裁剪区域
+            //toSleep(100);
+            //console.log("SetCustomArea");
+            SetCustomArea(3000, 3000, 9000, 9000);
+        }
+    }
+
+
+    /*********************
+    ***    读取身份证  ***
+    **********************/
+    function GetIdCardInfo() {
+        var path = "D:\\IdCard.jpg";
+        //Cam_ReadIdCard(path);
+        //Cam_ReadIdCard("");
+        Cam_ReadIdCardEx(path);
+    }
+
+
+    /*********************
+    ***    设置文件格式  ***
+    **********************/
+    function toSetFileType() {
+        var obj = document.getElementById("FileType");
+        Cam_SetFileType(obj.selectedIndex);
+    }
+
+
+    /*********************
+    ***    设置色彩模式  ***
+    **********************/
+    function toSetColorModel() {
+        var obj = document.getElementById("ColorMode");
+        Cam_SetColorMode(obj.selectedIndex);
+    }
+
+
+    /*********************
+    ***    设置JPG图像质量  ***
+    **********************/
+    function toSetJpgQuality() {
+        var obj = document.getElementById("JpgQuality");
+        var val = obj[obj.selectedIndex].text;
+        Cam_SetJpgQuality(val);
+    }
+
+
+    /*********************
+    ***    设置去黑边  ***
+    **********************/
+    function toSetDeleteBlackEdge() {
+        var obj = document.getElementById("Checkbox1");
+        if (obj.checked) {
+            Cam_SetDeleteBlackEdge(1);
+        }
+        else {
+            Cam_SetDeleteBlackEdge(0);
+        }
+    }
+
+    /*********************
+    ***    设置去底色  ***
+    **********************/
+    function toSetDeleteBgColor() {
+        var obj = document.getElementById("Checkbox2");
+        if (obj.checked) {
+            Cam_SetDeleteBgColor(1);
+        }
+        else {
+            Cam_SetDeleteBgColor(0);
+        }
+    }
+
+
+    /*---------------------------------------------------
+    --------     (必须重写该函数)上传结果     ---------
+    ----------------------------------------------------*/
+    function HttpResultCB(flag, ResultStr) {
+        if (flag == 0) {
+            alert("上传成功 :" + ResultStr);
+        }
+        else {
+            alert("上传失败!");
+        }
+    }
+
+
+    /*********************
+    ******    上传  ******
+    **********************/
+    function HttpUploadFile() {
+
+        var filePath = "D:\\test.jpg";
+        //var url = "http://112.27.213.220:2201/interface/FileUploadCode.jsp";
+
+        //var url = "http://localhost:9005/MyServletTest/upload";
+        var url = "http://localhost:4523/UploadFile.ashx";
+        //var url = "http://localhost:9005/MyServletTest/upload";
+        UploadFile(url, filePath);
+
+    }
+
+
+    //从摄像头中识别二维码
+    function RecogQrCodeFromCamera(type) {
+        Cam_RecogQrBarCodeFromCamera(type)
+    }
+
+    //从图片文件中识别二维码
+    function RecogBarCodeFromFile(type) {
+        var imgpath = "D:\\123.jpg";
+        Cam_RecogQrBarCodeFromFile(type, imgpath)
+    }
+
+
+
+
+    //添加要合并的PDF文件
+    function ToAddPDFFile() {
+        Cam_AddImgFileToPDF("");
+        //        var path1 = "D:\\1.jpg";
+        //        var path2 = "D:\\2.jpg";
+        //        var path3 = "D:\\3.jpg";
+        //        var path4 = "D:\\4.jpg";
+        //        var path5 = "D:\\5.jpg";
+        //        var path6 = "D:\\6.jpg";
+        //        //var path7 = "D:\\7.jpg";
+        //        var allpath = path1 + ";" + path2 + ";" + path3 + ";" + path4 + ";" + path5 + ";" + path6 ;
+        //        Cam_AddImgFileToPDF(allpath);
+        sleep(100);
+    }
+
+    /*---------------------------------------------------
+    --------     添加合并的PDF文件返回结果     ---------
+    ----------------------------------------------------*/
+    function AddImgFileToPDFResultCB(flag, base64Str) {
+        if (flag == 0) {
+            ShowInfo("添加合并的PDF文件成功");
+            var obj = document.getElementById("CameraPhoto");
+            obj.src = "data:;base64," + base64Str;
+        }
+        else {
+            ShowInfo("添加合并的PDF文件失败!");
+        }
+    }
+
+
+    //PDF合并测试
+    function ToCombinePDF() {
+        Cam_CombinePDF("D:\\test.pdf");
+        //Cam_CombinePDF("");  
+        //Cam_CombinePDF("D:\\QRjoNxNcgw.pdf");      
+    }
+
+    /*---------------------------------------------------
+    --------     (必须重写该函数)合并PDF结果     ---------
+    ----------------------------------------------------*/
+    function PdfCombineResultCB(flag, PdfBase64Str) {
+        if (flag == 0) {
+            ShowInfo("合并PDF完成");
+            console.log(PdfBase64Str);
+        }
+        else {
+            ShowInfo("合并PDF失败!");
+        }
+    }
+
+
+    //添加要合并的图像文件
+    function ToAddMergeImageFile() {
+        Cam_AddMergeImageFile("");
+        sleep(100);
+    }
+
+    /*---------------------------------------------------
+    --------     添加合并图像文件返回结果     ---------
+    ----------------------------------------------------*/
+    function AddMergeImageFileResultCB(flag, base64Str) {
+        if (flag == 0) {
+            ShowInfo("添加合并图像文件成功");
+            var obj = document.getElementById("CameraPhoto");
+            obj.src = "data:;base64," + base64Str;
+        }
+        else {
+            ShowInfo("添加合并图像文件失败!");
+        }
+    }
+
+
+    //图像合并测试
+    function ToMergeImages() {
+        Cam_MergeImages("D:\\merge.jpg", 0);
+    }
+
+    /*---------------------------------------------------
+    --------     (必须重写该函数)图像合并结果     ---------
+    ----------------------------------------------------*/
+    function MergeImagesResultCB(flag, base64Str) {
+        if (flag == 0) {
+            ShowInfo("图像合并完成");
+            var obj = document.getElementById("CameraPhoto");
+            obj.src = "data:;base64," + base64Str;
+        }
+        else {
+            ShowInfo("图像合并失败!");
+        }
+    }
+
+
+
+
+    /*---------------------------------------------------
+    -------(必须重写该函数)获取驱动盘符返回结果--------
+    ----------------------------------------------------*/
+    function GetDriveResultCB(driveStr) {
+        if (driveStr == "") {
+            ShowInfo("获取盘符失败!");
+        }
+        else {
+            ShowInfo(driveStr);
+        }
+    }
+
+
+    //设置水印
+    function toSetWaterMarkParams() {
+        var isAddMark;
+        var isAddTime;
+        var wTransp;
+        var wPos;
+        var wSize;
+        var wColor;
+        var szInfo;
+        var obj = document.getElementById("Checkbox3");
+        if (obj.checked)
+            isAddMark = 1;
+        else
+            isAddMark = 0;
+        obj = document.getElementById("Checkbox4");
+        if (obj.checked)
+            isAddTime = 1;
+        else
+            isAddTime = 0;
+        szInfo = document.getElementById("Text1").value;   //水印内容
+        wTransp = parseInt(document.getElementById("Text2").value); //透明度
+        wSize = parseInt(document.getElementById("Text3").value);   //水印大小
+        wPos = document.getElementById("Select1").selectedIndex;   //水印位置
+        wColor = document.getElementById("Select2").selectedIndex;   //水印颜色
+        SetWaterMark(isAddMark, 0, isAddTime, wTransp, wPos, wSize, wColor, szInfo);  //生效水印设置
+    }
+
+
+
+    //删除文件
+    function ToDeleteFile() {
+        var path = "D:\\log.txt";
+        DeleteFile(path);
+    }
+
+    //删除文件返回结果
+    function GetDeleteFileResultCB(flag) {
+        if (flag == 0) {
+            ShowInfo("删除文件成功");
+        }
+        else {
+            ShowInfo("删除文件失败!");
+        }
+    }
+
+
+
+    /*----------------------------------------------------------------
+    -------(必须重写该函数)添加需要OCR识别的图片文件返回结果--------
+    --------------------------------------------------------------*/
+    function AddOcrRecogFileResultCB(flag, base64Str) {
+        if (flag == 0) {
+            ShowInfo("添加需要OCR识别的图片文件成功");
+            var obj = document.getElementById("CameraPhoto");
+            obj.src = "data:;base64," + base64Str;
+        }
+        else {
+            ShowInfo("添加文件失败!");
+        }
+    }
+
+    //添加文件
+    function ToAddOcrRecogFile() {
+
+        //AddOcrRecogFile("");  //传空拍照添加,也可以传文件路径    
+
+        var path1 = "D:\\1.jpg";
+        var path2 = "D:\\2.jpg";
+        var path3 = "D:\\3.jpg";
+        var path4 = "D:\\4.jpg";
+        var path5 = "D:\\5.jpg";
+        var path6 = "D:\\6.jpg";
+        //var path7 = "D:\\7.jpg";
+        var allpath = path1 + ";" + path2 + ";" + path3 + ";" + path4 + ";" + path5 + ";" + path6;
+        console.log(allpath);
+        AddOcrRecogFile(allpath);
+    }
+
+
+    /*---------------------------------------------------
+    -------(必须重写该函数)OCR识别结果返回--------
+    ----------------------------------------------------*/
+    function OcrCallResultCB(flag, proValue, ResultStr, base64Str) {
+        if (flag == 0) {
+            ShowInfo("Ocr文字识别成功:" + ResultStr);
+            //ShowInfo("base64data:" + base64Str);
+            var obj = document.getElementById("mypdf");
+            obj.src = "data:application/pdf;base64," + base64Str;
+        }
+        else if (flag == 1) {
+            ShowInfo("Ocr文字识别进度:" + proValue);
+        }
+        else {
+            if (flag == 40)
+                ShowInfo("Ocr授权失败!");
+            else
+                ShowInfo("Ocr文字识别失败!");
+        }
+    }
+
+
+    //OCR识别(多张合并识别)
+    function ToOcrCallProEx() {
+
+        OcrCallProEx(0, "D:\\out.pdf", 0);
+
+    }
+
+    //OCR测试(单张识别)
+    function OcrTest() {
+        OcrCallPro(0, "D:\\test.jpg", "D:\\test.pdf");
+    }
+
+</script>
+
+<body onload="LoadCameraDocument()">
+
+    <div style="width:602px; height: 640px; border: 1px solid white; background:#C7EDCC;  float:left">
+
+        <div id='CameraCtl' style="width:600px; height: 400px"> </div>
+        <div>
+            设备
+            <select style="width:140px" id="DevName" onchange="SelectDevice()"></select>
+            分辨率
+            <select style="width:140px" id="DevResolution" onchange="SelectResolution()"></select>
+            <input type="button" value=" 打开设备 " onclick="toOpenCamera();" />
+            <input type="button" value=" 关闭设备 " onclick="toCloseCamera();" />
+            <br />
+
+            裁切模式:
+            <input id="Radio1" name="R1" type="radio" value="V1" onclick="SetCameraCutMode()" checked="checked" />不裁切
+            <input id="Radio2" name="R1" type="radio" value="V2" onclick="SetCameraCutMode()" />手动裁切
+            <input id="Radio3" name="R1" type="radio" value="V3" onclick="SetCameraCutMode()" />自动裁切
+            <input id="Radio4" name="R1" type="radio" value="V4" onclick="SetCameraCutMode()" />自定义
+            <br />
+
+            文件格式:
+            <select id="FileType" onchange="toSetFileType()">
+                <option value="0">jpg</option>
+                <option value="1">png</option>
+                <option value="2">tif</option>
+                <option value="3">pdf</option>
+            </select>
+
+            色彩模式:
+            <select id="ColorMode" onchange="toSetColorModel()">
+                <option value="0">彩色</option>
+                <option value="1">灰度</option>
+                <option value="2">黑白</option>
+            </select>
+
+            图像质量:
+            <select id="JpgQuality" onchange="toSetJpgQuality()">
+                <option value="0">10</option>
+                <option value="1">20</option>
+                <option value="2">30</option>
+                <option value="3">40</option>
+                <option value="4">50</option>
+                <option value="5" selected="true">60</option>
+                <option value="6">70</option>
+                <option value="7">80</option>
+                <option value="8">90</option>
+                <option value="9">100</option>
+            </select>
+
+            <input id="Checkbox1" type="checkbox" onclick="toSetDeleteBlackEdge()" /> 去黑边
+            <input id="Checkbox2" type="checkbox" onclick="toSetDeleteBgColor()" /> 去底色
+
+        </div>
+        <br />
+
+        <div>
+            <input id="Checkbox3" type="checkbox" /> 添加水印
+            水印内容<input id="Text1" type="text" value="水印测试" />
+            透明度<input id="Text2" type="text" value="127" style="width:40px" />
+            大小<input id="Text3" type="text" value="80" style="width:40px" /> <br />
+            位置
+            <select id="Select1">
+                <option value="0">左上</option>
+                <option value="1">右上</option>
+                <option value="2">左下</option>
+                <option value="3">右下</option>
+                <option value="4">中间</option>
+            </select>
+            颜色
+            <select id="Select2">
+                <option value="0">红色</option>
+                <option value="1">绿色</option>
+                <option value="2">蓝色</option>
+                <option value="3">青色</option>
+                <option value="4">黄色</option>
+                <option value="5">白色</option>
+                <option value="6">黑色</option>
+            </select>
+            <input id="Checkbox4" type="checkbox" /> 添加时间水印
+            <input type="button" value="生效水印参数设置" onclick="toSetWaterMarkParams()" />
+        </div>
+
+        <br />
+
+        <div>
+            <input type="button" value="获取盘符" onclick="GetDrives();" />
+            <input type="button" value="放大" onclick="Cam_ZoomIn();" />
+            <input type="button" value="缩小" onclick="Cam_ZoomOut();" />
+            <input type="button" value="适屏" onclick="Cam_BestSize();" />
+            <input type="button" value="1:1" onclick="Cam_TrueSize();" />
+            <input type="button" value="左旋" onclick="Cam_RotateLeft();" />
+            <input type="button" value="右旋" onclick="Cam_RotateRight();" />
+            <input type="button" value="拍照" onclick="TakePhoto();" />
+            <input type="button" value="对焦" onclick="Cam_Focus();" />
+            <input type="button" value="设置" onclick="Cam_ShowVideoProp();" />
+            <input type="button" value="上传" onclick="HttpUploadFile();" />
+            <input type="button" value="读身份证" onclick="GetIdCardInfo();" />
+            <input type="button" value="从摄像头中识别二维码" onclick="RecogQrCodeFromCamera(1);" />
+            <input type="button" value="从图片中识别二维码" onclick="RecogBarCodeFromFile(1);" />
+            <input type="button" value="添加合并PDF文件" onclick="ToAddPDFFile();" />
+            <input type="button" value="合并PDF" onclick="ToCombinePDF();" />
+            <input type="button" value="添加合并图像文件" onclick="ToAddMergeImageFile();" />
+            <input type="button" value="合并图像" onclick="ToMergeImages();" />
+            <input type="button" value="删除文件" onclick="ToDeleteFile();" />
+            <input type="button" value="OCR" onclick="OcrTest();" />
+        </div>
+
+        <div>
+            <input type="button" value="添加需要OCR识别的图片文件" onclick="ToAddOcrRecogFile();" />
+            <input type="button" value="OCR识别(多张合并识别)" onclick="ToOcrCallProEx();" />
+        </div>
+
+        <div style="width:595px; height: 80px">
+            <textarea style="width:100%; height:100%" id="TextInfo" cols="20" rows="2"></textarea>
+        </div>
+
+    </div>
+
+
+    <div style="width:202px; height: 640px; border: 1px solid white; background:#C7EDCC;  float:left">
+        拍照图片
+        <br />
+        <img id="CameraPhoto" src="" style="width: 198px;height: 198px;" />
+        <br />
+        身份证信息
+        <br />
+        <img id="IdCardPhoto" src="" style="width: 80px;height: 100px;" />
+        <br />
+        姓名
+        <input id="CardName" type="text" style="width: 100px" /> <br />
+        性别
+        <input id="CardSex" type="text" style="width: 50px" />
+        民族
+        <input id="CardNation" type="text" style="width: 60px" /> <br />
+        出生
+        <input id="CardBorn" type="text" style="width: 100px" /> <br />
+        住址
+        <br />
+        <textarea id="CardAddress" cols="20" rows="3" style="width:192px"></textarea>
+        身份证号码
+        <br />
+        <input id="CardNum" type="text" style="width: 195px" /> <br />
+        签发机关
+        <input id="CardIssuedAt" type="text" style="width: 125px" /> <br />
+        有效期限
+        <input id="CardEffectDate" type="text" style="width: 125px" /> <br />
+
+        <embed id="mypdf" src="" type="application/pdf" width="200" height="100" />
+
+    </div>
+
+</body>
+
+
+</html>

+ 142 - 0
scanner/upload.js

@@ -0,0 +1,142 @@
+document.write("<script language=javascript src='jquery-1.4.4.min.js'></script>");
+
+
+var xmlHttpRequest;
+var ot; //
+var oloaded;
+
+function createXmlHttpRequest() {
+    if (window.ActiveXObject) { 
+        return new ActiveXObject("Microsoft.XMLHTTP");
+    } else if (window.XMLHttpRequest) { 
+        return new XMLHttpRequest();
+    }
+}
+
+
+function dataURLtoFile(dataurl, filename) {
+
+    //var arr = dataurl.split(','), mime = arr[0].match(/:(.*?);/)[1],
+    //bstr = atob(arr[1]), n = bstr.length, u8arr = new Uint8Array(n);
+    var bstr = atob(dataurl);
+    var n = bstr.length;
+    var u8arr = new Uint8Array(n);
+    while (n--) {
+        u8arr[n] = bstr.charCodeAt(n);
+    }
+
+    var suffix = filename.substring(filename.length - 3, filename.length);
+
+    if (suffix == "jpg" || suffix == "JPG")
+        return new File([u8arr], filename, { type: 'image/jpg' });
+    if (suffix == "png" || suffix == "PNG")
+        return new File([u8arr], filename, { type: 'image/png' });
+    if (suffix == "tif" || suffix == "TIF")
+        return new File([u8arr], filename, { type: 'image/tiff' });
+    if (suffix == "pdf" || suffix == "PDF")
+        new File([u8arr], filename, { type: 'application/pdf' });
+
+    return new File([u8arr], filename, { type: 'application/jpg' });
+}
+
+
+
+function progressFunction(evt) {
+
+    var progressBar = document.getElementById("progressBar");
+    var percentageDiv = document.getElementById("percentage");
+    // event.total是需要传输的总字节,event.loaded是已经传输的字节。如果event.lengthComputable不为真,则event.total等于0
+    if (evt.lengthComputable) {//
+        progressBar.max = evt.total;
+        progressBar.value = evt.loaded;
+        percentageDiv.innerHTML = Math.round(evt.loaded / evt.total * 100) + "%";
+    }
+
+    var time = document.getElementById("time");
+    var nt = new Date().getTime(); //获取当前时间
+    var pertime = (nt - ot) / 1000; //计算出上次调用该方法时到现在的时间差,单位为s
+    ot = new Date().getTime(); //重新赋值时间,用于下次计算
+
+    var perload = evt.loaded - oloaded; //计算该分段上传的文件大小,单位b   
+    oloaded = evt.loaded; //重新赋值已上传文件大小,用以下次计算
+
+    //上传速度计算
+    var speed = perload / pertime; //b/s
+    var bspeed = speed;
+    var units = 'b/s'; //单位名称
+    if (speed / 1024 > 1) {
+        speed = speed / 1024;
+        units = 'k/s';
+    }
+    if (speed / 1024 > 1) {
+        speed = speed / 1024;
+        units = 'M/s';
+    }
+    speed = speed.toFixed(1);
+    //剩余时间
+    var resttime = ((evt.total - evt.loaded) / bspeed).toFixed(1);
+    time.innerHTML = ',速度:' + speed + units + ',剩余时间:' + resttime + 's';
+    if (bspeed == 0)
+        time.innerHTML = '上传已取消';
+}
+
+
+
+//上传成功响应
+function uploadComplete(evt) {
+    //    alert(evt.target.responseText);
+    alert("上传成功");
+}
+
+
+
+//上传失败
+function uploadFailed(evt) {
+    //alert(evt.target.responseText);
+    //alert("上传失败");
+}
+
+
+
+//取消上传
+function cancleUploadFile() {
+    xhr.abort();
+}
+
+
+
+//function ResultFun() {
+//    if (xmlHttpRequest.readyState == 4 && xmlHttpRequest.status == 200) {
+//        var iRestStr = xmlHttpRequest.responseText;
+//        alert(iRestStr);
+//    }
+//}
+
+
+
+//??????????
+function UpladFile(url, base64data, fileName, callback) {
+
+    var fileObj = dataURLtoFile(base64data, fileName); //base64数据转为文件对象
+    //var murl = "http://localhost:8080/MyServletTest/upload"; 
+    var fm = document.forms[0];
+    var form = new FormData(fm); // FormData ?
+    form.append("file", fileObj);
+    xmlHttpRequest = createXmlHttpRequest();  // XMLHttpRequest 
+    xmlHttpRequest.open("post", url, true); //post
+    xmlHttpRequest.onreadystatechange = function () {
+        if (xmlHttpRequest.readyState == 4 && xmlHttpRequest.status == 200) {
+            var iRestStr = xmlHttpRequest.responseText;
+            callback(iRestStr);
+            //alert("ok");
+        }
+    };
+    //    xmlHttpRequest.onload = uploadComplete;
+    //    xmlHttpRequest.onerror = uploadFailed; 
+    //    xmlHttpRequest.upload.onprogress = progressFunction; 
+    //    xmlHttpRequest.upload.onloadstart = function () {
+    //        ot = new Date().getTime();   
+    //        oloaded = 0; 
+    //    };
+    xmlHttpRequest.send(form); 
+}

+ 2 - 2
szdjg/Onload.js

@@ -53,8 +53,8 @@ US.Config = {
     edu: '//api.edu.cocorobo.cn/edu/',
     origin: '//cocorobo.cn',
     pbl: "//pbl.cocorobo.cn/api/pbl/",
-    // bpbl:"//pbl.cocorobo.cn",//正式链接
-    bpbl:"//beta.pbl.cocorobo.cn",//测试链接
+    bpbl:"//pbl.cocorobo.cn",//正式链接
+    // bpbl:"//beta.pbl.cocorobo.cn",//测试链接
     // pbl: "http://localhost:7003/api/pbl/",
     basename: '',
     type:1,