├── .gitignore ├── img ├── douban.png ├── fm_logoV1.png ├── screencut.png ├── wechat.zan.jpg ├── doubanLinks.png ├── wangyimusic.png └── xueleidownload.png ├── media ├── images │ ├── sort_asc.png │ ├── sort_both.png │ ├── sort_desc.png │ ├── back_disabled.png │ ├── back_enabled.png │ ├── forward_disabled.png │ ├── forward_enabled.png │ ├── back_enabled_hover.png │ ├── sort_asc_disabled.png │ ├── sort_desc_disabled.png │ └── forward_enabled_hover.png ├── css │ ├── demo_page.css │ ├── TableTools.css │ └── demo_table.css └── js │ ├── TableTools.min.js │ └── jquery.dataTables.min.js ├── css └── main.css ├── manifest.json ├── js ├── main.js ├── utility.js ├── douban.js ├── FileSaver.min.js ├── result.js └── background.js ├── export_intro.html ├── README.md ├── main.html ├── thanks_page.html └── result.html /.gitignore: -------------------------------------------------------------------------------- 1 | 2 | .idea/* 3 | -------------------------------------------------------------------------------- /img/douban.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/loveunk/douban-favorite-music-parser/HEAD/img/douban.png -------------------------------------------------------------------------------- /img/fm_logoV1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/loveunk/douban-favorite-music-parser/HEAD/img/fm_logoV1.png -------------------------------------------------------------------------------- /img/screencut.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/loveunk/douban-favorite-music-parser/HEAD/img/screencut.png -------------------------------------------------------------------------------- /img/wechat.zan.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/loveunk/douban-favorite-music-parser/HEAD/img/wechat.zan.jpg -------------------------------------------------------------------------------- /img/doubanLinks.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/loveunk/douban-favorite-music-parser/HEAD/img/doubanLinks.png -------------------------------------------------------------------------------- /img/wangyimusic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/loveunk/douban-favorite-music-parser/HEAD/img/wangyimusic.png -------------------------------------------------------------------------------- /img/xueleidownload.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/loveunk/douban-favorite-music-parser/HEAD/img/xueleidownload.png -------------------------------------------------------------------------------- /media/images/sort_asc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/loveunk/douban-favorite-music-parser/HEAD/media/images/sort_asc.png -------------------------------------------------------------------------------- /media/images/sort_both.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/loveunk/douban-favorite-music-parser/HEAD/media/images/sort_both.png -------------------------------------------------------------------------------- /media/images/sort_desc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/loveunk/douban-favorite-music-parser/HEAD/media/images/sort_desc.png -------------------------------------------------------------------------------- /media/images/back_disabled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/loveunk/douban-favorite-music-parser/HEAD/media/images/back_disabled.png -------------------------------------------------------------------------------- /media/images/back_enabled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/loveunk/douban-favorite-music-parser/HEAD/media/images/back_enabled.png -------------------------------------------------------------------------------- /media/images/forward_disabled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/loveunk/douban-favorite-music-parser/HEAD/media/images/forward_disabled.png -------------------------------------------------------------------------------- /media/images/forward_enabled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/loveunk/douban-favorite-music-parser/HEAD/media/images/forward_enabled.png -------------------------------------------------------------------------------- /media/images/back_enabled_hover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/loveunk/douban-favorite-music-parser/HEAD/media/images/back_enabled_hover.png -------------------------------------------------------------------------------- /media/images/sort_asc_disabled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/loveunk/douban-favorite-music-parser/HEAD/media/images/sort_asc_disabled.png -------------------------------------------------------------------------------- /media/images/sort_desc_disabled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/loveunk/douban-favorite-music-parser/HEAD/media/images/sort_desc_disabled.png -------------------------------------------------------------------------------- /media/images/forward_enabled_hover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/loveunk/douban-favorite-music-parser/HEAD/media/images/forward_enabled_hover.png -------------------------------------------------------------------------------- /css/main.css: -------------------------------------------------------------------------------- 1 | a:link { 2 | color:#278; 3 | } 4 | 5 | body { 6 | margin: auto; 7 | margin-top: 20px; 8 | width: 940px; 9 | vertical-align: middle; 10 | color: #666; 11 | font: 110% Arial, Helvetica, sans-serif; 12 | } 13 | 14 | .resultButton { 15 | cursor: pointer; 16 | color: 17 | white; 18 | background: 19 | #3FA156; 20 | border: 1px solid 21 | #528641; 22 | font-size: 14px; 23 | font-weight: bold; 24 | padding: 6px 26px; 25 | border-radius: 3px; 26 | -moz-border-radius: 3px; 27 | -webkit-border-radius: 3px; 28 | } 29 | 30 | .hide { 31 | visibility: hidden; 32 | } -------------------------------------------------------------------------------- /manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "manifest_version": 2, 3 | "content_security_policy": "script-src 'self' ; object-src 'self' ", 4 | "name": "豆瓣电台爬虫(加星歌曲列表导出)", 5 | "version": "19.4.26.0", 6 | "description": "自动抓取 豆瓣电台加星歌曲,并提供列表导出功能", 7 | "icons": { 8 | "32": "img/douban.png", 9 | "48": "img/douban.png", 10 | "128": "img/douban.png" 11 | }, 12 | "browser_action": { 13 | "default_title": "豆瓣电台爬虫(加星歌曲列表导出)", 14 | "default_icon": "img/douban.png", 15 | "default_popup": "main.html" 16 | }, 17 | "background": { 18 | "scripts": ["js/background.js"], 19 | "persistent": true 20 | }, 21 | "options_page": "thanks_page.html", 22 | "permissions": ["cookies", "tabs", "*://*.douban.com/*", "*://douban.fm/*", "notifications"] 23 | } 24 | -------------------------------------------------------------------------------- /js/main.js: -------------------------------------------------------------------------------- 1 | /* 2 | js code for main.html 3 | 4 | Copyright (C) 2014 QI Wen 5 | 6 | This program is free software: you can redistribute it and/or modify 7 | it under the terms of the GNU General Public License as published by 8 | the Free Software Foundation, either version 3 of the License, or 9 | (at your option) any later version. 10 | 11 | This program is distributed in the hope that it will be useful, 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | GNU General Public License for more details. 15 | 16 | You should have received a copy of the GNU General Public License 17 | along with this program. If not, see . 18 | */ 19 | 20 | function grab_liked() { 21 | var backg = chrome.extension.getBackgroundPage(); 22 | document.getElementById("liked").value = "开始努力工作中...(勿刷新)"; 23 | document.getElementById("liked").disabled = true; 24 | backg.start(true); 25 | } 26 | 27 | function grab_banned() { 28 | var backg = chrome.extension.getBackgroundPage(); 29 | backg.start(false); 30 | } 31 | 32 | document.getElementById("liked").onclick = grab_liked; 33 | document.getElementById("liked").disabled = false; 34 | // document.getElementById("banned").onclick = grab_banned; 35 | -------------------------------------------------------------------------------- /export_intro.html: -------------------------------------------------------------------------------- 1 | 19 | 20 | 21 | 22 | 歌曲导出说明 23 | 29 | 30 | 31 | 32 | 35 |
36 |
37 |

歌曲导出说明

38 |
39 |

40 |

    41 |
  1. 下载结果页面里的“生成歌曲下载链接文件”;
    42 | 43 |
  2. 44 |
  3. 复制文件里所有的链接到迅雷的新建任务框里;
    45 | 46 |
  4. 47 |
  5. 下载所有的mp3后,用网易音乐匹配本地歌曲,并另存歌单,即可导入其他音乐平台。
    48 | 49 |
  6. 50 |
51 |

52 |
53 | 54 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # 豆瓣电台加心歌曲爬虫 ❤ 2 | 3 | 这是一个维护了很多年的Chrome插件,用来获取完整的豆瓣加心歌曲(就是你收藏的那些歌曲)列表,并以列表的形式呈现。 4 | 5 | 支持: 6 | * 加星歌曲列表导出 7 | * 歌曲列表试听、下载 8 | 9 | 操作简单易用,希望能帮到你。 10 | 11 | [Chrome Store 插件安装地址](https://chrome.google.com/webstore/detail/%E8%B1%86%E7%93%A3%E7%94%B5%E5%8F%B0%E7%88%AC%E8%99%AB%EF%BC%88%E5%8A%A0%E6%98%9F%E6%AD%8C%E6%9B%B2%E5%88%97%E8%A1%A8%E5%AF%BC%E5%87%BA%EF%BC%89/biegmkgmmglpkeapmlkfpbihllbplaef?hl=zh-CN) 12 | 13 | --- 14 | ![豆瓣电台爬虫结果截图](img/screencut.png) 15 | 16 | 自动抓取 豆瓣电台加星歌曲,并提供列表导出功能 17 | 如果您经常使用Douban.fm,那您一定收藏了很多好听的歌曲! 18 | 19 | 也许您想把歌曲列表导出到其他本地播放器,比如“网易云音乐”... 20 | 21 | 可惜豆瓣电台现在还不支持加❤歌曲列表的导出... 22 | 23 | 没关系,有了这个小扩展,一切都搞定! 24 | 25 | 【使用方法】: 26 | 1. 打开豆瓣电台,确认已经登录(可以在douban.fm查看登录状态) 27 | 2. 点击插件的图标(就Chrome右上角的豆瓣电台图标),之后会有个小窗口弹出 28 | 3. 点击窗口的按钮。然后等待程序运行完毕(如果您有几千首加❤歌曲的话,可能需要几分钟的时间) 29 | 4. 如果一切顺利,会出现一个歌曲列表。您把列表中的内容,copy & paste到您的本地即可(比如Excel,记事本)。 30 | ** 也可以导出“酷我音乐列表”,此列表可导入“网易云音乐” 31 | 32 | --- 33 | 因为豆瓣电台经常变更网站样式或是数据获取方式,导致需要重新适配JavaScript code,如果你发现问题: 34 | * 请在这里提交Issue,或 35 | * 或者你已经fix可以直接submit pull request (preferred) 36 | 37 | --- 38 | ## Changelog 39 | -- update 2019/4/26 40 | 有朋友反映酷我/酷狗列表都已不能正常导入,测试后验证如此,因此更新以支持迅雷下载后导入网易音乐 41 | 42 | -- update 2019/2/24 43 | 很久没更新了,发现豆瓣又又又更新了它的加❤歌曲的呈现和获取方式,于是重新适配 44 | 45 | -- update 2016/5/27 46 | 感谢Junting Jin的提议,添加新功能:导出“酷我音乐列表”,此列表可导入“网易云音乐” 47 | 48 | -- update 2015/9/13 49 | 感谢WEN Pingbo (wengpingbo)提交的patch,修复了一个因为Douban Tag变化导致的Bug 50 | 51 | -- update 2014/6/26 52 | 感谢上海交大的Anana(anana#sjtu)提交的更新,修复了一下corner case bug,并新增垃圾箱歌曲导出 53 | 54 | -- update 2013/7/14 55 | 豆瓣修改了style导致抓取错误,修复了这个问题。并按照Google规定update manifest到version 2 56 | 57 | -- update 2012/5/24 58 | 有用户反映:复制表格到excel后不能正常显示。新增导出按钮,显示纯文字表格内容,解决此问题 59 | 60 | -- update 2012/5/21 61 | 优化了界面,更新了生成结果的样式,新增排序功能 62 | 63 | -- update 2011/10/31 64 | 最近有朋友提示说用不了了,我试了下的确是,因为Douban改了html的layout,今天简单改了改就行了。 65 | 66 | -- update 2011/5/26 67 | 今天发现一个问题,如果是从www.douban.com登录的豆瓣,然后直接使用这个扩展,会提示没有登录,您可以打开douban.fm登录后重试 68 | 69 | ## Thanks 70 | 71 | ![](img/wechat.zan.jpg) 72 | -------------------------------------------------------------------------------- /media/css/demo_page.css: -------------------------------------------------------------------------------- 1 | 2 | /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 3 | * General page setup 4 | */ 5 | #dt_example { 6 | font: 80%/1.45em "Lucida Grande", Verdana, Arial, Helvetica, sans-serif; 7 | margin: 0; 8 | padding: 0; 9 | color: #333; 10 | background-color: #fff; 11 | } 12 | 13 | 14 | #dt_example #container { 15 | width: 800px; 16 | margin: 30px auto; 17 | padding: 0; 18 | } 19 | 20 | 21 | #dt_example #footer { 22 | margin: 50px auto 0 auto; 23 | padding: 0; 24 | } 25 | 26 | #dt_example #demo { 27 | margin: 30px auto 0 auto; 28 | } 29 | 30 | #dt_example .demo_jui { 31 | margin: 30px auto 0 auto; 32 | } 33 | 34 | #dt_example .big { 35 | font-size: 1.3em; 36 | font-weight: bold; 37 | line-height: 1.6em; 38 | color: #4E6CA3; 39 | } 40 | 41 | #dt_example .spacer { 42 | height: 20px; 43 | clear: both; 44 | } 45 | 46 | #dt_example .clear { 47 | clear: both; 48 | } 49 | 50 | #dt_example pre { 51 | padding: 15px; 52 | background-color: #F5F5F5; 53 | border: 1px solid #CCCCCC; 54 | } 55 | 56 | #dt_example h1 { 57 | margin-top: 2em; 58 | font-size: 1.3em; 59 | font-weight: normal; 60 | line-height: 1.6em; 61 | color: #4E6CA3; 62 | border-bottom: 1px solid #B0BED9; 63 | clear: both; 64 | } 65 | 66 | #dt_example h2 { 67 | font-size: 1.2em; 68 | font-weight: normal; 69 | line-height: 1.6em; 70 | color: #4E6CA3; 71 | clear: both; 72 | } 73 | 74 | #dt_example a { 75 | color: #0063DC; 76 | text-decoration: none; 77 | } 78 | 79 | #dt_example a:hover { 80 | text-decoration: underline; 81 | } 82 | 83 | #dt_example ul { 84 | color: #4E6CA3; 85 | } 86 | 87 | .css_right { 88 | float: right; 89 | } 90 | 91 | .css_left { 92 | float: left; 93 | } 94 | 95 | .demo_links { 96 | float: left; 97 | width: 50%; 98 | margin-bottom: 1em; 99 | } 100 | 101 | #demo_info { 102 | padding: 5px; 103 | border: 1px solid #B0BED9; 104 | height: 100px; 105 | width: 100%; 106 | overflow: auto; 107 | } -------------------------------------------------------------------------------- /main.html: -------------------------------------------------------------------------------- 1 | 19 | 20 | 21 | 22 | 欢迎使用 23 | 53 | 54 | 55 |
56 |

57 | 58 |

59 |

60 |

取决于网速和歌曲数量,需要等待数秒的时间。
61 |
如果超过1分钟仍无结果,请联系汇报异常。
62 |

63 | 64 | 65 | -------------------------------------------------------------------------------- /thanks_page.html: -------------------------------------------------------------------------------- 1 | 19 | 20 | 21 | 22 | Thanks 23 | 40 | 41 | 42 |
43 | 感谢您安装豆瓣电台爬虫(加星歌曲列表导出)
44 |
45 | 使用过程中的任何问题,欢迎联系作者。
46 |
47 | qiwen@qiwen.name
48 |
49 | 50 |
51 |

52 | 源代码请见:Github。 53 |

54 | 55 |

56 | 感谢Report Bug和Pull Request的朋友们: 57 |

    58 |
  • 12 Oct 2013, anana#****.edu.cn
  • 59 |
  • 13 Sep 2015, WEN Pingbo (wengpingbo#*****.com)
  • 60 |
  • 13 Jun 2016, github.com/lihk11
  • 61 |
62 |

63 |
64 | 65 | -------------------------------------------------------------------------------- /js/utility.js: -------------------------------------------------------------------------------- 1 | /* 2 | utility js code 3 | 4 | Copyright (C) 2012 QI Wen 5 | 6 | This program is free software: you can redistribute it and/or modify 7 | it under the terms of the GNU General Public License as published by 8 | the Free Software Foundation, either version 3 of the License, or 9 | (at your option) any later version. 10 | 11 | This program is distributed in the hope that it will be useful, 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | GNU General Public License for more details. 15 | 16 | You should have received a copy of the GNU General Public License 17 | along with this program. If not, see . 18 | */ 19 | 20 | // select the content of specified element id 21 | function selectElementContents(id) { 22 | var el = document.getElementById(id); 23 | var body = document.body, range, sel; 24 | if (body.createTextRange) { 25 | range = body.createTextRange(); 26 | range.moveToElementText(el); 27 | range.select(); 28 | } else if (document.createRange && window.getSelection) { 29 | range = document.createRange(); 30 | range.selectNodeContents(el); 31 | sel = window.getSelection(); 32 | sel.removeAllRanges(); 33 | sel.addRange(range); 34 | } 35 | } 36 | 37 | // show or hide div 38 | function showDiv(div_name, show) { 39 | if (show) { 40 | document.getElementById(div_name).style.visibility="visible"; 41 | document.getElementById(div_name).style.display=""; 42 | } else { 43 | document.getElementById(div_name).style.visibility="hidden"; 44 | document.getElementById(div_name).style.display="none"; 45 | } 46 | } 47 | 48 | // UTF8.encode(s): Converts from ANSI to UTF-8 49 | // UTF8.decode(s): Converts from UTF-8 to ANSI 50 | UTF8 = { 51 | encode: function(s){ 52 | for(var c, i = -1, l = (s = s.split("")).length, o = String.fromCharCode; ++i < l; 53 | s[i] = (c = s[i].charCodeAt(0)) >= 127 ? o(0xc0 | (c >>> 6)) + o(0x80 | (c & 0x3f)) : s[i] 54 | ); 55 | return s.join(""); 56 | }, 57 | decode: function(s){ 58 | for(var a, b, i = -1, l = (s = s.split("")).length, o = String.fromCharCode, c = "charCodeAt"; ++i < l; 59 | ((a = s[i][c](0)) & 0x80) && 60 | (s[i] = (a & 0xfc) == 0xc0 && ((b = s[i + 1][c](0)) & 0xc0) == 0x80 ? 61 | o(((a & 0x03) << 6) + (b & 0x3f)) : o(128), s[++i] = "") 62 | ); 63 | return s.join(""); 64 | } 65 | }; 66 | -------------------------------------------------------------------------------- /js/douban.js: -------------------------------------------------------------------------------- 1 | /* 2 | used to get HTML code(music information) from douban.com, and send message to background.html 3 | 4 | Copyright (C) 2014 Wen Qi 5 | 6 | This program is free software: you can redistribute it and/or modify 7 | it under the terms of the GNU General Public License as published by 8 | the Free Software Foundation, either version 3 of the License, or 9 | (at your option) any later version. 10 | 11 | This program is distributed in the hope that it will be useful, 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | GNU General Public License for more details. 15 | 16 | You should have received a copy of the GNU General Public License 17 | along with this program. If not, see . 18 | */ 19 | 20 | function getElementsByClass(searchClass, domNode, tagName) { 21 | if (domNode == null) 22 | domNode = document; 23 | if (tagName == null) 24 | tagName = '*'; 25 | var el = new Array(); 26 | var tags = domNode.getElementsByTagName(tagName); 27 | var tcl = " " + searchClass + " "; 28 | for (i = 0, j = 0; i < tags.length; i++) { 29 | var test = " " + tags[i].className + " "; 30 | if (test.indexOf(tcl) != -1) 31 | el[j++] = tags[i]; 32 | } 33 | return el; 34 | } 35 | 36 | function getContentAndPost() { 37 | var record_viewer = document.getElementById("record_viewer"); 38 | if (!record_viewer) { 39 | alert("unexpected"); 40 | return; 41 | } 42 | 43 | var bottom_pager = document.getElementById("bottom_pager"); 44 | if (bottom_pager.innerText.length == 0) { 45 | setTimeout(getContentAndPost, 500); 46 | return; 47 | } 48 | 49 | var props = getElementsByClass("props", record_viewer); 50 | if (props.length == 0) { 51 | alert("empty list"); 52 | } 53 | 54 | var info = {}; 55 | 56 | var liked_or_banned = document.URL.match("liked"); 57 | if (liked_or_banned) liked_or_banned = true; 58 | 59 | var startFromStr = document.URL.match(/[0-9]+/); 60 | if (!startFromStr || startFromStr.length <= 0) { 61 | alert("unexpected"); 62 | return; 63 | } 64 | info.startFrom = new Number(startFromStr[0]); 65 | 66 | var target = liked_or_banned?"nav_liked":"nav_banned"; 67 | var totalStr = document.getElementsByClassName("total").item(0).innerText.trim(); 68 | if (totalStr && totalStr.length) { 69 | info.total = new Number(totalStr.substring(1, totalStr.length - 1)); 70 | } else { 71 | alert("unexpected"); 72 | return; 73 | } 74 | 75 | info.musics = []; 76 | for (var i = 0; i < props.length; ++i) { 77 | var prop = props[i]; 78 | var musicName = getElementsByClass("song_title", prop); 79 | var performer = getElementsByClass("performer", prop); 80 | var source = prop.getElementsByTagName("a"); 81 | var sourceURL = source[0].href; 82 | var sourceName = source[0].innerText; 83 | info.musics.push({ 84 | "musicName" : musicName[0].innerText, 85 | "sourceURL" : sourceURL, 86 | "sourceName" : sourceName, 87 | "performer" : performer[0].innerText 88 | }); 89 | } 90 | chrome.extension.connect().postMessage(info); 91 | } 92 | 93 | getContentAndPost(); 94 | -------------------------------------------------------------------------------- /js/FileSaver.min.js: -------------------------------------------------------------------------------- 1 | /*! @source http://purl.eligrey.com/github/FileSaver.js/blob/master/FileSaver.js */ 2 | var saveAs=saveAs||function(e){"use strict";if(typeof navigator!=="undefined"&&/MSIE [1-9]\./.test(navigator.userAgent)){return}var t=e.document,n=function(){return e.URL||e.webkitURL||e},r=t.createElementNS("http://www.w3.org/1999/xhtml","a"),i="download"in r,o=function(e){var t=new MouseEvent("click");e.dispatchEvent(t)},a=/Version\/[\d\.]+.*Safari/.test(navigator.userAgent),f=e.webkitRequestFileSystem,u=e.requestFileSystem||f||e.mozRequestFileSystem,s=function(t){(e.setImmediate||e.setTimeout)(function(){throw t},0)},c="application/octet-stream",d=0,l=1e3*40,w=function(e){var t=function(){if(typeof e==="string"){n().revokeObjectURL(e)}else{e.remove()}};setTimeout(t,l)},p=function(e,t,n){t=[].concat(t);var r=t.length;while(r--){var i=e["on"+t[r]];if(typeof i==="function"){try{i.call(e,n||e)}catch(o){s(o)}}}},v=function(e){if(/^\s*(?:text\/\S*|application\/xml|\S*\/\S*\+xml)\s*;.*charset\s*=\s*utf-8/i.test(e.type)){return new Blob(["",e],{type:e.type})}return e},y=function(t,s,l){if(!l){t=v(t)}var y=this,m=t.type,S=false,h,R,O=function(){p(y,"writestart progress write writeend".split(" "))},g=function(){if(R&&a&&typeof FileReader!=="undefined"){var r=new FileReader;r.onloadend=function(){var e=r.result;R.location.href="data:attachment/file"+e.slice(e.search(/[,;]/));y.readyState=y.DONE;O()};r.readAsDataURL(t);y.readyState=y.INIT;return}if(S||!h){h=n().createObjectURL(t)}if(R){R.location.href=h}else{var i=e.open(h,"_blank");if(i===undefined&&a){e.location.href=h}}y.readyState=y.DONE;O();w(h)},b=function(e){return function(){if(y.readyState!==y.DONE){return e.apply(this,arguments)}}},E={create:true,exclusive:false},N;y.readyState=y.INIT;if(!s){s="download"}if(i){h=n().createObjectURL(t);setTimeout(function(){r.href=h;r.download=s;o(r);O();w(h);y.readyState=y.DONE});return}if(e.chrome&&m&&m!==c){N=t.slice||t.webkitSlice;t=N.call(t,0,t.size,c);S=true}if(f&&s!=="download"){s+=".download"}if(m===c||f){R=e}if(!u){g();return}d+=t.size;u(e.TEMPORARY,d,b(function(e){e.root.getDirectory("saved",E,b(function(e){var n=function(){e.getFile(s,E,b(function(e){e.createWriter(b(function(n){n.onwriteend=function(t){R.location.href=e.toURL();y.readyState=y.DONE;p(y,"writeend",t);w(e)};n.onerror=function(){var e=n.error;if(e.code!==e.ABORT_ERR){g()}};"writestart progress write abort".split(" ").forEach(function(e){n["on"+e]=y["on"+e]});n.write(t);y.abort=function(){n.abort();y.readyState=y.DONE};y.readyState=y.WRITING}),g)}),g)};e.getFile(s,{create:false},b(function(e){e.remove();n()}),b(function(e){if(e.code===e.NOT_FOUND_ERR){n()}else{g()}}))}),g)}),g)},m=y.prototype,S=function(e,t,n){return new y(e,t,n)};if(typeof navigator!=="undefined"&&navigator.msSaveOrOpenBlob){return function(e,t,n){if(!n){e=v(e)}return navigator.msSaveOrOpenBlob(e,t||"download")}}m.abort=function(){var e=this;e.readyState=e.DONE;p(e,"abort")};m.readyState=m.INIT=0;m.WRITING=1;m.DONE=2;m.error=m.onwritestart=m.onprogress=m.onwrite=m.onabort=m.onerror=m.onwriteend=null;return S}(typeof self!=="undefined"&&self||typeof window!=="undefined"&&window||this.content);if(typeof module!=="undefined"&&module.exports){module.exports.saveAs=saveAs}else if(typeof define!=="undefined"&&define!==null&&define.amd!==null){define([],function(){return saveAs})} 3 | -------------------------------------------------------------------------------- /result.html: -------------------------------------------------------------------------------- 1 | 19 | 20 | 21 | 22 | 抓取结果 23 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 41 |
42 |
43 |
44 |

共找到首歌曲(点击歌名可直接试听/下载)

45 |
46 |

47 | 使用中遇到问题,欢迎 联系作者 寻求帮助 或者在 48 | Github上提交Bug。) 49 |

50 |

51 |
52 | 如果有帮到你,欢迎赞赏~ 53 |

54 | 55 |

56 | 57 | (可复制文件里所有的链接到迅雷里,下载所有的mp3后,用网易音乐匹配本地歌曲,并另存歌单,即可导入其他音乐平台。酷我列表已失效。具体操作请看这里。)
58 | 59 |

60 | 61 |

62 | 63 | (包含歌曲名、专辑名、歌手名,可按Tab分割的形式导出到Excel中) 64 |

65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 |
歌曲名专辑名歌手名
78 |
79 |
80 |

很遗憾,没有找到收藏的歌曲 :(

81 | 82 |

有如下的可能哦 :

83 | 84 |
1. 没登录豆瓣电台(请登录后重试)
85 |
86 | 87 |
2. 程序出错了。(欢迎 联系作者 寻求帮助),或者Github上提交Bug。
88 |
89 |
90 | 91 | -------------------------------------------------------------------------------- /js/result.js: -------------------------------------------------------------------------------- 1 | /* 2 | js code for result.html 3 | 4 | Copyright (C) 2013 QI Wen 5 | 6 | This program is free software: you can redistribute it and/or modify 7 | it under the terms of the GNU General Public License as published by 8 | the Free Software Foundation, either version 3 of the License, or 9 | (at your option) any later version. 10 | 11 | This program is distributed in the hope that it will be useful, 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | GNU General Public License for more details. 15 | 16 | You should have received a copy of the GNU General Public License 17 | along with this program. If not, see . 18 | */ 19 | 20 | function wrap_url_tag_to_str(str, url) { 21 | if (url == null || url == '#') { 22 | return str; 23 | } 24 | 25 | return '' + str + ''; 26 | } 27 | 28 | function getFullResult() { 29 | var musics = chrome.extension.getBackgroundPage().musics; 30 | var html = ''; 31 | 32 | for (var i = 0; i < musics.length; ++i) { 33 | html += ''; 34 | html += '' + wrap_url_tag_to_str(musics[i].musicName, musics[i].musicURL) + ''; 35 | html += '' + wrap_url_tag_to_str(musics[i].sourceName, musics[i].sourceURL) + ''; 36 | html += '' + wrap_url_tag_to_str(musics[i].performer, 'https://music.douban.com/search?q='+musics[i].performer) + ''; 37 | html += ''; 38 | } 39 | document.getElementById("table_result").innerHTML = html; 40 | } 41 | 42 | function onPageLoaded() { 43 | var musics = chrome.extension.getBackgroundPage().musics; 44 | 45 | if (musics.length == 0) { 46 | showDiv("succ", false); 47 | showDiv("fail", true); 48 | } 49 | else { 50 | document.getElementById("music_num").innerHTML = musics.length; 51 | showDiv("succ", true); 52 | showDiv("fail", false); 53 | } 54 | 55 | // show full result by default 56 | getFullResult(); 57 | 58 | $("#result").dataTable({ 59 | "bPaginate": false, 60 | "bAutoWidth": false, 61 | "bFilter": false, 62 | "bInfo": false, 63 | "aaSorting": [ 64 | [2, "asc"] 65 | ] 66 | }); 67 | } 68 | 69 | function fnShowHide() { 70 | /* Get the DataTables object again - this is not a recreation, just a get of the object */ 71 | var oTable = $("#result").dataTable(); 72 | 73 | if ($("#chooseCol").attr('value') == "仅歌曲名") { 74 | $("#chooseCol").attr('value', "所有内容"); 75 | } else { 76 | $("#chooseCol").attr('value', "仅歌曲名"); 77 | } 78 | oTable.fnSetColumnVis( 1, oTable.fnSettings().aoColumns[1].bVisible ? false : true ); 79 | oTable.fnSetColumnVis( 2, oTable.fnSettings().aoColumns[2].bVisible ? false : true ); 80 | } 81 | 82 | function popResult() { 83 | var musics = chrome.extension.getBackgroundPage().musics; 84 | var text = ''; 85 | 86 | for (var i = 0; i < musics.length; ++i) { 87 | text += musics[i].musicName+'\t'; 88 | text += musics[i].sourceName+'\t'; 89 | text += musics[i].performer+'\t'; 90 | text += '\n'; 91 | } 92 | var blob = new Blob([text], {type: "text/plain;charset=GBK"}); 93 | saveAs(blob, "MusicList.tsv"); 94 | } 95 | 96 | function exportMP3Links() { 97 | var musics = chrome.extension.getBackgroundPage().musics; 98 | var text = ''; 99 | 100 | for (var i = 0; i < musics.length; ++i) { 101 | text += musics[i].musicURL; 102 | text += '\n'; 103 | } 104 | var blob = new Blob([text], {type: "text/plain;charset=GBK"}); 105 | saveAs(blob, "DoubanMusicLinks.txt"); 106 | } 107 | 108 | function saveForWangYiYun() { 109 | var musics = chrome.extension.getBackgroundPage().musics; 110 | var text = '\n'; 111 | 112 | for (var i = 0; i < musics.length; ++i) { 113 | text += ' \n'; 118 | } 119 | text += ''; 120 | 121 | // 122 | var popup = window.open("", "newwin", "toolbar=no,scrollbars=yes,menubar=no"); 123 | popup.document.write(""); 124 | popup.document.write(""); 125 | popup.document.write("请复制<\/title>"); 126 | popup.document.write("<style type='text\/css' title='currentStyle'>@import \"css/main.css\";<\/style>"); 127 | popup.document.write("<script type='text\/javascript' language='javascript' src='js/utility.js'><\/script>"); 128 | popup.document.write("<\/head>"); 129 | popup.document.write("<body"); 130 | popup.document.write("<p>1. 复制下面的内容,保存为“酷我音乐列表文件”,文件名以.kwl结尾,例如“musicList.kwl”<\/p>"); 131 | popup.document.write("<p>** 注意:酷我音乐列表目前采用的是GB2322编码格式,Windows下采用“记事本”保存测试可以,其他平台注意转换编码<\/p>"); 132 | popup.document.write("<p>2. 在网易云音乐“导入歌单”界面,点选“导入酷我播放列表”,再选择刚刚保存的“musicList.kwl”<\/p>"); 133 | popup.document.write("<textarea id='music_data' style='width:100%; height:90%;'>" + text + "<\/textarea>"); 134 | popup.document.write("<\/body>"); 135 | popup.document.write("<\/html>"); 136 | popup.document.close(); 137 | 138 | // TODO: use blob to download the music file list. UTF-8 --> GB2322. Since kwl file is encoded with GB2322 139 | //var uint8array = new TextEncoder('utf-8').encode(text); 140 | //var string = UTF8.decode(); //new TextDecoder('GB2322').decode(uint8array); 141 | //var blob = new Blob([string], {type: "text/plain;charset=GB2322"}); 142 | //saveAs(blob, "2.kwl"); 143 | } 144 | 145 | document.addEventListener('DOMContentLoaded', function () { 146 | onPageLoaded(); 147 | document.querySelector('#chooseColBtn').addEventListener('click', fnShowHide); 148 | document.querySelector('#popResultBtn').addEventListener('click', popResult); 149 | document.querySelector('#exportMP3Links').addEventListener('click', exportMP3Links); 150 | document.querySelector('#forWangYiYunBtn').addEventListener('click', saveForWangYiYun); 151 | }); 152 | -------------------------------------------------------------------------------- /js/background.js: -------------------------------------------------------------------------------- 1 | /* 2 | used to control the main flow of parsing 3 | 4 | Copyright (C) 2014 QI Wen <qiwen@qiwen.name> 5 | 6 | This program is free software: you can redistribute it and/or modify 7 | it under the terms of the GNU General Public License as published by 8 | the Free Software Foundation, either version 3 of the License, or 9 | (at your option) any later version. 10 | 11 | This program is distributed in the hope that it will be useful, 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | GNU General Public License for more details. 15 | 16 | You should have received a copy of the GNU General Public License 17 | along with this program. If not, see <http://www.gnu.org/licenses/>. 18 | */ 19 | var liked_or_banned; 20 | 21 | // global array, stores the music list 22 | var musics; 23 | 24 | // maintains the status of music info requests 25 | var request_batch_total = 0; 26 | var request_batch_responded = 0; 27 | 28 | // _debug controls whether print log to console 29 | var _debug = false; 30 | 31 | // error strings 32 | var _err_str_no_nookie = "未检测到Cookie,是否未登录豆瓣电台? 请先登录"; 33 | 34 | function _debug_print(str, val) { 35 | if (_debug) { 36 | console.log(str + " = " + val + "\n"); 37 | } 38 | } 39 | 40 | function _error_pop(error) { 41 | chrome.extension.getBackgroundPage().alert(error); 42 | } 43 | 44 | function pageLoaded(tab) { 45 | chrome.tabs.executeScript(tab.id, {file : 'douban.js'}); 46 | } 47 | 48 | function messageListener(port) { 49 | var tab = port.sender.tab; 50 | 51 | port.onMessage.addListener(function (info) { 52 | for (var i = 0; i < info.musics.length; ++i) { 53 | musics[info.startFrom + i] = info.musics[i]; 54 | } 55 | 56 | var nextStartFrom; 57 | if (info.musics.length == 0) { 58 | musics[info.startFrom] = { 59 | "musicName" : "", 60 | "sourceURL" : "", 61 | "sourceName" : "", 62 | "performer" : "" 63 | }; 64 | nextStartFrom = info.startFrom + 1; 65 | } else { 66 | var residue = info.startFrom % 15; 67 | if (residue == 0) { 68 | nextStartFrom = info.startFrom + info.musics.length; 69 | } else { 70 | if (residue + info.musics.length <= 15) { 71 | nextStartFrom = info.startFrom + info.musics.length; 72 | } else { 73 | nextStartFrom = info.startFrom - residue + 15; 74 | } 75 | } 76 | } 77 | 78 | if (musics.length < info.total) { 79 | var url = "http://douban.fm/mine#!type="+(liked_or_banned?"liked":"banned")+"&start="+nextStartFrom; 80 | setTimeout(function(){ 81 | chrome.tabs.remove(tab.id); 82 | chrome.tabs.create({"url" : url}, pageLoaded); 83 | }, 5000); 84 | } else { 85 | chrome.tabs.remove(tab.id) 86 | chrome.tabs.create({"url" : "result.html"}); 87 | } 88 | }); 89 | } 90 | 91 | function checkFirstTime() { 92 | if (localStorage["_douban_music_parser_firstTime"] == undefined) { 93 | localStorage["_douban_music_parser_firstTime"] = ":]"; 94 | openOptions(true); 95 | } 96 | } 97 | 98 | function openOptions(firstTime) { 99 | var url = "thanks_page.html"; 100 | 101 | var fullUrl = chrome.extension.getURL(url); 102 | chrome.tabs.getAllInWindow(null, function (tabs) { 103 | for (var i in tabs) { // check if Options page is open already 104 | var tab = tabs[i]; 105 | if (tab.url == fullUrl) { 106 | chrome.tabs.update(tab.id, { 107 | selected : true 108 | }); // select the tab 109 | return; 110 | } 111 | } 112 | chrome.tabs.getSelected(null, function (tab) { 113 | chrome.tabs.create({url : url, index : tab.index + 1}); 114 | }); 115 | }); 116 | } 117 | 118 | function formatParams( params ){ 119 | return "?" + Object 120 | .keys(params) 121 | .map(function(key){ 122 | return key+"="+encodeURIComponent(params[key]) 123 | }) 124 | .join("&") 125 | } 126 | 127 | function parseSongs(json, round) { 128 | for (var i = 0; i < json.length; ++i) { 129 | musics.push({ 130 | "musicName" : json[i].title, 131 | "musicURL" : json[i].url, 132 | "sourceName" : json[i].albumtitle, 133 | "sourceURL" : json[i].release == null ? '#' : json[i].release.link, 134 | "performer" : json[i].artist, 135 | }); 136 | } 137 | 138 | ++request_batch_responded; 139 | _debug_print("round", round); 140 | _debug_print("request_batch_responded", request_batch_responded); 141 | 142 | if (request_batch_responded != request_batch_total) 143 | return; 144 | 145 | // all requests have been responded, pop the result page 146 | chrome.tabs.create({"url" : "result.html"}); 147 | } 148 | 149 | function getCookies(domain, name, callback) { 150 | chrome.cookies.get({"url": domain, "name": name}, function(cookie) { 151 | if(callback) { 152 | callback(domain, cookie != null ? cookie.value : null); 153 | } 154 | }); 155 | } 156 | 157 | function parseIDs(json, domain, ck_val) { 158 | musics = []; 159 | 160 | var song_request_batch = 100; 161 | for (var i = 0, round = 0; round < json.songs.length; round += song_request_batch) { 162 | request_batch_total++; 163 | } 164 | 165 | _debug_print("request_batch_total", request_batch_total); 166 | 167 | for (var round = 0; round < json.songs.length; round += song_request_batch) { 168 | 169 | let sids = []; 170 | for (let i = round; i < round + song_request_batch && i < json.songs.length; ++i) { 171 | sids.push(json.songs[i].sid); 172 | } 173 | 174 | let songs_params = { 175 | sids: sids.join('|'), 176 | kbps: 192, 177 | ck: ck_val 178 | }; 179 | 180 | // request songs 181 | let url = domain + "/j/v2/redheart/songs" + formatParams(songs_params); 182 | let xhr = new XMLHttpRequest(); 183 | xhr.open("GET", url, true); 184 | xhr.onreadystatechange = function() { 185 | if (xhr.readyState == 4 && xhr.status == 200) { 186 | let json = JSON.parse(xhr.responseText); 187 | parseSongs(json, round); 188 | } 189 | } 190 | xhr.send(); 191 | } 192 | } 193 | 194 | function detect_domain(callback) { 195 | var domain = "https://douban.fm"; 196 | getCookies(domain, "ck", function(domain, cookie_val) { 197 | if (cookie_val != null) { 198 | callback(domain, cookie_val); 199 | } else { 200 | // try another domain 201 | var domain = "https://fm.douban.com"; 202 | getCookies(domain, "ck", function(domain, cookie_val) { 203 | if (cookie_val != null) { 204 | callback(domain, cookie_val); 205 | } else { 206 | callback(null, null); 207 | } 208 | }); 209 | } 210 | }); 211 | } 212 | 213 | function start(like, ck_val) { 214 | musics = []; 215 | liked_or_banned = like; 216 | 217 | 218 | detect_domain(function (domain, ck_val) { 219 | if (domain == null || ck_val == null) { 220 | _error_pop(_err_str_no_nookie); 221 | return; 222 | } 223 | 224 | var url = domain + "/j/v2/redheart/basic"; 225 | var xhr = new XMLHttpRequest(); 226 | xhr.open("GET", url, true); 227 | xhr.onreadystatechange = function () { 228 | if (xhr.readyState == 4) { 229 | var json = JSON.parse(xhr.responseText); 230 | 231 | if (json == null == json.songs == null || json.songs.length == 0) { 232 | _error_pop(_err_str_no_nookie); 233 | return; 234 | } 235 | 236 | parseIDs(json, domain, ck_val); 237 | } 238 | } 239 | xhr.send(); 240 | }); 241 | } 242 | 243 | chrome.extension.onConnect.addListener(messageListener); 244 | 245 | checkFirstTime(); 246 | 247 | -------------------------------------------------------------------------------- /media/css/TableTools.css: -------------------------------------------------------------------------------- 1 | /* 2 | * File: TableTools.css 3 | * Description: Styles for TableTools 2 4 | * Author: Allan Jardine (www.sprymedia.co.uk) 5 | * Language: Javascript 6 | * License: GPL v2 / 3 point BSD 7 | * Project: DataTables 8 | * 9 | * Copyright 2009-2012 Allan Jardine, all rights reserved. 10 | * 11 | * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 12 | * 13 | * CSS name space: 14 | * DTTT DataTables TableTools 15 | * 16 | * Style sheet provides: 17 | * CONTAINER TableTools container element and styles applying to all components 18 | * BUTTON_STYLES Action specific button styles 19 | * SELECTING Row selection styles 20 | * COLLECTIONS Drop down list (collection) styles 21 | * PRINTING Print display styles 22 | */ 23 | 24 | 25 | /* 26 | * CONTAINER 27 | * TableTools container element and styles applying to all components 28 | */ 29 | div.DTTT_container { 30 | position: relative; 31 | float: right; 32 | margin-bottom: 1em; 33 | } 34 | 35 | button.DTTT_button, 36 | div.DTTT_button { 37 | position: relative; 38 | float: left; 39 | height: 30px; 40 | margin-right: 3px; 41 | padding: 3px 8px; 42 | border: 1px solid #999; 43 | cursor: pointer; 44 | *cursor: hand; 45 | 46 | -webkit-border-radius: 2px; 47 | -moz-border-radius: 2px; 48 | -ms-border-radius: 2px; 49 | -o-border-radius: 2px; 50 | border-radius: 2px; 51 | 52 | -webkit-box-shadow: 1px 1px 3px #ccc; 53 | -moz-box-shadow: 1px 1px 3px #ccc; 54 | -ms-box-shadow: 1px 1px 3px #ccc; 55 | -o-box-shadow: 1px 1px 3px #ccc; 56 | box-shadow: 1px 1px 3px #ccc; 57 | 58 | /* Generated by http://www.colorzilla.com/gradient-editor/ */ 59 | background: #ffffff; /* Old browsers */ 60 | background: -webkit-linear-gradient(top, #ffffff 0%,#f3f3f3 89%,#f9f9f9 100%); /* Chrome10+,Safari5.1+ */ 61 | background: -moz-linear-gradient(top, #ffffff 0%,#f3f3f3 89%,#f9f9f9 100%); /* FF3.6+ */ 62 | background: -ms-linear-gradient(top, #ffffff 0%,#f3f3f3 89%,#f9f9f9 100%); /* IE10+ */ 63 | background: -o-linear-gradient(top, #ffffff 0%,#f3f3f3 89%,#f9f9f9 100%); /* Opera 11.10+ */ 64 | background: linear-gradient(top, #ffffff 0%,#f3f3f3 89%,#f9f9f9 100%); /* W3C */ 65 | filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#ffffff', endColorstr='#f9f9f9',GradientType=0 ); /* IE6-9 */ 66 | } 67 | 68 | button.DTTT_button::-moz-focus-inner { 69 | border: none !important; 70 | padding: 0; 71 | } 72 | 73 | /* This would of course be better with :hover, but for Flash interaction... */ 74 | button.DTTT_button_hover, 75 | div.DTTT_button_hover { 76 | border: 1px solid #666; 77 | 78 | -webkit-box-shadow: 1px 1px 3px #999; 79 | -moz-box-shadow: 1px 1px 3px #999; 80 | -ms-box-shadow: 1px 1px 3px #999; 81 | -o-box-shadow: 1px 1px 3px #999; 82 | box-shadow: 1px 1px 3px #999; 83 | 84 | background: #f3f3f3; /* Old browsers */ 85 | background: -webkit-linear-gradient(top, #f3f3f3 0%,#e2e2e2 89%,#f4f4f4 100%); /* Chrome10+,Safari5.1+ */ 86 | background: -moz-linear-gradient(top, #f3f3f3 0%,#e2e2e2 89%,#f4f4f4 100%); /* FF3.6+ */ 87 | background: -ms-linear-gradient(top, #f3f3f3 0%,#e2e2e2 89%,#f4f4f4 100%); /* IE10+ */ 88 | background: -o-linear-gradient(top, #f3f3f3 0%,#e2e2e2 89%,#f4f4f4 100%); /* Opera 11.10+ */ 89 | background: linear-gradient(top, #f3f3f3 0%,#e2e2e2 89%,#f4f4f4 100%); /* W3C */ 90 | filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#f3f3f3', endColorstr='#f4f4f4',GradientType=0 ); /* IE6-9 */ 91 | } 92 | 93 | button.DTTT_disabled, 94 | div.DTTT_disabled { 95 | color: #999; 96 | border: 1px solid #d0d0d0; 97 | 98 | background: #ffffff; /* Old browsers */ 99 | background: -webkit-linear-gradient(top, #ffffff 0%,#f9f9f9 89%,#fafafa 100%); /* Chrome10+,Safari5.1+ */ 100 | background: -moz-linear-gradient(top, #ffffff 0%,#f9f9f9 89%,#fafafa 100%); /* FF3.6+ */ 101 | background: -ms-linear-gradient(top, #ffffff 0%,#f9f9f9 89%,#fafafa 100%); /* IE10+ */ 102 | background: -o-linear-gradient(top, #ffffff 0%,#f9f9f9 89%,#fafafa 100%); /* Opera 11.10+ */ 103 | background: linear-gradient(top, #ffffff 0%,#f9f9f9 89%,#fafafa 100%); /* W3C */ 104 | filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#ffffff', endColorstr='#fafafa',GradientType=0 ); /* IE6-9 */ 105 | } 106 | 107 | 108 | 109 | /* 110 | * BUTTON_STYLES 111 | * Action specific button styles 112 | * If you want images - comment this back in 113 | 114 | button.DTTT_button_csv, 115 | button.DTTT_button_xls, 116 | button.DTTT_button_copy, 117 | button.DTTT_button_pdf, 118 | button.DTTT_button_print { 119 | padding-right: 0px; 120 | } 121 | 122 | button.DTTT_button_csv span, 123 | button.DTTT_button_xls span, 124 | button.DTTT_button_copy span, 125 | button.DTTT_button_pdf span, 126 | button.DTTT_button_print span { 127 | display: inline-block; 128 | height: 24px; 129 | line-height: 24px; 130 | padding-right: 30px; 131 | } 132 | 133 | 134 | button.DTTT_button_csv span { background: url(../images/csv.png) no-repeat bottom right; } 135 | button.DTTT_button_csv_hover span { background: url(../images/csv_hover.png) no-repeat center right; } 136 | 137 | button.DTTT_button_xls span { background: url(../images/xls.png) no-repeat center right; } 138 | button.DTTT_button_xls_hover span { background: #f0f0f0 url(../images/xls_hover.png) no-repeat center right; } 139 | 140 | button.DTTT_button_copy span { background: url(../images/copy.png) no-repeat center right; } 141 | button.DTTT_button_copy_hover span { background: #f0f0f0 url(../images/copy_hover.png) no-repeat center right; } 142 | 143 | button.DTTT_button_pdf span { background: url(../images/pdf.png) no-repeat center right; } 144 | button.DTTT_button_pdf_hover span { background: #f0f0f0 url(../images/pdf_hover.png) no-repeat center right; } 145 | 146 | button.DTTT_button_print span { background: url(../images/print.png) no-repeat center right; } 147 | button.DTTT_button_print_hover span { background: #f0f0f0 url(../images/print_hover.png) no-repeat center right; } 148 | 149 | */ 150 | 151 | button.DTTT_button_collection span { 152 | padding-right: 17px; 153 | background: url(../images/collection.png) no-repeat center right; 154 | } 155 | 156 | button.DTTT_button_collection_hover span { 157 | padding-right: 17px; 158 | border: 1px solid #999; 159 | background: #f0f0f0 url(../images/collection_hover.png) no-repeat center right; 160 | } 161 | 162 | 163 | /* 164 | * SELECTING 165 | * Row selection styles 166 | */ 167 | table.DTTT_selectable tbody tr { 168 | cursor: pointer; 169 | *cursor: hand; 170 | } 171 | 172 | table.dataTable tr.DTTT_selected.odd { 173 | background-color: #9FAFD1; 174 | } 175 | 176 | table.dataTable tr.DTTT_selected.odd td.sorting_1 { 177 | background-color: #9FAFD1; 178 | } 179 | 180 | table.dataTable tr.DTTT_selected.odd td.sorting_2 { 181 | background-color: #9FAFD1; 182 | } 183 | 184 | table.dataTable tr.DTTT_selected.odd td.sorting_3 { 185 | background-color: #9FAFD1; 186 | } 187 | 188 | 189 | table.dataTable tr.DTTT_selected.even { 190 | background-color: #B0BED9; 191 | } 192 | 193 | table.dataTable tr.DTTT_selected.even td.sorting_1 { 194 | background-color: #B0BED9; 195 | } 196 | 197 | table.dataTable tr.DTTT_selected.even td.sorting_2 { 198 | background-color: #B0BED9; 199 | } 200 | 201 | table.dataTable tr.DTTT_selected.even td.sorting_3 { 202 | background-color: #B0BED9; 203 | } 204 | 205 | 206 | /* 207 | * COLLECTIONS 208 | * Drop down list (collection) styles 209 | */ 210 | 211 | div.DTTT_collection { 212 | width: 150px; 213 | padding: 3px; 214 | border: 1px solid #ccc; 215 | background-color: #f3f3f3; 216 | overflow: hidden; 217 | z-index: 2002; 218 | } 219 | 220 | div.DTTT_collection_background { 221 | background: transparent url(../images/background.png) repeat top left; 222 | z-index: 2001; 223 | } 224 | 225 | div.DTTT_collection button.DTTT_button { 226 | float: none; 227 | width: 100%; 228 | margin-bottom: 2px; 229 | background-color: white; 230 | } 231 | 232 | 233 | /* 234 | * PRINTING 235 | * Print display styles 236 | */ 237 | 238 | .DTTT_print_info { 239 | position: absolute; 240 | top: 50%; 241 | left: 50%; 242 | width: 400px; 243 | height: 150px; 244 | margin-left: -200px; 245 | margin-top: -75px; 246 | text-align: center; 247 | background-color: #3f3f3f; 248 | color: white; 249 | padding: 10px 30px; 250 | 251 | opacity: 0.9; 252 | 253 | -webkit-border-radius: 5px; 254 | -moz-border-radius: 5px; 255 | -ms-border-radius: 5px; 256 | -o-border-radius: 5px; 257 | border-radius: 5px; 258 | 259 | -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.5); 260 | -moz-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.5); 261 | -ms-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.5); 262 | -o-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.5); 263 | box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.5); 264 | } 265 | 266 | .DTTT_print_info h6 { 267 | font-weight: normal; 268 | font-size: 28px; 269 | line-height: 28px; 270 | margin: 1em; 271 | } 272 | 273 | .DTTT_print_info p { 274 | font-size: 14px; 275 | line-height: 20px; 276 | } 277 | 278 | -------------------------------------------------------------------------------- /media/css/demo_table.css: -------------------------------------------------------------------------------- 1 | /* 2 | * File: demo_table.css 3 | * CVS: $Id$ 4 | * Description: CSS descriptions for DataTables demo pages 5 | * Author: Allan Jardine 6 | * Created: Tue May 12 06:47:22 BST 2009 7 | * Modified: $Date$ by $Author$ 8 | * Language: CSS 9 | * Project: DataTables 10 | * 11 | * Copyright 2009 Allan Jardine. All Rights Reserved. 12 | * 13 | * *************************************************************************** 14 | * DESCRIPTION 15 | * 16 | * The styles given here are suitable for the demos that are used with the standard DataTables 17 | * distribution (see www.datatables.net). You will most likely wish to modify these styles to 18 | * meet the layout requirements of your site. 19 | * 20 | * Common issues: 21 | * 'full_numbers' pagination - I use an extra selector on the body tag to ensure that there is 22 | * no conflict between the two pagination types. If you want to use full_numbers pagination 23 | * ensure that you either have "example_alt_pagination" as a body class name, or better yet, 24 | * modify that selector. 25 | * Note that the path used for Images is relative. All images are by default located in 26 | * ../images/ - relative to this CSS file. 27 | */ 28 | 29 | /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 30 | * DataTables features 31 | */ 32 | 33 | .dataTables_wrapper { 34 | position: relative; 35 | clear: both; 36 | zoom: 1; /* Feeling sorry for IE */ 37 | } 38 | 39 | .dataTables_processing { 40 | position: absolute; 41 | top: 50%; 42 | left: 50%; 43 | width: 250px; 44 | height: 30px; 45 | margin-left: -125px; 46 | margin-top: -15px; 47 | padding: 14px 0 2px 0; 48 | border: 1px solid #ddd; 49 | text-align: center; 50 | color: #999; 51 | font-size: 14px; 52 | background-color: white; 53 | } 54 | 55 | .dataTables_length { 56 | width: 40%; 57 | float: left; 58 | } 59 | 60 | .dataTables_filter { 61 | width: 50%; 62 | float: right; 63 | text-align: right; 64 | } 65 | 66 | .dataTables_info { 67 | width: 60%; 68 | float: left; 69 | } 70 | 71 | .dataTables_paginate { 72 | float: right; 73 | text-align: right; 74 | } 75 | 76 | /* Pagination nested */ 77 | .paginate_disabled_previous, .paginate_enabled_previous, 78 | .paginate_disabled_next, .paginate_enabled_next { 79 | height: 19px; 80 | float: left; 81 | cursor: pointer; 82 | *cursor: hand; 83 | color: #111 !important; 84 | } 85 | .paginate_disabled_previous:hover, .paginate_enabled_previous:hover, 86 | .paginate_disabled_next:hover, .paginate_enabled_next:hover { 87 | text-decoration: none !important; 88 | } 89 | .paginate_disabled_previous:active, .paginate_enabled_previous:active, 90 | .paginate_disabled_next:active, .paginate_enabled_next:active { 91 | outline: none; 92 | } 93 | 94 | .paginate_disabled_previous, 95 | .paginate_disabled_next { 96 | color: #666 !important; 97 | } 98 | .paginate_disabled_previous, .paginate_enabled_previous { 99 | padding-left: 23px; 100 | } 101 | .paginate_disabled_next, .paginate_enabled_next { 102 | padding-right: 23px; 103 | margin-left: 10px; 104 | } 105 | 106 | .paginate_disabled_previous { 107 | background: url('../images/back_disabled.png') no-repeat top left; 108 | } 109 | 110 | .paginate_enabled_previous { 111 | background: url('../images/back_enabled.png') no-repeat top left; 112 | } 113 | .paginate_enabled_previous:hover { 114 | background: url('../images/back_enabled_hover.png') no-repeat top left; 115 | } 116 | 117 | .paginate_disabled_next { 118 | background: url('../images/forward_disabled.png') no-repeat top right; 119 | } 120 | 121 | .paginate_enabled_next { 122 | background: url('../images/forward_enabled.png') no-repeat top right; 123 | } 124 | .paginate_enabled_next:hover { 125 | background: url('../images/forward_enabled_hover.png') no-repeat top right; 126 | } 127 | 128 | 129 | 130 | /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 131 | * DataTables display 132 | */ 133 | table.display { 134 | margin: 0 auto; 135 | clear: both; 136 | width: 100%; 137 | 138 | /* Note Firefox 3.5 and before have a bug with border-collapse 139 | * ( https://bugzilla.mozilla.org/show%5Fbug.cgi?id=155955 ) 140 | * border-spacing: 0; is one possible option. Conditional-css.com is 141 | * useful for this kind of thing 142 | * 143 | * Further note IE 6/7 has problems when calculating widths with border width. 144 | * It subtracts one px relative to the other browsers from the first column, and 145 | * adds one to the end... 146 | * 147 | * If you want that effect I'd suggest setting a border-top/left on th/td's and 148 | * then filling in the gaps with other borders. 149 | */ 150 | } 151 | 152 | table.display thead th { 153 | padding: 3px 18px 3px 10px; 154 | border-bottom: 1px solid black; 155 | font-weight: bold; 156 | cursor: pointer; 157 | * cursor: hand; 158 | } 159 | 160 | table.display tfoot th { 161 | padding: 3px 18px 3px 10px; 162 | border-top: 1px solid black; 163 | font-weight: bold; 164 | } 165 | 166 | table.display tr.heading2 td { 167 | border-bottom: 1px solid #aaa; 168 | } 169 | 170 | table.display td { 171 | padding: 3px 10px; 172 | } 173 | 174 | table.display td.center { 175 | text-align: center; 176 | } 177 | 178 | 179 | 180 | /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 181 | * DataTables sorting 182 | */ 183 | 184 | .sorting_asc { 185 | background: url('../images/sort_asc.png') no-repeat center right; 186 | } 187 | 188 | .sorting_desc { 189 | background: url('../images/sort_desc.png') no-repeat center right; 190 | } 191 | 192 | .sorting { 193 | background: url('../images/sort_both.png') no-repeat center right; 194 | } 195 | 196 | .sorting_asc_disabled { 197 | background: url('../images/sort_asc_disabled.png') no-repeat center right; 198 | } 199 | 200 | .sorting_desc_disabled { 201 | background: url('../images/sort_desc_disabled.png') no-repeat center right; 202 | } 203 | 204 | th:active { 205 | outline: none; 206 | } 207 | 208 | 209 | 210 | 211 | /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 212 | * DataTables row classes 213 | */ 214 | table.display tr.odd.gradeA { 215 | background-color: #ddffdd; 216 | } 217 | 218 | table.display tr.even.gradeA { 219 | background-color: #eeffee; 220 | } 221 | 222 | table.display tr.odd.gradeC { 223 | background-color: #ddddff; 224 | } 225 | 226 | table.display tr.even.gradeC { 227 | background-color: #eeeeff; 228 | } 229 | 230 | table.display tr.odd.gradeX { 231 | background-color: #ffdddd; 232 | } 233 | 234 | table.display tr.even.gradeX { 235 | background-color: #ffeeee; 236 | } 237 | 238 | table.display tr.odd.gradeU { 239 | background-color: #ddd; 240 | } 241 | 242 | table.display tr.even.gradeU { 243 | background-color: #eee; 244 | } 245 | 246 | 247 | tr.odd { 248 | background-color: #E2E4FF; 249 | } 250 | 251 | tr.even { 252 | background-color: white; 253 | } 254 | 255 | 256 | 257 | 258 | 259 | /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 260 | * Misc 261 | */ 262 | .dataTables_scroll { 263 | clear: both; 264 | } 265 | 266 | .dataTables_scrollBody { 267 | *margin-top: -1px; 268 | -webkit-overflow-scrolling: touch; 269 | } 270 | 271 | .top, .bottom { 272 | padding: 15px; 273 | background-color: #F5F5F5; 274 | border: 1px solid #CCCCCC; 275 | } 276 | 277 | .top .dataTables_info { 278 | float: none; 279 | } 280 | 281 | .clear { 282 | clear: both; 283 | } 284 | 285 | .dataTables_empty { 286 | text-align: center; 287 | } 288 | 289 | tfoot input { 290 | margin: 0.5em 0; 291 | width: 100%; 292 | color: #444; 293 | } 294 | 295 | tfoot input.search_init { 296 | color: #999; 297 | } 298 | 299 | td.group { 300 | background-color: #d1cfd0; 301 | border-bottom: 2px solid #A19B9E; 302 | border-top: 2px solid #A19B9E; 303 | } 304 | 305 | td.details { 306 | background-color: #d1cfd0; 307 | border: 2px solid #A19B9E; 308 | } 309 | 310 | 311 | .example_alt_pagination div.dataTables_info { 312 | width: 40%; 313 | } 314 | 315 | .paging_full_numbers { 316 | width: 400px; 317 | height: 22px; 318 | line-height: 22px; 319 | } 320 | 321 | .paging_full_numbers a:active { 322 | outline: none 323 | } 324 | 325 | .paging_full_numbers a:hover { 326 | text-decoration: none; 327 | } 328 | 329 | .paging_full_numbers a.paginate_button, 330 | .paging_full_numbers a.paginate_active { 331 | border: 1px solid #aaa; 332 | -webkit-border-radius: 5px; 333 | -moz-border-radius: 5px; 334 | padding: 2px 5px; 335 | margin: 0 3px; 336 | cursor: pointer; 337 | *cursor: hand; 338 | color: #333 !important; 339 | } 340 | 341 | .paging_full_numbers a.paginate_button { 342 | background-color: #ddd; 343 | } 344 | 345 | .paging_full_numbers a.paginate_button:hover { 346 | background-color: #ccc; 347 | text-decoration: none !important; 348 | } 349 | 350 | .paging_full_numbers a.paginate_active { 351 | background-color: #99B3FF; 352 | } 353 | 354 | table.display tr.even.row_selected td { 355 | background-color: #B0BED9; 356 | } 357 | 358 | table.display tr.odd.row_selected td { 359 | background-color: #9FAFD1; 360 | } 361 | 362 | 363 | /* 364 | * Sorting classes for columns 365 | */ 366 | /* For the standard odd/even */ 367 | tr.odd td.sorting_1 { 368 | background-color: #D3D6FF; 369 | } 370 | 371 | tr.odd td.sorting_2 { 372 | background-color: #DADCFF; 373 | } 374 | 375 | tr.odd td.sorting_3 { 376 | background-color: #E0E2FF; 377 | } 378 | 379 | tr.even td.sorting_1 { 380 | background-color: #EAEBFF; 381 | } 382 | 383 | tr.even td.sorting_2 { 384 | background-color: #F2F3FF; 385 | } 386 | 387 | tr.even td.sorting_3 { 388 | background-color: #F9F9FF; 389 | } 390 | 391 | 392 | /* For the Conditional-CSS grading rows */ 393 | /* 394 | Colour calculations (based off the main row colours) 395 | Level 1: 396 | dd > c4 397 | ee > d5 398 | Level 2: 399 | dd > d1 400 | ee > e2 401 | */ 402 | tr.odd.gradeA td.sorting_1 { 403 | background-color: #c4ffc4; 404 | } 405 | 406 | tr.odd.gradeA td.sorting_2 { 407 | background-color: #d1ffd1; 408 | } 409 | 410 | tr.odd.gradeA td.sorting_3 { 411 | background-color: #d1ffd1; 412 | } 413 | 414 | tr.even.gradeA td.sorting_1 { 415 | background-color: #d5ffd5; 416 | } 417 | 418 | tr.even.gradeA td.sorting_2 { 419 | background-color: #e2ffe2; 420 | } 421 | 422 | tr.even.gradeA td.sorting_3 { 423 | background-color: #e2ffe2; 424 | } 425 | 426 | tr.odd.gradeC td.sorting_1 { 427 | background-color: #c4c4ff; 428 | } 429 | 430 | tr.odd.gradeC td.sorting_2 { 431 | background-color: #d1d1ff; 432 | } 433 | 434 | tr.odd.gradeC td.sorting_3 { 435 | background-color: #d1d1ff; 436 | } 437 | 438 | tr.even.gradeC td.sorting_1 { 439 | background-color: #d5d5ff; 440 | } 441 | 442 | tr.even.gradeC td.sorting_2 { 443 | background-color: #e2e2ff; 444 | } 445 | 446 | tr.even.gradeC td.sorting_3 { 447 | background-color: #e2e2ff; 448 | } 449 | 450 | tr.odd.gradeX td.sorting_1 { 451 | background-color: #ffc4c4; 452 | } 453 | 454 | tr.odd.gradeX td.sorting_2 { 455 | background-color: #ffd1d1; 456 | } 457 | 458 | tr.odd.gradeX td.sorting_3 { 459 | background-color: #ffd1d1; 460 | } 461 | 462 | tr.even.gradeX td.sorting_1 { 463 | background-color: #ffd5d5; 464 | } 465 | 466 | tr.even.gradeX td.sorting_2 { 467 | background-color: #ffe2e2; 468 | } 469 | 470 | tr.even.gradeX td.sorting_3 { 471 | background-color: #ffe2e2; 472 | } 473 | 474 | tr.odd.gradeU td.sorting_1 { 475 | background-color: #c4c4c4; 476 | } 477 | 478 | tr.odd.gradeU td.sorting_2 { 479 | background-color: #d1d1d1; 480 | } 481 | 482 | tr.odd.gradeU td.sorting_3 { 483 | background-color: #d1d1d1; 484 | } 485 | 486 | tr.even.gradeU td.sorting_1 { 487 | background-color: #d5d5d5; 488 | } 489 | 490 | tr.even.gradeU td.sorting_2 { 491 | background-color: #e2e2e2; 492 | } 493 | 494 | tr.even.gradeU td.sorting_3 { 495 | background-color: #e2e2e2; 496 | } 497 | 498 | 499 | /* 500 | * Row highlighting example 501 | */ 502 | .ex_highlight #example tbody tr.even:hover, #example tbody tr.even td.highlighted { 503 | background-color: #ECFFB3; 504 | } 505 | 506 | .ex_highlight #example tbody tr.odd:hover, #example tbody tr.odd td.highlighted { 507 | background-color: #E6FF99; 508 | } 509 | 510 | .ex_highlight_row #example tr.even:hover { 511 | background-color: #ECFFB3; 512 | } 513 | 514 | .ex_highlight_row #example tr.even:hover td.sorting_1 { 515 | background-color: #DDFF75; 516 | } 517 | 518 | .ex_highlight_row #example tr.even:hover td.sorting_2 { 519 | background-color: #E7FF9E; 520 | } 521 | 522 | .ex_highlight_row #example tr.even:hover td.sorting_3 { 523 | background-color: #E2FF89; 524 | } 525 | 526 | .ex_highlight_row #example tr.odd:hover { 527 | background-color: #E6FF99; 528 | } 529 | 530 | .ex_highlight_row #example tr.odd:hover td.sorting_1 { 531 | background-color: #D6FF5C; 532 | } 533 | 534 | .ex_highlight_row #example tr.odd:hover td.sorting_2 { 535 | background-color: #E0FF84; 536 | } 537 | 538 | .ex_highlight_row #example tr.odd:hover td.sorting_3 { 539 | background-color: #DBFF70; 540 | } 541 | 542 | 543 | /* 544 | * KeyTable 545 | */ 546 | table.KeyTable td { 547 | border: 3px solid transparent; 548 | } 549 | 550 | table.KeyTable td.focus { 551 | border: 3px solid #3366FF; 552 | } 553 | 554 | table.display tr.gradeA { 555 | background-color: #eeffee; 556 | } 557 | 558 | table.display tr.gradeC { 559 | background-color: #ddddff; 560 | } 561 | 562 | table.display tr.gradeX { 563 | background-color: #ffdddd; 564 | } 565 | 566 | table.display tr.gradeU { 567 | background-color: #ddd; 568 | } 569 | 570 | div.box { 571 | height: 100px; 572 | padding: 10px; 573 | overflow: auto; 574 | border: 1px solid #8080FF; 575 | background-color: #E5E5FF; 576 | } 577 | -------------------------------------------------------------------------------- /media/js/TableTools.min.js: -------------------------------------------------------------------------------- 1 | // Simple Set Clipboard System 2 | // Author: Joseph Huckaby 3 | var ZeroClipboard_TableTools={version:"1.0.4-TableTools2",clients:{},moviePath:"",nextId:1,$:function(a){"string"==typeof a&&(a=document.getElementById(a));if(!a.addClass)a.hide=function(){this.style.display="none"},a.show=function(){this.style.display=""},a.addClass=function(a){this.removeClass(a);this.className+=" "+a},a.removeClass=function(a){this.className=this.className.replace(RegExp("\\s*"+a+"\\s*")," ").replace(/^\s+/,"").replace(/\s+$/,"")},a.hasClass=function(a){return!!this.className.match(RegExp("\\s*"+ 4 | a+"\\s*"))};return a},setMoviePath:function(a){this.moviePath=a},dispatch:function(a,b,c){(a=this.clients[a])&&a.receiveEvent(b,c)},register:function(a,b){this.clients[a]=b},getDOMObjectPosition:function(a){var b={left:0,top:0,width:a.width?a.width:a.offsetWidth,height:a.height?a.height:a.offsetHeight};if(""!=a.style.width)b.width=a.style.width.replace("px","");if(""!=a.style.height)b.height=a.style.height.replace("px","");for(;a;)b.left+=a.offsetLeft,b.top+=a.offsetTop,a=a.offsetParent;return b}, 5 | Client:function(a){this.handlers={};this.id=ZeroClipboard_TableTools.nextId++;this.movieId="ZeroClipboard_TableToolsMovie_"+this.id;ZeroClipboard_TableTools.register(this.id,this);a&&this.glue(a)}}; 6 | ZeroClipboard_TableTools.Client.prototype={id:0,ready:!1,movie:null,clipText:"",fileName:"",action:"copy",handCursorEnabled:!0,cssEffects:!0,handlers:null,sized:!1,glue:function(a,b){this.domElement=ZeroClipboard_TableTools.$(a);var c=99;this.domElement.style.zIndex&&(c=parseInt(this.domElement.style.zIndex)+1);var d=ZeroClipboard_TableTools.getDOMObjectPosition(this.domElement);this.div=document.createElement("div");var e=this.div.style;e.position="absolute";e.left=this.domElement.offsetLeft+"px"; 7 | e.top=this.domElement.offsetTop+"px";e.width=d.width+"px";e.height=d.height+"px";e.zIndex=c;if("undefined"!=typeof b&&""!=b)this.div.title=b;if(0!=d.width&&0!=d.height)this.sized=!0;if(this.domElement.parentNode)this.domElement.parentNode.appendChild(this.div),this.div.innerHTML=this.getHTML(d.width,d.height)},positionElement:function(){var a=ZeroClipboard_TableTools.getDOMObjectPosition(this.domElement),b=this.div.style;b.position="absolute";b.left=this.domElement.offsetLeft+"px";b.top=this.domElement.offsetTop+ 8 | "px";b.width=a.width+"px";b.height=a.height+"px";if(0!=a.width&&0!=a.height)this.sized=!0,b=this.div.childNodes[0],b.width=a.width,b.height=a.height},getHTML:function(a,b){var c="",d="id="+this.id+"&width="+a+"&height="+b;if(navigator.userAgent.match(/MSIE/))var e=location.href.match(/^https/i)?"https://":"http://",c=c+('<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="'+e+'download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=10,0,0,0" width="'+a+'" height="'+ 9 | b+'" id="'+this.movieId+'" align="middle"><param name="allowScriptAccess" value="always" /><param name="allowFullScreen" value="false" /><param name="movie" value="'+ZeroClipboard_TableTools.moviePath+'" /><param name="loop" value="false" /><param name="menu" value="false" /><param name="quality" value="best" /><param name="bgcolor" value="#ffffff" /><param name="flashvars" value="'+d+'"/><param name="wmode" value="transparent"/></object>');else c+='<embed id="'+this.movieId+'" src="'+ZeroClipboard_TableTools.moviePath+ 10 | '" loop="false" menu="false" quality="best" bgcolor="#ffffff" width="'+a+'" height="'+b+'" name="'+this.movieId+'" align="middle" allowScriptAccess="always" allowFullScreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="'+d+'" wmode="transparent" />';return c},hide:function(){if(this.div)this.div.style.left="-2000px"},show:function(){this.reposition()},destroy:function(){if(this.domElement&&this.div){this.hide();this.div.innerHTML= 11 | "";var a=document.getElementsByTagName("body")[0];try{a.removeChild(this.div)}catch(b){}this.div=this.domElement=null}},reposition:function(a){if(a)(this.domElement=ZeroClipboard_TableTools.$(a))||this.hide();if(this.domElement&&this.div){var a=ZeroClipboard_TableTools.getDOMObjectPosition(this.domElement),b=this.div.style;b.left=""+a.left+"px";b.top=""+a.top+"px"}},clearText:function(){this.clipText="";this.ready&&this.movie.clearText()},appendText:function(a){this.clipText+=a;this.ready&&this.movie.appendText(a)}, 12 | setText:function(a){this.clipText=a;this.ready&&this.movie.setText(a)},setCharSet:function(a){this.charSet=a;this.ready&&this.movie.setCharSet(a)},setBomInc:function(a){this.incBom=a;this.ready&&this.movie.setBomInc(a)},setFileName:function(a){this.fileName=a;this.ready&&this.movie.setFileName(a)},setAction:function(a){this.action=a;this.ready&&this.movie.setAction(a)},addEventListener:function(a,b){a=a.toString().toLowerCase().replace(/^on/,"");this.handlers[a]||(this.handlers[a]=[]);this.handlers[a].push(b)}, 13 | setHandCursor:function(a){this.handCursorEnabled=a;this.ready&&this.movie.setHandCursor(a)},setCSSEffects:function(a){this.cssEffects=!!a},receiveEvent:function(a,b){a=a.toString().toLowerCase().replace(/^on/,"");switch(a){case "load":this.movie=document.getElementById(this.movieId);if(!this.movie){var c=this;setTimeout(function(){c.receiveEvent("load",null)},1);return}if(!this.ready&&navigator.userAgent.match(/Firefox/)&&navigator.userAgent.match(/Windows/)){c=this;setTimeout(function(){c.receiveEvent("load", 14 | null)},100);this.ready=!0;return}this.ready=!0;this.movie.clearText();this.movie.appendText(this.clipText);this.movie.setFileName(this.fileName);this.movie.setAction(this.action);this.movie.setCharSet(this.charSet);this.movie.setBomInc(this.incBom);this.movie.setHandCursor(this.handCursorEnabled);break;case "mouseover":this.domElement&&this.cssEffects&&this.recoverActive&&this.domElement.addClass("active");break;case "mouseout":if(this.domElement&&this.cssEffects&&(this.recoverActive=!1,this.domElement.hasClass("active")))this.domElement.removeClass("active"), 15 | this.recoverActive=!0;break;case "mousedown":this.domElement&&this.cssEffects&&this.domElement.addClass("active");break;case "mouseup":if(this.domElement&&this.cssEffects)this.domElement.removeClass("active"),this.recoverActive=!1}if(this.handlers[a])for(var d=0,e=this.handlers[a].length;d<e;d++){var f=this.handlers[a][d];if("function"==typeof f)f(this,b);else if("object"==typeof f&&2==f.length)f[0][f[1]](this,b);else if("string"==typeof f)window[f](this,b)}}}; 16 | 17 | 18 | /* 19 | * File: TableTools.min.js 20 | * Version: 2.0.3 21 | * Author: Allan Jardine (www.sprymedia.co.uk) 22 | * 23 | * Copyright 2009-2011 Allan Jardine, all rights reserved. 24 | * 25 | * This source file is free software, under either the GPL v2 license or a 26 | * BSD (3 point) style license, as supplied with this software. 27 | * 28 | * This source file is distributed in the hope that it will be useful, but 29 | * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY 30 | * or FITNESS FOR A PARTICULAR PURPOSE. See the license files for details. 31 | */ 32 | var TableTools; 33 | (function(e,m,f){TableTools=function(a,b){(!this.CLASS||"TableTools"!=this.CLASS)&&alert("Warning: TableTools must be initialised with the keyword 'new'");this.s={that:this,dt:null,print:{saveStart:-1,saveLength:-1,saveScroll:-1,funcEnd:function(){}},buttonCounter:0,select:{type:"",selected:[],preRowSelect:null,postSelected:null,postDeselected:null,all:!1,selectedClass:""},custom:{},swfPath:"",buttonSet:[],master:!1};this.dom={container:null,table:null,print:{hidden:[],message:null},collection:{collection:null, 34 | background:null}};this.fnSettings=function(){return this.s};"undefined"==typeof b&&(b={});this.s.dt=a.fnSettings();this._fnConstruct(b);return this};TableTools.prototype={fnGetSelected:function(){return this._fnGetMasterSettings().select.selected},fnGetSelectedData:function(){for(var a=this._fnGetMasterSettings().select.selected,b=[],c=0,d=a.length;c<d;c++)b.push(this.s.dt.oInstance.fnGetData(a[c]));return b},fnIsSelected:function(a){for(var b=this.fnGetSelected(),c=0,d=b.length;c<d;c++)if(a==b[c])return!0; 35 | return!1},fnSelectAll:function(){this._fnGetMasterSettings().that._fnRowSelectAll()},fnSelectNone:function(){this._fnGetMasterSettings().that._fnRowDeselectAll()},fnSelect:function(a){this.fnIsSelected(a)||("single"==this.s.select.type?this._fnRowSelectSingle(a):"multi"==this.s.select.type&&this._fnRowSelectMulti(a))},fnDeselect:function(a){this.fnIsSelected(a)&&("single"==this.s.select.type?this._fnRowSelectSingle(a):"multi"==this.s.select.type&&this._fnRowSelectMulti(a))},fnGetTitle:function(a){var b= 36 | "";if("undefined"!=typeof a.sTitle&&""!==a.sTitle)b=a.sTitle;else if(a=f.getElementsByTagName("title"),0<a.length)b=a[0].innerHTML;return 4>"\u00a1".toString().length?b.replace(/[^a-zA-Z0-9_\u00A1-\uFFFF\.,\-_ !\(\)]/g,""):b.replace(/[^a-zA-Z0-9_\.,\-_ !\(\)]/g,"")},fnCalcColRatios:function(a){var b=this.s.dt.aoColumns,a=this._fnColumnTargets(a.mColumns),c=[],d=0,e=0,g,f;for(g=0,f=a.length;g<f;g++)if(a[g])d=b[g].nTh.offsetWidth,e+=d,c.push(d);for(g=0,f=c.length;g<f;g++)c[g]/=e;return c.join("\t")}, 37 | fnGetTableData:function(a){if(this.s.dt)return this._fnGetDataTablesData(a)},fnSetText:function(a,b){this._fnFlashSetText(a,b)},fnResizeButtons:function(){for(var a in ZeroClipboard_TableTools.clients)if(a){var b=ZeroClipboard_TableTools.clients[a];"undefined"!=typeof b.domElement&&b.domElement.parentNode==this.dom.container&&b.positionElement()}},fnResizeRequired:function(){for(var a in ZeroClipboard_TableTools.clients)if(a){var b=ZeroClipboard_TableTools.clients[a];if("undefined"!=typeof b.domElement&& 38 | b.domElement.parentNode==this.dom.container&&!1===b.sized)return!0}return!1},_fnConstruct:function(a){var b=this;this._fnCustomiseSettings(a);this.dom.container=f.createElement("div");this.dom.container.className=!this.s.dt.bJUI?"DTTT_container":"DTTT_container ui-buttonset ui-buttonset-multi";"none"!=this.s.select.type&&this._fnRowSelectConfig();this._fnButtonDefinations(this.s.buttonSet,this.dom.container);this.s.dt.aoDestroyCallback.push({sName:"TableTools",fn:function(){b.dom.container.innerHTML= 39 | ""}})},_fnCustomiseSettings:function(a){if("undefined"==typeof this.s.dt._TableToolsInit)this.s.master=!0,this.s.dt._TableToolsInit=!0;this.dom.table=this.s.dt.nTable;this.s.custom=e.extend({},TableTools.DEFAULTS,a);this.s.swfPath=this.s.custom.sSwfPath;if("undefined"!=typeof ZeroClipboard_TableTools)ZeroClipboard_TableTools.moviePath=this.s.swfPath;this.s.select.type=this.s.custom.sRowSelect;this.s.select.preRowSelect=this.s.custom.fnPreRowSelect;this.s.select.postSelected=this.s.custom.fnRowSelected; 40 | this.s.select.postDeselected=this.s.custom.fnRowDeselected;this.s.select.selectedClass=this.s.custom.sSelectedClass;this.s.buttonSet=this.s.custom.aButtons},_fnButtonDefinations:function(a,b){for(var c,d=0,j=a.length;d<j;d++){if("string"==typeof a[d]){if("undefined"==typeof TableTools.BUTTONS[a[d]]){alert("TableTools: Warning - unknown button type: "+a[d]);continue}c=e.extend({},TableTools.BUTTONS[a[d]],!0)}else{if("undefined"==typeof TableTools.BUTTONS[a[d].sExtends]){alert("TableTools: Warning - unknown button type: "+ 41 | a[d].sExtends);continue}c=e.extend({},TableTools.BUTTONS[a[d].sExtends],!0);c=e.extend(c,a[d],!0)}this.s.dt.bJUI?(c.sButtonClass+=" ui-button ui-state-default",c.sButtonClassHover+=" ui-state-hover"):c.sButtonClassHover+=" DTTT_button_hover";b.appendChild(this._fnCreateButton(c))}},_fnCreateButton:function(a){var b="div"==a.sAction?this._fnDivBase(a):this._fnButtonBase(a);"print"==a.sAction?this._fnPrintConfig(b,a):a.sAction.match(/flash/)?this._fnFlashConfig(b,a):"text"==a.sAction?this._fnTextConfig(b, 42 | a):"div"==a.sAction?this._fnTextConfig(b,a):"collection"==a.sAction&&(this._fnTextConfig(b,a),this._fnCollectionConfig(b,a));return b},_fnButtonBase:function(a){var b=f.createElement("button"),c=f.createElement("span"),d=this._fnGetMasterSettings();b.className="DTTT_button "+a.sButtonClass;b.setAttribute("id","ToolTables_"+this.s.dt.sInstance+"_"+d.buttonCounter);b.appendChild(c);c.innerHTML=a.sButtonText;d.buttonCounter++;return b},_fnDivBase:function(a){var b=f.createElement("div"),c=this._fnGetMasterSettings(); 43 | b.className=a.sButtonClass;b.setAttribute("id","ToolTables_"+this.s.dt.sInstance+"_"+c.buttonCounter);b.innerHTML=a.sButtonText;null!==a.nContent&&b.appendChild(a.nContent);c.buttonCounter++;return b},_fnGetMasterSettings:function(){if(this.s.master)return this.s;for(var a=TableTools._aInstances,b=0,c=a.length;b<c;b++)if(this.dom.table==a[b].s.dt.nTable)return a[b].s},_fnCollectionConfig:function(a,b){var c=f.createElement("div");c.style.display="none";c.className=!this.s.dt.bJUI?"DTTT_collection": 44 | "DTTT_collection ui-buttonset ui-buttonset-multi";b._collection=c;f.body.appendChild(c);this._fnButtonDefinations(b.aButtons,c)},_fnCollectionShow:function(a,b){var c=this,d=e(a).offset(),j=b._collection,g=d.left,d=d.top+e(a).outerHeight(),o=e(m).height(),h=e(f).height(),k=e(m).width(),n=e(f).width();j.style.position="absolute";j.style.left=g+"px";j.style.top=d+"px";j.style.display="block";e(j).css("opacity",0);var l=f.createElement("div");l.style.position="absolute";l.style.left="0px";l.style.top= 45 | "0px";l.style.height=(o>h?o:h)+"px";l.style.width=(k>n?k:n)+"px";l.className="DTTT_collection_background";e(l).css("opacity",0);f.body.appendChild(l);f.body.appendChild(j);o=e(j).outerWidth();k=e(j).outerHeight();if(g+o>n)j.style.left=n-o+"px";if(d+k>h)j.style.top=d-k-e(a).outerHeight()+"px";this.dom.collection.collection=j;this.dom.collection.background=l;setTimeout(function(){e(j).animate({opacity:1},500);e(l).animate({opacity:0.25},500)},10);e(l).click(function(){c._fnCollectionHide.call(c,null, 46 | null)})},_fnCollectionHide:function(a,b){if(!(null!==b&&"collection"==b.sExtends)&&null!==this.dom.collection.collection)e(this.dom.collection.collection).animate({opacity:0},500,function(){this.style.display="none"}),e(this.dom.collection.background).animate({opacity:0},500,function(){this.parentNode.removeChild(this)}),this.dom.collection.collection=null,this.dom.collection.background=null},_fnRowSelectConfig:function(){if(this.s.master){var a=this;e(a.s.dt.nTable).addClass("DTTT_selectable");e("tr", 47 | a.s.dt.nTBody).live("click",function(b){if(this.parentNode==a.s.dt.nTBody){var c=a.s.dt.oInstance.fnGetNodes();-1===e.inArray(this,c)||null!==a.s.select.preRowSelect&&!a.s.select.preRowSelect.call(a,b)||("single"==a.s.select.type?a._fnRowSelectSingle.call(a,this):a._fnRowSelectMulti.call(a,this))}});a.s.dt.aoDrawCallback.push({fn:function(){a.s.select.all&&a.s.dt.oFeatures.bServerSide&&a.fnSelectAll()},sName:"TableTools_select"})}},_fnRowSelectSingle:function(a){this.s.master&&!e("td",a).hasClass(this.s.dt.oClasses.sRowEmpty)&& 48 | (e(a).hasClass(this.s.select.selectedClass)?this._fnRowDeselect(a):(0!==this.s.select.selected.length&&this._fnRowDeselectAll(),this.s.select.selected.push(a),e(a).addClass(this.s.select.selectedClass),null!==this.s.select.postSelected&&this.s.select.postSelected.call(this,a)),TableTools._fnEventDispatch(this,"select",a))},_fnRowSelectMulti:function(a){this.s.master&&!e("td",a).hasClass(this.s.dt.oClasses.sRowEmpty)&&(e(a).hasClass(this.s.select.selectedClass)?this._fnRowDeselect(a):(this.s.select.selected.push(a), 49 | e(a).addClass(this.s.select.selectedClass),null!==this.s.select.postSelected&&this.s.select.postSelected.call(this,a)),TableTools._fnEventDispatch(this,"select",a))},_fnRowSelectAll:function(){if(this.s.master){for(var a,b=0,c=this.s.dt.aiDisplayMaster.length;b<c;b++)a=this.s.dt.aoData[this.s.dt.aiDisplayMaster[b]].nTr,e(a).hasClass(this.s.select.selectedClass)||(this.s.select.selected.push(a),e(a).addClass(this.s.select.selectedClass));null!==this.s.select.postSelected&&this.s.select.postSelected.call(this, 50 | null);this.s.select.all=!0;TableTools._fnEventDispatch(this,"select",null)}},_fnRowDeselectAll:function(){if(this.s.master){for(var a=this.s.select.selected.length-1;0<=a;a--)this._fnRowDeselect(a,!1);null!==this.s.select.postDeselected&&this.s.select.postDeselected.call(this,null);this.s.select.all=!1;TableTools._fnEventDispatch(this,"select",null)}},_fnRowDeselect:function(a,b){"undefined"!=typeof a.nodeName&&(a=e.inArray(a,this.s.select.selected));var c=this.s.select.selected[a];e(c).removeClass(this.s.select.selectedClass); 51 | this.s.select.selected.splice(a,1);("undefined"==typeof b||b)&&null!==this.s.select.postDeselected&&this.s.select.postDeselected.call(this,c);this.s.select.all=!1},_fnTextConfig:function(a,b){var c=this;null!==b.fnInit&&b.fnInit.call(this,a,b);if(""!==b.sToolTip)a.title=b.sToolTip;e(a).hover(function(){e(a).addClass(b.sButtonClassHover);null!==b.fnMouseover&&b.fnMouseover.call(this,a,b,null)},function(){e(a).removeClass(b.sButtonClassHover);null!==b.fnMouseout&&b.fnMouseout.call(this,a,b,null)}); 52 | null!==b.fnSelect&&TableTools._fnEventListen(this,"select",function(d){b.fnSelect.call(c,a,b,d)});e(a).click(function(d){d.preventDefault();null!==b.fnClick&&b.fnClick.call(c,a,b,null);null!==b.fnComplete&&b.fnComplete.call(c,a,b,null,null);c._fnCollectionHide(a,b)})},_fnFlashConfig:function(a,b){var c=this,d=new ZeroClipboard_TableTools.Client;null!==b.fnInit&&b.fnInit.call(this,a,b);d.setHandCursor(!0);"flash_save"==b.sAction?(d.setAction("save"),d.setCharSet("utf16le"==b.sCharSet?"UTF16LE":"UTF8"), 53 | d.setBomInc(b.bBomInc),d.setFileName(b.sFileName.replace("*",this.fnGetTitle(b)))):"flash_pdf"==b.sAction?(d.setAction("pdf"),d.setFileName(b.sFileName.replace("*",this.fnGetTitle(b)))):d.setAction("copy");d.addEventListener("mouseOver",function(){e(a).addClass(b.sButtonClassHover);null!==b.fnMouseover&&b.fnMouseover.call(c,a,b,d)});d.addEventListener("mouseOut",function(){e(a).removeClass(b.sButtonClassHover);null!==b.fnMouseout&&b.fnMouseout.call(c,a,b,d)});d.addEventListener("mouseDown",function(){null!== 54 | b.fnClick&&b.fnClick.call(c,a,b,d)});d.addEventListener("complete",function(e,g){null!==b.fnComplete&&b.fnComplete.call(c,a,b,d,g);c._fnCollectionHide(a,b)});this._fnFlashGlue(d,a,b.sToolTip)},_fnFlashGlue:function(a,b,c){var d=this,e=b.getAttribute("id");if(f.getElementById(e)){if(a.glue(b,c),a.domElement.parentNode!=a.div.parentNode&&"undefined"==typeof d.__bZCWarning)d.s.dt.oApi._fnLog(this.s.dt,0,"It looks like you are using the version of ZeroClipboard which came with TableTools 1. Please update to use the version that came with TableTools 2."), 55 | d.__bZCWarning=!0}else setTimeout(function(){d._fnFlashGlue(a,b,c)},100)},_fnFlashSetText:function(a,b){var c=this._fnChunkData(b,8192);a.clearText();for(var d=0,e=c.length;d<e;d++)a.appendText(c[d])},_fnColumnTargets:function(a){var b=[],c=this.s.dt;if("object"==typeof a){for(i=0,iLen=c.aoColumns.length;i<iLen;i++)b.push(!1);for(i=0,iLen=a.length;i<iLen;i++)b[a[i]]=!0}else if("visible"==a)for(i=0,iLen=c.aoColumns.length;i<iLen;i++)b.push(c.aoColumns[i].bVisible?!0:!1);else if("hidden"==a)for(i=0, 56 | iLen=c.aoColumns.length;i<iLen;i++)b.push(c.aoColumns[i].bVisible?!1:!0);else if("sortable"==a)for(i=0,iLen=c.aoColumns.length;i<iLen;i++)b.push(c.aoColumns[i].bSortable?!0:!1);else for(i=0,iLen=c.aoColumns.length;i<iLen;i++)b.push(!0);return b},_fnNewline:function(a){return"auto"==a.sNewLine?navigator.userAgent.match(/Windows/)?"\r\n":"\n":a.sNewLine},_fnGetDataTablesData:function(a){var b,c,d,j,g,f=[],h="",k=this.s.dt,n=RegExp(a.sFieldBoundary,"g"),l=this._fnColumnTargets(a.mColumns),m="undefined"!= 57 | typeof a.bSelectedOnly?a.bSelectedOnly:!1;if(a.bHeader){g=[];for(b=0,c=k.aoColumns.length;b<c;b++)l[b]&&(h=k.aoColumns[b].sTitle.replace(/\n/g," ").replace(/<.*?>/g,"").replace(/^\s+|\s+$/g,""),h=this._fnHtmlDecode(h),g.push(this._fnBoundData(h,a.sFieldBoundary,n)));f.push(g.join(a.sFieldSeperator))}for(d=0,j=k.aiDisplay.length;d<j;d++)if("none"==this.s.select.type||!m||m&&e(k.aoData[k.aiDisplay[d]].nTr).hasClass(this.s.select.selectedClass)||m&&0==this.s.select.selected.length){g=[];for(b=0,c=k.aoColumns.length;b< 58 | c;b++)l[b]&&(h=k.oApi._fnGetCellData(k,k.aiDisplay[d],b,"display"),a.fnCellRender?h=a.fnCellRender(h,b)+"":"string"==typeof h?(h=h.replace(/\n/g," "),h=h.replace(/<img.*?\s+alt\s*=\s*(?:"([^"]+)"|'([^']+)'|([^\s>]+)).*?>/gi,"$1$2$3"),h=h.replace(/<.*?>/g,"")):h+="",h=h.replace(/^\s+/,"").replace(/\s+$/,""),h=this._fnHtmlDecode(h),g.push(this._fnBoundData(h,a.sFieldBoundary,n)));f.push(g.join(a.sFieldSeperator))}if(a.bFooter&&null!==k.nTFoot){g=[];for(b=0,c=k.aoColumns.length;b<c;b++)l[b]&&null!== 59 | k.aoColumns[b].nTf&&(h=k.aoColumns[b].nTf.innerHTML.replace(/\n/g," ").replace(/<.*?>/g,""),h=this._fnHtmlDecode(h),g.push(this._fnBoundData(h,a.sFieldBoundary,n)));f.push(g.join(a.sFieldSeperator))}return _sLastData=f.join(this._fnNewline(a))},_fnBoundData:function(a,b,c){return""===b?a:b+a.replace(c,b+b)+b},_fnChunkData:function(a,b){for(var c=[],d=a.length,e=0;e<d;e+=b)e+b<d?c.push(a.substring(e,e+b)):c.push(a.substring(e,d));return c},_fnHtmlDecode:function(a){if(-1==a.indexOf("&"))return a;var a= 60 | this._fnChunkData(a,2048),b=f.createElement("div"),c,d,e,g="";for(c=0,d=a.length;c<d;c++)e=a[c].lastIndexOf("&"),-1!=e&&8<=a[c].length&&e>a[c].length-8&&(a[c].substr(e),a[c]=a[c].substr(0,e)),b.innerHTML=a[c],g+=b.childNodes[0].nodeValue;return g},_fnPrintConfig:function(a,b){var c=this;null!==b.fnInit&&b.fnInit.call(this,a,b);if(""!==b.sToolTip)a.title=b.sToolTip;e(a).hover(function(){e(a).addClass(b.sButtonClassHover)},function(){e(a).removeClass(b.sButtonClassHover)});null!==b.fnSelect&&TableTools._fnEventListen(this, 61 | "select",function(d){b.fnSelect.call(c,a,b,d)});e(a).click(function(d){d.preventDefault();c._fnPrintStart.call(c,d,b);null!==b.fnClick&&b.fnClick.call(c,a,b,null);null!==b.fnComplete&&b.fnComplete.call(c,a,b,null,null);c._fnCollectionHide(a,b)})},_fnPrintStart:function(a,b){var c=this,d=this.s.dt;this._fnPrintHideNodes(d.nTable);this.s.print.saveStart=d._iDisplayStart;this.s.print.saveLength=d._iDisplayLength;if(b.bShowAll)d._iDisplayStart=0,d._iDisplayLength=-1,d.oApi._fnCalculateEnd(d),d.oApi._fnDraw(d); 62 | (""!==d.oScroll.sX||""!==d.oScroll.sY)&&this._fnPrintScrollStart(d);var d=d.aanFeatures,j;for(j in d)if("i"!=j&&"t"!=j&&1==j.length)for(var g=0,o=d[j].length;g<o;g++)this.dom.print.hidden.push({node:d[j][g],display:"block"}),d[j][g].style.display="none";e(f.body).addClass("DTTT_Print");if(""!==b.sInfo){var h=f.createElement("div");h.className="DTTT_print_info";h.innerHTML=b.sInfo;f.body.appendChild(h);setTimeout(function(){e(h).fadeOut("normal",function(){f.body.removeChild(h)})},2E3)}if(""!==b.sMessage)this.dom.print.message= 63 | f.createElement("div"),this.dom.print.message.className="DTTT_PrintMessage",this.dom.print.message.innerHTML=b.sMessage,f.body.insertBefore(this.dom.print.message,f.body.childNodes[0]);this.s.print.saveScroll=e(m).scrollTop();m.scrollTo(0,0);this.s.print.funcEnd=function(a){c._fnPrintEnd.call(c,a)};e(f).bind("keydown",null,this.s.print.funcEnd)},_fnPrintEnd:function(a){if(27==a.keyCode){a.preventDefault();var a=this.s.dt,b=this.s.print,c=this.dom.print;this._fnPrintShowNodes();(""!==a.oScroll.sX|| 64 | ""!==a.oScroll.sY)&&this._fnPrintScrollEnd();m.scrollTo(0,b.saveScroll);if(null!==c.message)f.body.removeChild(c.message),c.message=null;e(f.body).removeClass("DTTT_Print");a._iDisplayStart=b.saveStart;a._iDisplayLength=b.saveLength;a.oApi._fnCalculateEnd(a);a.oApi._fnDraw(a);e(f).unbind("keydown",this.s.print.funcEnd);this.s.print.funcEnd=null}},_fnPrintScrollStart:function(){var a=this.s.dt;a.nScrollHead.getElementsByTagName("div")[0].getElementsByTagName("table");var b=a.nTable.parentNode,c=a.nTable.getElementsByTagName("thead"); 65 | 0<c.length&&a.nTable.removeChild(c[0]);null!==a.nTFoot&&(c=a.nTable.getElementsByTagName("tfoot"),0<c.length&&a.nTable.removeChild(c[0]));c=a.nTHead.cloneNode(!0);a.nTable.insertBefore(c,a.nTable.childNodes[0]);null!==a.nTFoot&&(c=a.nTFoot.cloneNode(!0),a.nTable.insertBefore(c,a.nTable.childNodes[1]));if(""!==a.oScroll.sX)a.nTable.style.width=e(a.nTable).outerWidth()+"px",b.style.width=e(a.nTable).outerWidth()+"px",b.style.overflow="visible";if(""!==a.oScroll.sY)b.style.height=e(a.nTable).outerHeight()+ 66 | "px",b.style.overflow="visible"},_fnPrintScrollEnd:function(){var a=this.s.dt,b=a.nTable.parentNode;if(""!==a.oScroll.sX)b.style.width=a.oApi._fnStringToCss(a.oScroll.sX),b.style.overflow="auto";if(""!==a.oScroll.sY)b.style.height=a.oApi._fnStringToCss(a.oScroll.sY),b.style.overflow="auto"},_fnPrintShowNodes:function(){for(var a=this.dom.print.hidden,b=0,c=a.length;b<c;b++)a[b].node.style.display=a[b].display;a.splice(0,a.length)},_fnPrintHideNodes:function(a){for(var b=this.dom.print.hidden,c=a.parentNode, 67 | d=c.childNodes,j=0,g=d.length;j<g;j++)if(d[j]!=a&&1==d[j].nodeType){var f=e(d[j]).css("display");if("none"!=f)b.push({node:d[j],display:f}),d[j].style.display="none"}"BODY"!=c.nodeName&&this._fnPrintHideNodes(c)}};TableTools._aInstances=[];TableTools._aListeners=[];TableTools.fnGetMasters=function(){for(var a=[],b=0,c=TableTools._aInstances.length;b<c;b++)TableTools._aInstances[b].s.master&&a.push(TableTools._aInstances[b]);return a};TableTools.fnGetInstance=function(a){"object"!=typeof a&&(a=f.getElementById(a)); 68 | for(var b=0,c=TableTools._aInstances.length;b<c;b++)if(TableTools._aInstances[b].s.master&&TableTools._aInstances[b].dom.table==a)return TableTools._aInstances[b];return null};TableTools._fnEventListen=function(a,b,c){TableTools._aListeners.push({that:a,type:b,fn:c})};TableTools._fnEventDispatch=function(a,b,c){for(var d=TableTools._aListeners,e=0,f=d.length;e<f;e++)a.dom.table==d[e].that.dom.table&&d[e].type==b&&d[e].fn(c)};TableTools.BUTTONS={csv:{sAction:"flash_save",sCharSet:"utf8",bBomInc:!1, 69 | sFileName:"*.csv",sFieldBoundary:'"',sFieldSeperator:",",sNewLine:"auto",sTitle:"",sToolTip:"",sButtonClass:"DTTT_button_csv",sButtonClassHover:"DTTT_button_csv_hover",sButtonText:"CSV",mColumns:"all",bHeader:!0,bFooter:!0,bSelectedOnly:!1,fnMouseover:null,fnMouseout:null,fnClick:function(a,b,c){this.fnSetText(c,this.fnGetTableData(b))},fnSelect:null,fnComplete:null,fnInit:null,fnCellRender:null},xls:{sAction:"flash_save",sCharSet:"utf16le",bBomInc:!0,sFileName:"*.csv",sFieldBoundary:"",sFieldSeperator:"\t", 70 | sNewLine:"auto",sTitle:"",sToolTip:"",sButtonClass:"DTTT_button_xls",sButtonClassHover:"DTTT_button_xls_hover",sButtonText:"Excel",mColumns:"all",bHeader:!0,bFooter:!0,bSelectedOnly:!1,fnMouseover:null,fnMouseout:null,fnClick:function(a,b,c){this.fnSetText(c,this.fnGetTableData(b))},fnSelect:null,fnComplete:null,fnInit:null,fnCellRender:null},copy:{sAction:"flash_copy",sFieldBoundary:"",sFieldSeperator:"\t",sNewLine:"auto",sToolTip:"",sButtonClass:"DTTT_button_copy",sButtonClassHover:"DTTT_button_copy_hover", 71 | sButtonText:"Copy",mColumns:"all",bHeader:!0,bFooter:!0,bSelectedOnly:!1,fnMouseover:null,fnMouseout:null,fnClick:function(a,b,c){this.fnSetText(c,this.fnGetTableData(b))},fnSelect:null,fnComplete:function(a,b,c,d){a=d.split("\n").length;a=null===this.s.dt.nTFoot?a-1:a-2;alert("Copied "+a+" row"+(1==a?"":"s")+" to the clipboard")},fnInit:null,fnCellRender:null},pdf:{sAction:"flash_pdf",sFieldBoundary:"",sFieldSeperator:"\t",sNewLine:"\n",sFileName:"*.pdf",sToolTip:"",sTitle:"",sButtonClass:"DTTT_button_pdf", 72 | sButtonClassHover:"DTTT_button_pdf_hover",sButtonText:"PDF",mColumns:"all",bHeader:!0,bFooter:!1,bSelectedOnly:!1,fnMouseover:null,fnMouseout:null,sPdfOrientation:"portrait",sPdfSize:"A4",sPdfMessage:"",fnClick:function(a,b,c){this.fnSetText(c,"title:"+this.fnGetTitle(b)+"\nmessage:"+b.sPdfMessage+"\ncolWidth:"+this.fnCalcColRatios(b)+"\norientation:"+b.sPdfOrientation+"\nsize:"+b.sPdfSize+"\n--/TableToolsOpts--\n"+this.fnGetTableData(b))},fnSelect:null,fnComplete:null,fnInit:null,fnCellRender:null}, 73 | print:{sAction:"print",sInfo:"<h6>Print view</h6><p>Please use your browser's print function to print this table. Press escape when finished.",sMessage:"",bShowAll:!0,sToolTip:"View print view",sButtonClass:"DTTT_button_print",sButtonClassHover:"DTTT_button_print_hover",sButtonText:"Print",fnMouseover:null,fnMouseout:null,fnClick:null,fnSelect:null,fnComplete:null,fnInit:null,fnCellRender:null},text:{sAction:"text",sToolTip:"",sButtonClass:"DTTT_button_text",sButtonClassHover:"DTTT_button_text_hover", 74 | sButtonText:"Text button",mColumns:"all",bHeader:!0,bFooter:!0,bSelectedOnly:!1,fnMouseover:null,fnMouseout:null,fnClick:null,fnSelect:null,fnComplete:null,fnInit:null,fnCellRender:null},select:{sAction:"text",sToolTip:"",sButtonClass:"DTTT_button_text",sButtonClassHover:"DTTT_button_text_hover",sButtonText:"Select button",mColumns:"all",bHeader:!0,bFooter:!0,fnMouseover:null,fnMouseout:null,fnClick:null,fnSelect:function(a){0!==this.fnGetSelected().length?e(a).removeClass("DTTT_disabled"):e(a).addClass("DTTT_disabled")}, 75 | fnComplete:null,fnInit:function(a){e(a).addClass("DTTT_disabled")},fnCellRender:null},select_single:{sAction:"text",sToolTip:"",sButtonClass:"DTTT_button_text",sButtonClassHover:"DTTT_button_text_hover",sButtonText:"Select button",mColumns:"all",bHeader:!0,bFooter:!0,fnMouseover:null,fnMouseout:null,fnClick:null,fnSelect:function(a){1==this.fnGetSelected().length?e(a).removeClass("DTTT_disabled"):e(a).addClass("DTTT_disabled")},fnComplete:null,fnInit:function(a){e(a).addClass("DTTT_disabled")},fnCellRender:null}, 76 | select_all:{sAction:"text",sToolTip:"",sButtonClass:"DTTT_button_text",sButtonClassHover:"DTTT_button_text_hover",sButtonText:"Select all",mColumns:"all",bHeader:!0,bFooter:!0,fnMouseover:null,fnMouseout:null,fnClick:function(){this.fnSelectAll()},fnSelect:function(a){this.fnGetSelected().length==this.s.dt.fnRecordsDisplay()?e(a).addClass("DTTT_disabled"):e(a).removeClass("DTTT_disabled")},fnComplete:null,fnInit:null,fnCellRender:null},select_none:{sAction:"text",sToolTip:"",sButtonClass:"DTTT_button_text", 77 | sButtonClassHover:"DTTT_button_text_hover",sButtonText:"Deselect all",mColumns:"all",bHeader:!0,bFooter:!0,fnMouseover:null,fnMouseout:null,fnClick:function(){this.fnSelectNone()},fnSelect:function(a){0!==this.fnGetSelected().length?e(a).removeClass("DTTT_disabled"):e(a).addClass("DTTT_disabled")},fnComplete:null,fnInit:function(a){e(a).addClass("DTTT_disabled")},fnCellRender:null},ajax:{sAction:"text",sFieldBoundary:"",sFieldSeperator:"\t",sNewLine:"\n",sAjaxUrl:"/xhr.php",sToolTip:"",sButtonClass:"DTTT_button_text", 78 | sButtonClassHover:"DTTT_button_text_hover",sButtonText:"Ajax button",mColumns:"all",bHeader:!0,bFooter:!0,bSelectedOnly:!1,fnMouseover:null,fnMouseout:null,fnClick:function(a,b){var c=this.fnGetTableData(b);e.ajax({url:b.sAjaxUrl,data:[{name:"tableData",value:c}],success:b.fnAjaxComplete,dataType:"json",type:"POST",cache:!1,error:function(){alert("Error detected when sending table data to server")}})},fnSelect:null,fnComplete:null,fnInit:null,fnAjaxComplete:function(){alert("Ajax complete")},fnCellRender:null}, 79 | div:{sAction:"div",sToolTip:"",sButtonClass:"DTTT_nonbutton",sButtonClassHover:"",sButtonText:"Text button",fnMouseover:null,fnMouseout:null,fnClick:null,fnSelect:null,fnComplete:null,fnInit:null,nContent:null,fnCellRender:null},collection:{sAction:"collection",sToolTip:"",sButtonClass:"DTTT_button_collection",sButtonClassHover:"DTTT_button_collection_hover",sButtonText:"Collection",fnMouseover:null,fnMouseout:null,fnClick:function(a,b){this._fnCollectionShow(a,b)},fnSelect:null,fnComplete:null,fnInit:null, 80 | fnCellRender:null}};TableTools.DEFAULTS={sSwfPath:"media/swf/copy_csv_xls_pdf.swf",sRowSelect:"none",sSelectedClass:"DTTT_selected",fnPreRowSelect:null,fnRowSelected:null,fnRowDeselected:null,aButtons:["copy","csv","xls","pdf","print"]};TableTools.prototype.CLASS="TableTools";TableTools.VERSION="2.0.3";TableTools.prototype.VERSION=TableTools.VERSION;"function"==typeof e.fn.dataTable&&"function"==typeof e.fn.dataTableExt.fnVersionCheck&&e.fn.dataTableExt.fnVersionCheck("1.8.2")?e.fn.dataTableExt.aoFeatures.push({fnInit:function(a){a= 81 | new TableTools(a.oInstance,"undefined"!=typeof a.oInit.oTableTools?a.oInit.oTableTools:{});TableTools._aInstances.push(a);return a.dom.container},cFeature:"T",sFeature:"TableTools"}):alert("Warning: TableTools 2 requires DataTables 1.8.2 or newer - www.datatables.net/download")})(jQuery,window,document); 82 | -------------------------------------------------------------------------------- /media/js/jquery.dataTables.min.js: -------------------------------------------------------------------------------- 1 | /* 2 | * File: jquery.dataTables.min.js 3 | * Version: 1.9.1 4 | * Author: Allan Jardine (www.sprymedia.co.uk) 5 | * Info: www.datatables.net 6 | * 7 | * Copyright 2008-2012 Allan Jardine, all rights reserved. 8 | * 9 | * This source file is free software, under either the GPL v2 license or a 10 | * BSD style license, available at: 11 | * http://datatables.net/license_gpl2 12 | * http://datatables.net/license_bsd 13 | * 14 | * This source file is distributed in the hope that it will be useful, but 15 | * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY 16 | * or FITNESS FOR A PARTICULAR PURPOSE. See the license files for details. 17 | */ 18 | (function(h,V,l,m){var j=function(e){function o(a,b){var c=j.defaults.columns,d=a.aoColumns.length,c=h.extend({},j.models.oColumn,c,{sSortingClass:a.oClasses.sSortable,sSortingClassJUI:a.oClasses.sSortJUI,nTh:b?b:l.createElement("th"),sTitle:c.sTitle?c.sTitle:b?b.innerHTML:"",aDataSort:c.aDataSort?c.aDataSort:[d],mDataProp:c.mDataProp?c.oDefaults:d});a.aoColumns.push(c);if(a.aoPreSearchCols[d]===m||null===a.aoPreSearchCols[d])a.aoPreSearchCols[d]=h.extend({},j.models.oSearch);else{c=a.aoPreSearchCols[d]; 19 | if(c.bRegex===m)c.bRegex=!0;if(c.bSmart===m)c.bSmart=!0;if(c.bCaseInsensitive===m)c.bCaseInsensitive=!0}s(a,d,null)}function s(a,b,c){b=a.aoColumns[b];if(c!==m&&null!==c){if(c.sType!==m)b.sType=c.sType,b._bAutoType=!1;h.extend(b,c);p(b,c,"sWidth","sWidthOrig");if(c.iDataSort!==m)b.aDataSort=[c.iDataSort];p(b,c,"aDataSort")}b.fnGetData=W(b.mDataProp);b.fnSetData=ta(b.mDataProp);if(!a.oFeatures.bSort)b.bSortable=!1;if(!b.bSortable||-1==h.inArray("asc",b.asSorting)&&-1==h.inArray("desc",b.asSorting))b.sSortingClass= 20 | a.oClasses.sSortableNone,b.sSortingClassJUI="";else if(b.bSortable||-1==h.inArray("asc",b.asSorting)&&-1==h.inArray("desc",b.asSorting))b.sSortingClass=a.oClasses.sSortable,b.sSortingClassJUI=a.oClasses.sSortJUI;else if(-1!=h.inArray("asc",b.asSorting)&&-1==h.inArray("desc",b.asSorting))b.sSortingClass=a.oClasses.sSortableAsc,b.sSortingClassJUI=a.oClasses.sSortJUIAscAllowed;else if(-1==h.inArray("asc",b.asSorting)&&-1!=h.inArray("desc",b.asSorting))b.sSortingClass=a.oClasses.sSortableDesc,b.sSortingClassJUI= 21 | a.oClasses.sSortJUIDescAllowed}function k(a){if(!1===a.oFeatures.bAutoWidth)return!1;ba(a);for(var b=0,c=a.aoColumns.length;b<c;b++)a.aoColumns[b].nTh.style.width=a.aoColumns[b].sWidth}function x(a,b){for(var c=-1,d=0;d<a.aoColumns.length;d++)if(!0===a.aoColumns[d].bVisible&&c++,c==b)return d;return null}function r(a,b){for(var c=-1,d=0;d<a.aoColumns.length;d++)if(!0===a.aoColumns[d].bVisible&&c++,d==b)return!0===a.aoColumns[d].bVisible?c:null;return null}function v(a){for(var b=0,c=0;c<a.aoColumns.length;c++)!0=== 22 | a.aoColumns[c].bVisible&&b++;return b}function A(a){for(var b=j.ext.aTypes,c=b.length,d=0;d<c;d++){var f=b[d](a);if(null!==f)return f}return"string"}function E(a,b){for(var c=b.split(","),d=[],f=0,g=a.aoColumns.length;f<g;f++)for(var i=0;i<g;i++)if(a.aoColumns[f].sName==c[i]){d.push(i);break}return d}function y(a){for(var b="",c=0,d=a.aoColumns.length;c<d;c++)b+=a.aoColumns[c].sName+",";return b.length==d?"":b.slice(0,-1)}function J(a,b,c,d){var f,g,i,e,u;if(b)for(f=b.length-1;0<=f;f--){var n=b[f].aTargets; 23 | h.isArray(n)||F(a,1,"aTargets must be an array of targets, not a "+typeof n);for(g=0,i=n.length;g<i;g++)if("number"===typeof n[g]&&0<=n[g]){for(;a.aoColumns.length<=n[g];)o(a);d(n[g],b[f])}else if("number"===typeof n[g]&&0>n[g])d(a.aoColumns.length+n[g],b[f]);else if("string"===typeof n[g])for(e=0,u=a.aoColumns.length;e<u;e++)("_all"==n[g]||h(a.aoColumns[e].nTh).hasClass(n[g]))&&d(e,b[f])}if(c)for(f=0,a=c.length;f<a;f++)d(f,c[f])}function H(a,b){var c;c=h.isArray(b)?b.slice():h.extend(!0,{},b);var d= 24 | a.aoData.length,f=h.extend(!0,{},j.models.oRow);f._aData=c;a.aoData.push(f);for(var g,f=0,i=a.aoColumns.length;f<i;f++)if(c=a.aoColumns[f],"function"===typeof c.fnRender&&c.bUseRendered&&null!==c.mDataProp?I(a,d,f,R(a,d,f)):I(a,d,f,w(a,d,f)),c._bAutoType&&"string"!=c.sType&&(g=w(a,d,f,"type"),null!==g&&""!==g))if(g=A(g),null===c.sType)c.sType=g;else if(c.sType!=g&&"html"!=c.sType)c.sType="string";a.aiDisplayMaster.push(d);a.oFeatures.bDeferRender||ca(a,d);return d}function ua(a){var b,c,d,f,g,i,e, 25 | u,n;if(a.bDeferLoading||null===a.sAjaxSource){e=a.nTBody.childNodes;for(b=0,c=e.length;b<c;b++)if("TR"==e[b].nodeName.toUpperCase()){u=a.aoData.length;e[b]._DT_RowIndex=u;a.aoData.push(h.extend(!0,{},j.models.oRow,{nTr:e[b]}));a.aiDisplayMaster.push(u);i=e[b].childNodes;g=0;for(d=0,f=i.length;d<f;d++)if(n=i[d].nodeName.toUpperCase(),"TD"==n||"TH"==n)I(a,u,g,h.trim(i[d].innerHTML)),g++}}e=S(a);i=[];for(b=0,c=e.length;b<c;b++)for(d=0,f=e[b].childNodes.length;d<f;d++)g=e[b].childNodes[d],n=g.nodeName.toUpperCase(), 26 | ("TD"==n||"TH"==n)&&i.push(g);for(f=0,e=a.aoColumns.length;f<e;f++){n=a.aoColumns[f];if(null===n.sTitle)n.sTitle=n.nTh.innerHTML;g=n._bAutoType;u="function"===typeof n.fnRender;var o=null!==n.sClass,k=n.bVisible,m,s;if(g||u||o||!k)for(b=0,c=a.aoData.length;b<c;b++){d=a.aoData[b];m=i[b*e+f];if(g&&"string"!=n.sType&&(s=w(a,b,f,"type"),""!==s))if(s=A(s),null===n.sType)n.sType=s;else if(n.sType!=s&&"html"!=n.sType)n.sType="string";if("function"===typeof n.mDataProp)m.innerHTML=w(a,b,f,"display");if(u)s= 27 | R(a,b,f),m.innerHTML=s,n.bUseRendered&&I(a,b,f,s);o&&(m.className+=" "+n.sClass);k?d._anHidden[f]=null:(d._anHidden[f]=m,m.parentNode.removeChild(m));n.fnCreatedCell&&n.fnCreatedCell.call(a.oInstance,m,w(a,b,f,"display"),d._aData,b,f)}}if(0!==a.aoRowCreatedCallback.length)for(b=0,c=a.aoData.length;b<c;b++)d=a.aoData[b],D(a,"aoRowCreatedCallback",null,[d.nTr,d._aData,b])}function K(a,b){return b._DT_RowIndex!==m?b._DT_RowIndex:null}function da(a,b,c){for(var b=L(a,b),d=0,a=a.aoColumns.length;d<a;d++)if(b[d]=== 28 | c)return d;return-1}function X(a,b,c){for(var d=[],f=0,g=a.aoColumns.length;f<g;f++)d.push(w(a,b,f,c));return d}function w(a,b,c,d){var f=a.aoColumns[c];if((c=f.fnGetData(a.aoData[b]._aData,d))===m){if(a.iDrawError!=a.iDraw&&null===f.sDefaultContent)F(a,0,"Requested unknown parameter "+("function"==typeof f.mDataProp?"{mDataprop function}":"'"+f.mDataProp+"'")+" from the data source for row "+b),a.iDrawError=a.iDraw;return f.sDefaultContent}if(null===c&&null!==f.sDefaultContent)c=f.sDefaultContent; 29 | else if("function"===typeof c)return c();return"display"==d&&null===c?"":c}function I(a,b,c,d){a.aoColumns[c].fnSetData(a.aoData[b]._aData,d)}function W(a){if(null===a)return function(){return null};if("function"===typeof a)return function(b,d){return a(b,d)};if("string"===typeof a&&-1!=a.indexOf(".")){var b=a.split(".");return function(a){for(var d=0,f=b.length;d<f;d++)if(a=a[b[d]],a===m)return m;return a}}return function(b){return b[a]}}function ta(a){if(null===a)return function(){};if("function"=== 30 | typeof a)return function(b,d){a(b,"set",d)};if("string"===typeof a&&-1!=a.indexOf(".")){var b=a.split(".");return function(a,d){for(var f=0,g=b.length-1;f<g;f++)if(a=a[b[f]],a===m)return;a[b[b.length-1]]=d}}return function(b,d){b[a]=d}}function Y(a){for(var b=[],c=a.aoData.length,d=0;d<c;d++)b.push(a.aoData[d]._aData);return b}function ea(a){a.aoData.splice(0,a.aoData.length);a.aiDisplayMaster.splice(0,a.aiDisplayMaster.length);a.aiDisplay.splice(0,a.aiDisplay.length);B(a)}function fa(a,b){for(var c= 31 | -1,d=0,f=a.length;d<f;d++)a[d]==b?c=d:a[d]>b&&a[d]--; -1!=c&&a.splice(c,1)}function R(a,b,c){var d=a.aoColumns[c];return d.fnRender({iDataRow:b,iDataColumn:c,oSettings:a,aData:a.aoData[b]._aData,mDataProp:d.mDataProp},w(a,b,c,"display"))}function ca(a,b){var c=a.aoData[b],d;if(null===c.nTr){c.nTr=l.createElement("tr");c.nTr._DT_RowIndex=b;if(c._aData.DT_RowId)c.nTr.id=c._aData.DT_RowId;c._aData.DT_RowClass&&h(c.nTr).addClass(c._aData.DT_RowClass);for(var f=0,g=a.aoColumns.length;f<g;f++){var i=a.aoColumns[f]; 32 | d=l.createElement(i.sCellType);d.innerHTML="function"===typeof i.fnRender&&(!i.bUseRendered||null===i.mDataProp)?R(a,b,f):w(a,b,f,"display");if(null!==i.sClass)d.className=i.sClass;i.bVisible?(c.nTr.appendChild(d),c._anHidden[f]=null):c._anHidden[f]=d;i.fnCreatedCell&&i.fnCreatedCell.call(a.oInstance,d,w(a,b,f,"display"),c._aData,b,f)}D(a,"aoRowCreatedCallback",null,[c.nTr,c._aData,b])}}function va(a){var b,c,d;if(0!==a.nTHead.getElementsByTagName("th").length)for(b=0,d=a.aoColumns.length;b<d;b++){if(c= 33 | a.aoColumns[b].nTh,c.setAttribute("role","columnheader"),a.aoColumns[b].bSortable&&(c.setAttribute("tabindex",a.iTabIndex),c.setAttribute("aria-controls",a.sTableId)),null!==a.aoColumns[b].sClass&&h(c).addClass(a.aoColumns[b].sClass),a.aoColumns[b].sTitle!=c.innerHTML)c.innerHTML=a.aoColumns[b].sTitle}else{var f=l.createElement("tr");for(b=0,d=a.aoColumns.length;b<d;b++)c=a.aoColumns[b].nTh,c.innerHTML=a.aoColumns[b].sTitle,c.setAttribute("tabindex","0"),null!==a.aoColumns[b].sClass&&h(c).addClass(a.aoColumns[b].sClass), 34 | f.appendChild(c);h(a.nTHead).html("")[0].appendChild(f);T(a.aoHeader,a.nTHead)}h(a.nTHead).children("tr").attr("role","row");if(a.bJUI)for(b=0,d=a.aoColumns.length;b<d;b++){c=a.aoColumns[b].nTh;f=l.createElement("div");f.className=a.oClasses.sSortJUIWrapper;h(c).contents().appendTo(f);var g=l.createElement("span");g.className=a.oClasses.sSortIcon;f.appendChild(g);c.appendChild(f)}if(a.oFeatures.bSort)for(b=0;b<a.aoColumns.length;b++)!1!==a.aoColumns[b].bSortable?ga(a,a.aoColumns[b].nTh,b):h(a.aoColumns[b].nTh).addClass(a.oClasses.sSortableNone); 35 | ""!==a.oClasses.sFooterTH&&h(a.nTFoot).children("tr").children("th").addClass(a.oClasses.sFooterTH);if(null!==a.nTFoot){c=O(a,null,a.aoFooter);for(b=0,d=a.aoColumns.length;b<d;b++)if(c[b])a.aoColumns[b].nTf=c[b],a.aoColumns[b].sClass&&h(c[b]).addClass(a.aoColumns[b].sClass)}}function U(a,b,c){var d,f,g,i=[],e=[],h=a.aoColumns.length,n;c===m&&(c=!1);for(d=0,f=b.length;d<f;d++){i[d]=b[d].slice();i[d].nTr=b[d].nTr;for(g=h-1;0<=g;g--)!a.aoColumns[g].bVisible&&!c&&i[d].splice(g,1);e.push([])}for(d=0,f= 36 | i.length;d<f;d++){if(a=i[d].nTr)for(;g=a.firstChild;)a.removeChild(g);for(g=0,b=i[d].length;g<b;g++)if(n=h=1,e[d][g]===m){a.appendChild(i[d][g].cell);for(e[d][g]=1;i[d+h]!==m&&i[d][g].cell==i[d+h][g].cell;)e[d+h][g]=1,h++;for(;i[d][g+n]!==m&&i[d][g].cell==i[d][g+n].cell;){for(c=0;c<h;c++)e[d+c][g+n]=1;n++}i[d][g].cell.rowSpan=h;i[d][g].cell.colSpan=n}}}function z(a){var b,c,d=[],f=0,g=a.asStripeClasses.length;b=a.aoOpenRows.length;c=D(a,"aoPreDrawCallback","preDraw",[a]);if(-1!==h.inArray(!1,c))G(a, 37 | !1);else{a.bDrawing=!0;if(a.iInitDisplayStart!==m&&-1!=a.iInitDisplayStart)a._iDisplayStart=a.oFeatures.bServerSide?a.iInitDisplayStart:a.iInitDisplayStart>=a.fnRecordsDisplay()?0:a.iInitDisplayStart,a.iInitDisplayStart=-1,B(a);if(a.bDeferLoading)a.bDeferLoading=!1,a.iDraw++;else if(a.oFeatures.bServerSide){if(!a.bDestroying&&!wa(a))return}else a.iDraw++;if(0!==a.aiDisplay.length){var i=a._iDisplayStart;c=a._iDisplayEnd;if(a.oFeatures.bServerSide)i=0,c=a.aoData.length;for(;i<c;i++){var e=a.aoData[a.aiDisplay[i]]; 38 | null===e.nTr&&ca(a,a.aiDisplay[i]);var j=e.nTr;if(0!==g){var n=a.asStripeClasses[f%g];if(e._sRowStripe!=n)h(j).removeClass(e._sRowStripe).addClass(n),e._sRowStripe=n}D(a,"aoRowCallback",null,[j,a.aoData[a.aiDisplay[i]]._aData,f,i]);d.push(j);f++;if(0!==b)for(e=0;e<b;e++)if(j==a.aoOpenRows[e].nParent){d.push(a.aoOpenRows[e].nTr);break}}}else{d[0]=l.createElement("tr");if(a.asStripeClasses[0])d[0].className=a.asStripeClasses[0];b=a.oLanguage;g=b.sZeroRecords;if(1==a.iDraw&&null!==a.sAjaxSource&&!a.oFeatures.bServerSide)g= 39 | b.sLoadingRecords;else if(b.sEmptyTable&&0===a.fnRecordsTotal())g=b.sEmptyTable;b=l.createElement("td");b.setAttribute("valign","top");b.colSpan=v(a);b.className=a.oClasses.sRowEmpty;b.innerHTML=ha(a,g);d[f].appendChild(b)}D(a,"aoHeaderCallback","header",[h(a.nTHead).children("tr")[0],Y(a),a._iDisplayStart,a.fnDisplayEnd(),a.aiDisplay]);D(a,"aoFooterCallback","footer",[h(a.nTFoot).children("tr")[0],Y(a),a._iDisplayStart,a.fnDisplayEnd(),a.aiDisplay]);f=l.createDocumentFragment();b=l.createDocumentFragment(); 40 | if(a.nTBody){g=a.nTBody.parentNode;b.appendChild(a.nTBody);if(!a.oScroll.bInfinite||!a._bInitComplete||a.bSorted||a.bFiltered)for(;b=a.nTBody.firstChild;)a.nTBody.removeChild(b);for(b=0,c=d.length;b<c;b++)f.appendChild(d[b]);a.nTBody.appendChild(f);null!==g&&g.appendChild(a.nTBody)}D(a,"aoDrawCallback","draw",[a]);a.bSorted=!1;a.bFiltered=!1;a.bDrawing=!1;a.oFeatures.bServerSide&&(G(a,!1),a._bInitComplete||Z(a))}}function $(a){a.oFeatures.bSort?P(a,a.oPreviousSearch):a.oFeatures.bFilter?M(a,a.oPreviousSearch): 41 | (B(a),z(a))}function xa(a){var b=h("<div></div>")[0];a.nTable.parentNode.insertBefore(b,a.nTable);a.nTableWrapper=h('<div id="'+a.sTableId+'_wrapper" class="'+a.oClasses.sWrapper+'" role="grid"></div>')[0];a.nTableReinsertBefore=a.nTable.nextSibling;for(var c=a.nTableWrapper,d=a.sDom.split(""),f,g,i,e,u,n,o,k=0;k<d.length;k++){g=0;i=d[k];if("<"==i){e=h("<div></div>")[0];u=d[k+1];if("'"==u||'"'==u){n="";for(o=2;d[k+o]!=u;)n+=d[k+o],o++;"H"==n?n="fg-toolbar ui-toolbar ui-widget-header ui-corner-tl ui-corner-tr ui-helper-clearfix": 42 | "F"==n&&(n="fg-toolbar ui-toolbar ui-widget-header ui-corner-bl ui-corner-br ui-helper-clearfix");-1!=n.indexOf(".")?(u=n.split("."),e.id=u[0].substr(1,u[0].length-1),e.className=u[1]):"#"==n.charAt(0)?e.id=n.substr(1,n.length-1):e.className=n;k+=o}c.appendChild(e);c=e}else if(">"==i)c=c.parentNode;else if("l"==i&&a.oFeatures.bPaginate&&a.oFeatures.bLengthChange)f=ya(a),g=1;else if("f"==i&&a.oFeatures.bFilter)f=za(a),g=1;else if("r"==i&&a.oFeatures.bProcessing)f=Aa(a),g=1;else if("t"==i)f=Ba(a),g= 43 | 1;else if("i"==i&&a.oFeatures.bInfo)f=Ca(a),g=1;else if("p"==i&&a.oFeatures.bPaginate)f=Da(a),g=1;else if(0!==j.ext.aoFeatures.length){e=j.ext.aoFeatures;o=0;for(u=e.length;o<u;o++)if(i==e[o].cFeature){(f=e[o].fnInit(a))&&(g=1);break}}1==g&&null!==f&&("object"!==typeof a.aanFeatures[i]&&(a.aanFeatures[i]=[]),a.aanFeatures[i].push(f),c.appendChild(f))}b.parentNode.replaceChild(a.nTableWrapper,b)}function T(a,b){var c=h(b).children("tr"),d,f,g,i,e,j,n,o;a.splice(0,a.length);for(f=0,j=c.length;f<j;f++)a.push([]); 44 | for(f=0,j=c.length;f<j;f++)for(g=0,n=c[f].childNodes.length;g<n;g++)if(d=c[f].childNodes[g],"TD"==d.nodeName.toUpperCase()||"TH"==d.nodeName.toUpperCase()){var k=1*d.getAttribute("colspan"),m=1*d.getAttribute("rowspan"),k=!k||0===k||1===k?1:k,m=!m||0===m||1===m?1:m;for(i=0;a[f][i];)i++;o=i;for(e=0;e<k;e++)for(i=0;i<m;i++)a[f+i][o+e]={cell:d,unique:1==k?!0:!1},a[f+i].nTr=c[f]}}function O(a,b,c){var d=[];if(!c)c=a.aoHeader,b&&(c=[],T(c,b));for(var b=0,f=c.length;b<f;b++)for(var g=0,i=c[b].length;g< 45 | i;g++)if(c[b][g].unique&&(!d[g]||!a.bSortCellsTop))d[g]=c[b][g].cell;return d}function wa(a){if(a.bAjaxDataGet){a.iDraw++;G(a,!0);var b=Ea(a);ia(a,b);a.fnServerData.call(a.oInstance,a.sAjaxSource,b,function(b){Fa(a,b)},a);return!1}return!0}function Ea(a){var b=a.aoColumns.length,c=[],d,f,g,i;c.push({name:"sEcho",value:a.iDraw});c.push({name:"iColumns",value:b});c.push({name:"sColumns",value:y(a)});c.push({name:"iDisplayStart",value:a._iDisplayStart});c.push({name:"iDisplayLength",value:!1!==a.oFeatures.bPaginate? 46 | a._iDisplayLength:-1});for(g=0;g<b;g++)d=a.aoColumns[g].mDataProp,c.push({name:"mDataProp_"+g,value:"function"===typeof d?"function":d});if(!1!==a.oFeatures.bFilter){c.push({name:"sSearch",value:a.oPreviousSearch.sSearch});c.push({name:"bRegex",value:a.oPreviousSearch.bRegex});for(g=0;g<b;g++)c.push({name:"sSearch_"+g,value:a.aoPreSearchCols[g].sSearch}),c.push({name:"bRegex_"+g,value:a.aoPreSearchCols[g].bRegex}),c.push({name:"bSearchable_"+g,value:a.aoColumns[g].bSearchable})}if(!1!==a.oFeatures.bSort){var e= 47 | 0;d=null!==a.aaSortingFixed?a.aaSortingFixed.concat(a.aaSorting):a.aaSorting.slice();for(g=0;g<d.length;g++){f=a.aoColumns[d[g][0]].aDataSort;for(i=0;i<f.length;i++)c.push({name:"iSortCol_"+e,value:f[i]}),c.push({name:"sSortDir_"+e,value:d[g][1]}),e++}c.push({name:"iSortingCols",value:e});for(g=0;g<b;g++)c.push({name:"bSortable_"+g,value:a.aoColumns[g].bSortable})}return c}function ia(a,b){D(a,"aoServerParams","serverParams",[b])}function Fa(a,b){if(b.sEcho!==m){if(1*b.sEcho<a.iDraw)return;a.iDraw= 48 | 1*b.sEcho}(!a.oScroll.bInfinite||a.oScroll.bInfinite&&(a.bSorted||a.bFiltered))&&ea(a);a._iRecordsTotal=parseInt(b.iTotalRecords,10);a._iRecordsDisplay=parseInt(b.iTotalDisplayRecords,10);var c=y(a),c=b.sColumns!==m&&""!==c&&b.sColumns!=c,d;c&&(d=E(a,b.sColumns));for(var f=W(a.sAjaxDataProp)(b),g=0,i=f.length;g<i;g++)if(c){for(var e=[],h=0,n=a.aoColumns.length;h<n;h++)e.push(f[g][d[h]]);H(a,e)}else H(a,f[g]);a.aiDisplay=a.aiDisplayMaster.slice();a.bAjaxDataGet=!1;z(a);a.bAjaxDataGet=!0;G(a,!1)}function za(a){var b= 49 | a.oPreviousSearch,c=a.oLanguage.sSearch,c=-1!==c.indexOf("_INPUT_")?c.replace("_INPUT_",'<input type="text" />'):""===c?'<input type="text" />':c+' <input type="text" />',d=l.createElement("div");d.className=a.oClasses.sFilter;d.innerHTML="<label>"+c+"</label>";if(!a.aanFeatures.f)d.id=a.sTableId+"_filter";c=h('input[type="text"]',d);d._DT_Input=c[0];c.val(b.sSearch.replace('"',"""));c.bind("keyup.DT",function(){for(var c=a.aanFeatures.f,d=""===this.value?"":this.value,i=0,e=c.length;i<e;i++)c[i]!= 50 | h(this).parents("div.dataTables_filter")[0]&&h(c[i]._DT_Input).val(d);d!=b.sSearch&&M(a,{sSearch:d,bRegex:b.bRegex,bSmart:b.bSmart,bCaseInsensitive:b.bCaseInsensitive})});c.attr("aria-controls",a.sTableId).bind("keypress.DT",function(a){if(13==a.keyCode)return!1});return d}function M(a,b,c){var d=a.oPreviousSearch,f=a.aoPreSearchCols,g=function(a){d.sSearch=a.sSearch;d.bRegex=a.bRegex;d.bSmart=a.bSmart;d.bCaseInsensitive=a.bCaseInsensitive};if(a.oFeatures.bServerSide)g(b);else{Ga(a,b.sSearch,c,b.bRegex, 51 | b.bSmart,b.bCaseInsensitive);g(b);for(b=0;b<a.aoPreSearchCols.length;b++)Ha(a,f[b].sSearch,b,f[b].bRegex,f[b].bSmart,f[b].bCaseInsensitive);Ia(a)}a.bFiltered=!0;h(a.oInstance).trigger("filter",a);a._iDisplayStart=0;B(a);z(a);ja(a,0)}function Ia(a){for(var b=j.ext.afnFiltering,c=0,d=b.length;c<d;c++)for(var f=0,g=0,i=a.aiDisplay.length;g<i;g++){var e=a.aiDisplay[g-f];b[c](a,X(a,e,"filter"),e)||(a.aiDisplay.splice(g-f,1),f++)}}function Ha(a,b,c,d,f,g){if(""!==b)for(var i=0,b=ka(b,d,f,g),d=a.aiDisplay.length- 52 | 1;0<=d;d--)f=la(w(a,a.aiDisplay[d],c,"filter"),a.aoColumns[c].sType),b.test(f)||(a.aiDisplay.splice(d,1),i++)}function Ga(a,b,c,d,f,g){d=ka(b,d,f,g);f=a.oPreviousSearch;c||(c=0);0!==j.ext.afnFiltering.length&&(c=1);if(0>=b.length)a.aiDisplay.splice(0,a.aiDisplay.length),a.aiDisplay=a.aiDisplayMaster.slice();else if(a.aiDisplay.length==a.aiDisplayMaster.length||f.sSearch.length>b.length||1==c||0!==b.indexOf(f.sSearch)){a.aiDisplay.splice(0,a.aiDisplay.length);ja(a,1);for(b=0;b<a.aiDisplayMaster.length;b++)d.test(a.asDataSearch[b])&& 53 | a.aiDisplay.push(a.aiDisplayMaster[b])}else for(b=c=0;b<a.asDataSearch.length;b++)d.test(a.asDataSearch[b])||(a.aiDisplay.splice(b-c,1),c++)}function ja(a,b){if(!a.oFeatures.bServerSide){a.asDataSearch.splice(0,a.asDataSearch.length);for(var c=b&&1===b?a.aiDisplayMaster:a.aiDisplay,d=0,f=c.length;d<f;d++)a.asDataSearch[d]=ma(a,X(a,c[d],"filter"))}}function ma(a,b){var c="";if(a.__nTmpFilter===m)a.__nTmpFilter=l.createElement("div");for(var d=a.__nTmpFilter,f=0,g=a.aoColumns.length;f<g;f++)a.aoColumns[f].bSearchable&& 54 | (c+=la(b[f],a.aoColumns[f].sType)+" ");if(-1!==c.indexOf("&"))d.innerHTML=c,c=d.textContent?d.textContent:d.innerText,c=c.replace(/\n/g," ").replace(/\r/g,"");return c}function ka(a,b,c,d){if(c)return a=b?a.split(" "):na(a).split(" "),a="^(?=.*?"+a.join(")(?=.*?")+").*$",RegExp(a,d?"i":"");a=b?a:na(a);return RegExp(a,d?"i":"")}function la(a,b){return"function"===typeof j.ext.ofnSearch[b]?j.ext.ofnSearch[b](a):null===a?"":"html"==b?a.replace(/[\r\n]/g," ").replace(/<.*?>/g,""):"string"===typeof a? 55 | a.replace(/[\r\n]/g," "):a}function na(a){return a.replace(RegExp("(\\/|\\.|\\*|\\+|\\?|\\||\\(|\\)|\\[|\\]|\\{|\\}|\\\\|\\$|\\^)","g"),"\\$1")}function Ca(a){var b=l.createElement("div");b.className=a.oClasses.sInfo;if(!a.aanFeatures.i)a.aoDrawCallback.push({fn:Ja,sName:"information"}),b.id=a.sTableId+"_info";a.nTable.setAttribute("aria-describedby",a.sTableId+"_info");return b}function Ja(a){if(a.oFeatures.bInfo&&0!==a.aanFeatures.i.length){var b=a.oLanguage,c=a._iDisplayStart+1,d=a.fnDisplayEnd(), 56 | f=a.fnRecordsTotal(),g=a.fnRecordsDisplay(),i;i=0===g&&g==f?b.sInfoEmpty:0===g?b.sInfoEmpty+" "+b.sInfoFiltered:g==f?b.sInfo:b.sInfo+" "+b.sInfoFiltered;i+=b.sInfoPostFix;i=ha(a,i);null!==b.fnInfoCallback&&(i=b.fnInfoCallback.call(a.oInstance,a,c,d,f,g,i));a=a.aanFeatures.i;b=0;for(c=a.length;b<c;b++)h(a[b]).html(i)}}function ha(a,b){var c=a.fnFormatNumber(a._iDisplayStart+1),d=a.fnDisplayEnd(),d=a.fnFormatNumber(d),f=a.fnRecordsDisplay(),f=a.fnFormatNumber(f),g=a.fnRecordsTotal(),g=a.fnFormatNumber(g); 57 | a.oScroll.bInfinite&&(c=a.fnFormatNumber(1));return b.replace("_START_",c).replace("_END_",d).replace("_TOTAL_",f).replace("_MAX_",g)}function aa(a){var b,c,d=a.iInitDisplayStart;if(!1===a.bInitialised)setTimeout(function(){aa(a)},200);else{xa(a);va(a);U(a,a.aoHeader);a.nTFoot&&U(a,a.aoFooter);G(a,!0);a.oFeatures.bAutoWidth&&ba(a);for(b=0,c=a.aoColumns.length;b<c;b++)if(null!==a.aoColumns[b].sWidth)a.aoColumns[b].nTh.style.width=q(a.aoColumns[b].sWidth);a.oFeatures.bSort?P(a):a.oFeatures.bFilter? 58 | M(a,a.oPreviousSearch):(a.aiDisplay=a.aiDisplayMaster.slice(),B(a),z(a));null!==a.sAjaxSource&&!a.oFeatures.bServerSide?(c=[],ia(a,c),a.fnServerData.call(a.oInstance,a.sAjaxSource,c,function(c){var g=""!==a.sAjaxDataProp?W(a.sAjaxDataProp)(c):c;for(b=0;b<g.length;b++)H(a,g[b]);a.iInitDisplayStart=d;a.oFeatures.bSort?P(a):(a.aiDisplay=a.aiDisplayMaster.slice(),B(a),z(a));G(a,!1);Z(a,c)},a)):a.oFeatures.bServerSide||(G(a,!1),Z(a))}}function Z(a,b){a._bInitComplete=!0;D(a,"aoInitComplete","init",[a, 59 | b])}function oa(a){var b=j.defaults.oLanguage;!a.sEmptyTable&&a.sZeroRecords&&"No data available in table"===b.sEmptyTable&&p(a,a,"sZeroRecords","sEmptyTable");!a.sLoadingRecords&&a.sZeroRecords&&"Loading..."===b.sLoadingRecords&&p(a,a,"sZeroRecords","sLoadingRecords")}function ya(a){if(a.oScroll.bInfinite)return null;var b='<select size="1" '+('name="'+a.sTableId+'_length"')+">",c,d,f=a.aLengthMenu;if(2==f.length&&"object"===typeof f[0]&&"object"===typeof f[1])for(c=0,d=f[0].length;c<d;c++)b+='<option value="'+ 60 | f[0][c]+'">'+f[1][c]+"</option>";else for(c=0,d=f.length;c<d;c++)b+='<option value="'+f[c]+'">'+f[c]+"</option>";b+="</select>";f=l.createElement("div");if(!a.aanFeatures.l)f.id=a.sTableId+"_length";f.className=a.oClasses.sLength;f.innerHTML="<label>"+a.oLanguage.sLengthMenu.replace("_MENU_",b)+"</label>";h('select option[value="'+a._iDisplayLength+'"]',f).attr("selected",!0);h("select",f).bind("change.DT",function(){var b=h(this).val(),f=a.aanFeatures.l;for(c=0,d=f.length;c<d;c++)f[c]!=this.parentNode&& 61 | h("select",f[c]).val(b);a._iDisplayLength=parseInt(b,10);B(a);if(a.fnDisplayEnd()==a.fnRecordsDisplay()&&(a._iDisplayStart=a.fnDisplayEnd()-a._iDisplayLength,0>a._iDisplayStart))a._iDisplayStart=0;if(-1==a._iDisplayLength)a._iDisplayStart=0;z(a)});h("select",f).attr("aria-controls",a.sTableId);return f}function B(a){a._iDisplayEnd=!1===a.oFeatures.bPaginate?a.aiDisplay.length:a._iDisplayStart+a._iDisplayLength>a.aiDisplay.length||-1==a._iDisplayLength?a.aiDisplay.length:a._iDisplayStart+a._iDisplayLength} 62 | function Da(a){if(a.oScroll.bInfinite)return null;var b=l.createElement("div");b.className=a.oClasses.sPaging+a.sPaginationType;j.ext.oPagination[a.sPaginationType].fnInit(a,b,function(a){B(a);z(a)});a.aanFeatures.p||a.aoDrawCallback.push({fn:function(a){j.ext.oPagination[a.sPaginationType].fnUpdate(a,function(a){B(a);z(a)})},sName:"pagination"});return b}function pa(a,b){var c=a._iDisplayStart;if("number"===typeof b){if(a._iDisplayStart=b*a._iDisplayLength,a._iDisplayStart>a.fnRecordsDisplay())a._iDisplayStart= 63 | 0}else if("first"==b)a._iDisplayStart=0;else if("previous"==b){if(a._iDisplayStart=0<=a._iDisplayLength?a._iDisplayStart-a._iDisplayLength:0,0>a._iDisplayStart)a._iDisplayStart=0}else if("next"==b)0<=a._iDisplayLength?a._iDisplayStart+a._iDisplayLength<a.fnRecordsDisplay()&&(a._iDisplayStart+=a._iDisplayLength):a._iDisplayStart=0;else if("last"==b)if(0<=a._iDisplayLength){var d=parseInt((a.fnRecordsDisplay()-1)/a._iDisplayLength,10)+1;a._iDisplayStart=(d-1)*a._iDisplayLength}else a._iDisplayStart= 64 | 0;else F(a,0,"Unknown paging action: "+b);h(a.oInstance).trigger("page",a);return c!=a._iDisplayStart}function Aa(a){var b=l.createElement("div");if(!a.aanFeatures.r)b.id=a.sTableId+"_processing";b.innerHTML=a.oLanguage.sProcessing;b.className=a.oClasses.sProcessing;a.nTable.parentNode.insertBefore(b,a.nTable);return b}function G(a,b){if(a.oFeatures.bProcessing)for(var c=a.aanFeatures.r,d=0,f=c.length;d<f;d++)c[d].style.visibility=b?"visible":"hidden";h(a.oInstance).trigger("processing",[a,b])}function Ba(a){if(""=== 65 | a.oScroll.sX&&""===a.oScroll.sY)return a.nTable;var b=l.createElement("div"),c=l.createElement("div"),d=l.createElement("div"),f=l.createElement("div"),g=l.createElement("div"),i=l.createElement("div"),e=a.nTable.cloneNode(!1),j=a.nTable.cloneNode(!1),n=a.nTable.getElementsByTagName("thead")[0],o=0===a.nTable.getElementsByTagName("tfoot").length?null:a.nTable.getElementsByTagName("tfoot")[0],k=a.oClasses;c.appendChild(d);g.appendChild(i);f.appendChild(a.nTable);b.appendChild(c);b.appendChild(f);d.appendChild(e); 66 | e.appendChild(n);null!==o&&(b.appendChild(g),i.appendChild(j),j.appendChild(o));b.className=k.sScrollWrapper;c.className=k.sScrollHead;d.className=k.sScrollHeadInner;f.className=k.sScrollBody;g.className=k.sScrollFoot;i.className=k.sScrollFootInner;if(a.oScroll.bAutoCss)c.style.overflow="hidden",c.style.position="relative",g.style.overflow="hidden",f.style.overflow="auto";c.style.border="0";c.style.width="100%";g.style.border="0";d.style.width=""!==a.oScroll.sXInner?a.oScroll.sXInner:"100%";e.removeAttribute("id"); 67 | e.style.marginLeft="0";a.nTable.style.marginLeft="0";if(null!==o)j.removeAttribute("id"),j.style.marginLeft="0";d=h(a.nTable).children("caption");0<d.length&&(d=d[0],"top"===d._captionSide?e.appendChild(d):"bottom"===d._captionSide&&o&&j.appendChild(d));if(""!==a.oScroll.sX){c.style.width=q(a.oScroll.sX);f.style.width=q(a.oScroll.sX);if(null!==o)g.style.width=q(a.oScroll.sX);h(f).scroll(function(){c.scrollLeft=this.scrollLeft;if(null!==o)g.scrollLeft=this.scrollLeft})}if(""!==a.oScroll.sY)f.style.height= 68 | q(a.oScroll.sY);a.aoDrawCallback.push({fn:Ka,sName:"scrolling"});a.oScroll.bInfinite&&h(f).scroll(function(){!a.bDrawing&&0!==h(this).scrollTop()&&h(this).scrollTop()+h(this).height()>h(a.nTable).height()-a.oScroll.iLoadGap&&a.fnDisplayEnd()<a.fnRecordsDisplay()&&(pa(a,"next"),B(a),z(a))});a.nScrollHead=c;a.nScrollFoot=g;return b}function Ka(a){var b=a.nScrollHead.getElementsByTagName("div")[0],c=b.getElementsByTagName("table")[0],d=a.nTable.parentNode,f,g,i,e,j,n,o,k,m=[],s=null!==a.nTFoot?a.nScrollFoot.getElementsByTagName("div")[0]: 69 | null,p=null!==a.nTFoot?s.getElementsByTagName("table")[0]:null,l=h.browser.msie&&7>=h.browser.version;h(a.nTable).children("thead, tfoot").remove();i=h(a.nTHead).clone()[0];a.nTable.insertBefore(i,a.nTable.childNodes[0]);null!==a.nTFoot&&(j=h(a.nTFoot).clone()[0],a.nTable.insertBefore(j,a.nTable.childNodes[1]));if(""===a.oScroll.sX)d.style.width="100%",b.parentNode.style.width="100%";var r=O(a,i);for(f=0,g=r.length;f<g;f++)o=x(a,f),r[f].style.width=a.aoColumns[o].sWidth;null!==a.nTFoot&&N(function(a){a.style.width= 70 | ""},j.getElementsByTagName("tr"));if(a.oScroll.bCollapse&&""!==a.oScroll.sY)d.style.height=d.offsetHeight+a.nTHead.offsetHeight+"px";f=h(a.nTable).outerWidth();if(""===a.oScroll.sX){if(a.nTable.style.width="100%",l&&(h("tbody",d).height()>d.offsetHeight||"scroll"==h(d).css("overflow-y")))a.nTable.style.width=q(h(a.nTable).outerWidth()-a.oScroll.iBarWidth)}else if(""!==a.oScroll.sXInner)a.nTable.style.width=q(a.oScroll.sXInner);else if(f==h(d).width()&&h(d).height()<h(a.nTable).height()){if(a.nTable.style.width= 71 | q(f-a.oScroll.iBarWidth),h(a.nTable).outerWidth()>f-a.oScroll.iBarWidth)a.nTable.style.width=q(f)}else a.nTable.style.width=q(f);f=h(a.nTable).outerWidth();g=a.nTHead.getElementsByTagName("tr");i=i.getElementsByTagName("tr");N(function(a,b){n=a.style;n.paddingTop="0";n.paddingBottom="0";n.borderTopWidth="0";n.borderBottomWidth="0";n.height=0;k=h(a).width();b.style.width=q(k);m.push(k)},i,g);h(i).height(0);null!==a.nTFoot&&(e=j.getElementsByTagName("tr"),j=a.nTFoot.getElementsByTagName("tr"),N(function(a, 72 | b){n=a.style;n.paddingTop="0";n.paddingBottom="0";n.borderTopWidth="0";n.borderBottomWidth="0";n.height=0;k=h(a).width();b.style.width=q(k);m.push(k)},e,j),h(e).height(0));N(function(a){a.innerHTML="";a.style.width=q(m.shift())},i);null!==a.nTFoot&&N(function(a){a.innerHTML="";a.style.width=q(m.shift())},e);if(h(a.nTable).outerWidth()<f){e=d.scrollHeight>d.offsetHeight||"scroll"==h(d).css("overflow-y")?f+a.oScroll.iBarWidth:f;if(l&&(d.scrollHeight>d.offsetHeight||"scroll"==h(d).css("overflow-y")))a.nTable.style.width= 73 | q(e-a.oScroll.iBarWidth);d.style.width=q(e);b.parentNode.style.width=q(e);if(null!==a.nTFoot)s.parentNode.style.width=q(e);""===a.oScroll.sX?F(a,1,"The table cannot fit into the current element which will cause column misalignment. The table has been drawn at its minimum possible width."):""!==a.oScroll.sXInner&&F(a,1,"The table cannot fit into the current element which will cause column misalignment. Increase the sScrollXInner value or remove it to allow automatic calculation")}else if(d.style.width= 74 | q("100%"),b.parentNode.style.width=q("100%"),null!==a.nTFoot)s.parentNode.style.width=q("100%");if(""===a.oScroll.sY&&l)d.style.height=q(a.nTable.offsetHeight+a.oScroll.iBarWidth);if(""!==a.oScroll.sY&&a.oScroll.bCollapse&&(d.style.height=q(a.oScroll.sY),l=""!==a.oScroll.sX&&a.nTable.offsetWidth>d.offsetWidth?a.oScroll.iBarWidth:0,a.nTable.offsetHeight<d.offsetHeight))d.style.height=q(a.nTable.offsetHeight+l);l=h(a.nTable).outerWidth();c.style.width=q(l);b.style.width=q(l);c=h(a.nTable).height()> 75 | d.clientHeight||"scroll"==h(d).css("overflow-y");b.style.paddingRight=c?a.oScroll.iBarWidth+"px":"0px";if(null!==a.nTFoot)p.style.width=q(l),s.style.width=q(l),s.style.paddingRight=c?a.oScroll.iBarWidth+"px":"0px";h(d).scroll();if(a.bSorted||a.bFiltered)d.scrollTop=0}function N(a,b,c){for(var d=0,f=b.length;d<f;d++)for(var g=0,i=b[d].childNodes.length;g<i;g++)1==b[d].childNodes[g].nodeType&&(c?a(b[d].childNodes[g],c[d].childNodes[g]):a(b[d].childNodes[g]))}function La(a,b){if(!a||null===a||""===a)return 0; 76 | b||(b=l.getElementsByTagName("body")[0]);var c,d=l.createElement("div");d.style.width=q(a);b.appendChild(d);c=d.offsetWidth;b.removeChild(d);return c}function ba(a){var b=0,c,d=0,f=a.aoColumns.length,g,i=h("th",a.nTHead),e=a.nTable.getAttribute("width");for(g=0;g<f;g++)if(a.aoColumns[g].bVisible&&(d++,null!==a.aoColumns[g].sWidth)){c=La(a.aoColumns[g].sWidthOrig,a.nTable.parentNode);if(null!==c)a.aoColumns[g].sWidth=q(c);b++}if(f==i.length&&0===b&&d==f&&""===a.oScroll.sX&&""===a.oScroll.sY)for(g= 77 | 0;g<a.aoColumns.length;g++){if(c=h(i[g]).width(),null!==c)a.aoColumns[g].sWidth=q(c)}else{b=a.nTable.cloneNode(!1);g=a.nTHead.cloneNode(!0);d=l.createElement("tbody");c=l.createElement("tr");b.removeAttribute("id");b.appendChild(g);null!==a.nTFoot&&(b.appendChild(a.nTFoot.cloneNode(!0)),N(function(a){a.style.width=""},b.getElementsByTagName("tr")));b.appendChild(d);d.appendChild(c);d=h("thead th",b);0===d.length&&(d=h("tbody tr:eq(0)>td",b));i=O(a,g);for(g=d=0;g<f;g++){var j=a.aoColumns[g];j.bVisible&& 78 | null!==j.sWidthOrig&&""!==j.sWidthOrig?i[g-d].style.width=q(j.sWidthOrig):j.bVisible?i[g-d].style.width="":d++}for(g=0;g<f;g++)a.aoColumns[g].bVisible&&(d=Ma(a,g),null!==d&&(d=d.cloneNode(!0),""!==a.aoColumns[g].sContentPadding&&(d.innerHTML+=a.aoColumns[g].sContentPadding),c.appendChild(d)));f=a.nTable.parentNode;f.appendChild(b);if(""!==a.oScroll.sX&&""!==a.oScroll.sXInner)b.style.width=q(a.oScroll.sXInner);else if(""!==a.oScroll.sX){if(b.style.width="",h(b).width()<f.offsetWidth)b.style.width= 79 | q(f.offsetWidth)}else if(""!==a.oScroll.sY)b.style.width=q(f.offsetWidth);else if(e)b.style.width=q(e);b.style.visibility="hidden";Na(a,b);f=h("tbody tr:eq(0)",b).children();0===f.length&&(f=O(a,h("thead",b)[0]));if(""!==a.oScroll.sX){for(g=d=c=0;g<a.aoColumns.length;g++)a.aoColumns[g].bVisible&&(c=null===a.aoColumns[g].sWidthOrig?c+h(f[d]).outerWidth():c+(parseInt(a.aoColumns[g].sWidth.replace("px",""),10)+(h(f[d]).outerWidth()-h(f[d]).width())),d++);b.style.width=q(c);a.nTable.style.width=q(c)}for(g= 80 | d=0;g<a.aoColumns.length;g++)if(a.aoColumns[g].bVisible){c=h(f[d]).width();if(null!==c&&0<c)a.aoColumns[g].sWidth=q(c);d++}f=h(b).css("width");a.nTable.style.width=-1!==f.indexOf("%")?f:q(h(b).outerWidth());b.parentNode.removeChild(b)}if(e)a.nTable.style.width=q(e)}function Na(a,b){if(""===a.oScroll.sX&&""!==a.oScroll.sY)h(b).width(),b.style.width=q(h(b).outerWidth()-a.oScroll.iBarWidth);else if(""!==a.oScroll.sX)b.style.width=q(h(b).outerWidth())}function Ma(a,b){var c=Oa(a,b);if(0>c)return null; 81 | if(null===a.aoData[c].nTr){var d=l.createElement("td");d.innerHTML=w(a,c,b,"");return d}return L(a,c)[b]}function Oa(a,b){for(var c=-1,d=-1,f=0;f<a.aoData.length;f++){var g=w(a,f,b,"display")+"",g=g.replace(/<.*?>/g,"");if(g.length>c)c=g.length,d=f}return d}function q(a){if(null===a)return"0px";if("number"==typeof a)return 0>a?"0px":a+"px";var b=a.charCodeAt(a.length-1);return 48>b||57<b?a:a+"px"}function Pa(){var a=l.createElement("p"),b=a.style;b.width="100%";b.height="200px";b.padding="0px";var c= 82 | l.createElement("div"),b=c.style;b.position="absolute";b.top="0px";b.left="0px";b.visibility="hidden";b.width="200px";b.height="150px";b.padding="0px";b.overflow="hidden";c.appendChild(a);l.body.appendChild(c);b=a.offsetWidth;c.style.overflow="scroll";a=a.offsetWidth;if(b==a)a=c.clientWidth;l.body.removeChild(c);return b-a}function P(a,b){var c,d,f,g,i,e,o=[],n=[],k=j.ext.oSort,s=a.aoData,l=a.aoColumns,p=a.oLanguage.oAria;if(!a.oFeatures.bServerSide&&(0!==a.aaSorting.length||null!==a.aaSortingFixed)){o= 83 | null!==a.aaSortingFixed?a.aaSortingFixed.concat(a.aaSorting):a.aaSorting.slice();for(c=0;c<o.length;c++)if(d=o[c][0],f=r(a,d),g=a.aoColumns[d].sSortDataType,j.ext.afnSortData[g])if(i=j.ext.afnSortData[g].call(a.oInstance,a,d,f),i.length===s.length)for(f=0,g=s.length;f<g;f++)I(a,f,d,i[f]);else F(a,0,"Returned data sort array (col "+d+") is the wrong length");for(c=0,d=a.aiDisplayMaster.length;c<d;c++)n[a.aiDisplayMaster[c]]=c;var q=o.length,x;for(c=0,d=s.length;c<d;c++)for(f=0;f<q;f++){x=l[o[f][0]].aDataSort; 84 | for(i=0,e=x.length;i<e;i++)g=l[x[i]].sType,g=k[(g?g:"string")+"-pre"],s[c]._aSortData[x[i]]=g?g(w(a,c,x[i],"sort")):w(a,c,x[i],"sort")}a.aiDisplayMaster.sort(function(a,b){var c,d,f,g,i;for(c=0;c<q;c++){i=l[o[c][0]].aDataSort;for(d=0,f=i.length;d<f;d++)if(g=l[i[d]].sType,g=k[(g?g:"string")+"-"+o[c][1]](s[a]._aSortData[i[d]],s[b]._aSortData[i[d]]),0!==g)return g}return k["numeric-asc"](n[a],n[b])})}(b===m||b)&&!a.oFeatures.bDeferRender&&Q(a);for(c=0,d=a.aoColumns.length;c<d;c++)g=l[c].sTitle.replace(/<.*?>/g, 85 | ""),f=l[c].nTh,f.removeAttribute("aria-sort"),f.removeAttribute("aria-label"),l[c].bSortable?0<o.length&&o[0][0]==c?(f.setAttribute("aria-sort","asc"==o[0][1]?"ascending":"descending"),f.setAttribute("aria-label",g+("asc"==(l[c].asSorting[o[0][2]+1]?l[c].asSorting[o[0][2]+1]:l[c].asSorting[0])?p.sSortAscending:p.sSortDescending))):f.setAttribute("aria-label",g+("asc"==l[c].asSorting[0]?p.sSortAscending:p.sSortDescending)):f.setAttribute("aria-label",g);a.bSorted=!0;h(a.oInstance).trigger("sort",a); 86 | a.oFeatures.bFilter?M(a,a.oPreviousSearch,1):(a.aiDisplay=a.aiDisplayMaster.slice(),a._iDisplayStart=0,B(a),z(a))}function ga(a,b,c,d){Qa(b,{},function(b){if(!1!==a.aoColumns[c].bSortable){var g=function(){var d,g;if(b.shiftKey){for(var e=!1,h=0;h<a.aaSorting.length;h++)if(a.aaSorting[h][0]==c){e=!0;d=a.aaSorting[h][0];g=a.aaSorting[h][2]+1;a.aoColumns[d].asSorting[g]?(a.aaSorting[h][1]=a.aoColumns[d].asSorting[g],a.aaSorting[h][2]=g):a.aaSorting.splice(h,1);break}!1===e&&a.aaSorting.push([c,a.aoColumns[c].asSorting[0], 87 | 0])}else 1==a.aaSorting.length&&a.aaSorting[0][0]==c?(d=a.aaSorting[0][0],g=a.aaSorting[0][2]+1,a.aoColumns[d].asSorting[g]||(g=0),a.aaSorting[0][1]=a.aoColumns[d].asSorting[g],a.aaSorting[0][2]=g):(a.aaSorting.splice(0,a.aaSorting.length),a.aaSorting.push([c,a.aoColumns[c].asSorting[0],0]));P(a)};a.oFeatures.bProcessing?(G(a,!0),setTimeout(function(){g();a.oFeatures.bServerSide||G(a,!1)},0)):g();"function"==typeof d&&d(a)}})}function Q(a){var b,c,d,f,g,e=a.aoColumns.length,j=a.oClasses;for(b=0;b< 88 | e;b++)a.aoColumns[b].bSortable&&h(a.aoColumns[b].nTh).removeClass(j.sSortAsc+" "+j.sSortDesc+" "+a.aoColumns[b].sSortingClass);f=null!==a.aaSortingFixed?a.aaSortingFixed.concat(a.aaSorting):a.aaSorting.slice();for(b=0;b<a.aoColumns.length;b++)if(a.aoColumns[b].bSortable){g=a.aoColumns[b].sSortingClass;d=-1;for(c=0;c<f.length;c++)if(f[c][0]==b){g="asc"==f[c][1]?j.sSortAsc:j.sSortDesc;d=c;break}h(a.aoColumns[b].nTh).addClass(g);a.bJUI&&(c=h("span."+j.sSortIcon,a.aoColumns[b].nTh),c.removeClass(j.sSortJUIAsc+ 89 | " "+j.sSortJUIDesc+" "+j.sSortJUI+" "+j.sSortJUIAscAllowed+" "+j.sSortJUIDescAllowed),c.addClass(-1==d?a.aoColumns[b].sSortingClassJUI:"asc"==f[d][1]?j.sSortJUIAsc:j.sSortJUIDesc))}else h(a.aoColumns[b].nTh).addClass(a.aoColumns[b].sSortingClass);g=j.sSortColumn;if(a.oFeatures.bSort&&a.oFeatures.bSortClasses){d=L(a);if(a.oFeatures.bDeferRender)h(d).removeClass(g+"1 "+g+"2 "+g+"3");else if(d.length>=e)for(b=0;b<e;b++)if(-1!=d[b].className.indexOf(g+"1"))for(c=0,a=d.length/e;c<a;c++)d[e*c+b].className= 90 | h.trim(d[e*c+b].className.replace(g+"1",""));else if(-1!=d[b].className.indexOf(g+"2"))for(c=0,a=d.length/e;c<a;c++)d[e*c+b].className=h.trim(d[e*c+b].className.replace(g+"2",""));else if(-1!=d[b].className.indexOf(g+"3"))for(c=0,a=d.length/e;c<a;c++)d[e*c+b].className=h.trim(d[e*c+b].className.replace(" "+g+"3",""));var j=1,o;for(b=0;b<f.length;b++){o=parseInt(f[b][0],10);for(c=0,a=d.length/e;c<a;c++)d[e*c+o].className+=" "+g+j;3>j&&j++}}}function qa(a){if(a.oFeatures.bStateSave&&!a.bDestroying){var b, 91 | c;b=a.oScroll.bInfinite;var d={iCreate:(new Date).getTime(),iStart:b?0:a._iDisplayStart,iEnd:b?a._iDisplayLength:a._iDisplayEnd,iLength:a._iDisplayLength,aaSorting:h.extend(!0,[],a.aaSorting),oSearch:h.extend(!0,{},a.oPreviousSearch),aoSearchCols:h.extend(!0,[],a.aoPreSearchCols),abVisCols:[]};for(b=0,c=a.aoColumns.length;b<c;b++)d.abVisCols.push(a.aoColumns[b].bVisible);D(a,"aoStateSaveParams","stateSaveParams",[a,d]);a.fnStateSave.call(a.oInstance,a,d)}}function Ra(a,b){if(a.oFeatures.bStateSave){var c= 92 | a.fnStateLoad.call(a.oInstance,a);if(c){var d=D(a,"aoStateLoadParams","stateLoadParams",[a,c]);if(-1===h.inArray(!1,d)){a.oLoadedState=h.extend(!0,{},c);a._iDisplayStart=c.iStart;a.iInitDisplayStart=c.iStart;a._iDisplayEnd=c.iEnd;a._iDisplayLength=c.iLength;a.aaSorting=c.aaSorting.slice();a.saved_aaSorting=c.aaSorting.slice();h.extend(a.oPreviousSearch,c.oSearch);h.extend(!0,a.aoPreSearchCols,c.aoSearchCols);b.saved_aoColumns=[];for(d=0;d<c.abVisCols.length;d++)b.saved_aoColumns[d]={},b.saved_aoColumns[d].bVisible= 93 | c.abVisCols[d];D(a,"aoStateLoaded","stateLoaded",[a,c])}}}}function Sa(a){for(var b=V.location.pathname.split("/"),a=a+"_"+b[b.length-1].replace(/[\/:]/g,"").toLowerCase()+"=",b=l.cookie.split(";"),c=0;c<b.length;c++){for(var d=b[c];" "==d.charAt(0);)d=d.substring(1,d.length);if(0===d.indexOf(a))return decodeURIComponent(d.substring(a.length,d.length))}return null}function t(a){for(var b=0;b<j.settings.length;b++)if(j.settings[b].nTable===a)return j.settings[b];return null}function S(a){for(var b= 94 | [],a=a.aoData,c=0,d=a.length;c<d;c++)null!==a[c].nTr&&b.push(a[c].nTr);return b}function L(a,b){var c=[],d,f,g,e,h,j;f=0;var o=a.aoData.length;b!==m&&(f=b,o=b+1);for(g=f;g<o;g++)if(j=a.aoData[g],null!==j.nTr){f=[];for(e=0,h=j.nTr.childNodes.length;e<h;e++)d=j.nTr.childNodes[e].nodeName.toLowerCase(),("td"==d||"th"==d)&&f.push(j.nTr.childNodes[e]);d=0;for(e=0,h=a.aoColumns.length;e<h;e++)a.aoColumns[e].bVisible?c.push(f[e-d]):(c.push(j._anHidden[e]),d++)}return c}function F(a,b,c){a=null===a?"DataTables warning: "+ 95 | c:"DataTables warning (table id = '"+a.sTableId+"'): "+c;if(0===b)if("alert"==j.ext.sErrMode)alert(a);else throw Error(a);else V.console&&console.log&&console.log(a)}function p(a,b,c,d){d===m&&(d=c);b[c]!==m&&(a[d]=b[c])}function Ta(a,b){for(var c in b)b.hasOwnProperty(c)&&("object"===typeof e[c]&&!1===h.isArray(b[c])?h.extend(!0,a[c],b[c]):a[c]=b[c]);return a}function Qa(a,b,c){h(a).bind("click.DT",b,function(b){a.blur();c(b)}).bind("keypress.DT",b,function(a){13===a.which&&c(a)}).bind("selectstart.DT", 96 | function(){return!1})}function C(a,b,c,d){c&&a[b].push({fn:c,sName:d})}function D(a,b,c,d){for(var b=a[b],f=[],g=b.length-1;0<=g;g--)f.push(b[g].fn.apply(a.oInstance,d));null!==c&&h(a.oInstance).trigger(c,d);return f}function Ua(a){return function(){var b=[t(this[j.ext.iApiIndex])].concat(Array.prototype.slice.call(arguments));return j.ext.oApi[a].apply(this,b)}}var Va=V.JSON?JSON.stringify:function(a){var b=typeof a;if("object"!==b||null===a)return"string"===b&&(a='"'+a+'"'),a+"";var c,d,f=[],g= 97 | h.isArray(a);for(c in a)d=a[c],b=typeof d,"string"===b?d='"'+d+'"':"object"===b&&null!==d&&(d=Va(d)),f.push((g?"":'"'+c+'":')+d);return(g?"[":"{")+f+(g?"]":"}")};this.$=function(a,b){var c,d,f=[],g=t(this[j.ext.iApiIndex]);b||(b={});b=h.extend({},{filter:"none",order:"current",page:"all"},b);if("current"==b.page)for(c=g._iDisplayStart,d=g.fnDisplayEnd();c<d;c++)f.push(g.aoData[g.aiDisplay[c]].nTr);else if("current"==b.order&&"none"==b.filter)for(c=0,d=g.aiDisplayMaster.length;c<d;c++)f.push(g.aoData[g.aiDisplayMaster[c]].nTr); 98 | else if("current"==b.order&&"applied"==b.filter)for(c=0,d=g.aiDisplay.length;c<d;c++)f.push(g.aoData[g.aiDisplay[c]].nTr);else if("original"==b.order&&"none"==b.filter)for(c=0,d=g.aoData.length;c<d;c++)f.push(g.aoData[c].nTr);else if("original"==b.order&&"applied"==b.filter)for(c=0,d=g.aoData.length;c<d;c++)-1!==h.inArray(c,g.aiDisplay)&&f.push(g.aoData[c].nTr);else F(g,1,"Unknown selection options");d=h(f);c=d.filter(a);d=d.find(a);return h([].concat(h.makeArray(c),h.makeArray(d)))};this._=function(a, 99 | b){var c=[],d,f,g=this.$(a,b);for(d=0,f=g.length;d<f;d++)c.push(this.fnGetData(g[d]));return c};this.fnAddData=function(a,b){if(0===a.length)return[];var c=[],d,f=t(this[j.ext.iApiIndex]);if("object"===typeof a[0]&&null!==a[0])for(var g=0;g<a.length;g++){d=H(f,a[g]);if(-1==d)return c;c.push(d)}else{d=H(f,a);if(-1==d)return c;c.push(d)}f.aiDisplay=f.aiDisplayMaster.slice();(b===m||b)&&$(f);return c};this.fnAdjustColumnSizing=function(a){var b=t(this[j.ext.iApiIndex]);k(b);a===m||a?this.fnDraw(!1): 100 | (""!==b.oScroll.sX||""!==b.oScroll.sY)&&this.oApi._fnScrollDraw(b)};this.fnClearTable=function(a){var b=t(this[j.ext.iApiIndex]);ea(b);(a===m||a)&&z(b)};this.fnClose=function(a){for(var b=t(this[j.ext.iApiIndex]),c=0;c<b.aoOpenRows.length;c++)if(b.aoOpenRows[c].nParent==a)return(a=b.aoOpenRows[c].nTr.parentNode)&&a.removeChild(b.aoOpenRows[c].nTr),b.aoOpenRows.splice(c,1),0;return 1};this.fnDeleteRow=function(a,b,c){var d=t(this[j.ext.iApiIndex]),f,g,a="object"===typeof a?K(d,a):a,e=d.aoData.splice(a, 101 | 1);for(f=0,g=d.aoData.length;f<g;f++)if(null!==d.aoData[f].nTr)d.aoData[f].nTr._DT_RowIndex=f;f=h.inArray(a,d.aiDisplay);d.asDataSearch.splice(f,1);fa(d.aiDisplayMaster,a);fa(d.aiDisplay,a);"function"===typeof b&&b.call(this,d,e);if(d._iDisplayStart>=d.aiDisplay.length&&(d._iDisplayStart-=d._iDisplayLength,0>d._iDisplayStart))d._iDisplayStart=0;if(c===m||c)B(d),z(d);return e};this.fnDestroy=function(a){var b=t(this[j.ext.iApiIndex]),c=b.nTableWrapper.parentNode,d=b.nTBody,f,g,a=a===m?!1:!0;b.bDestroying= 102 | !0;D(b,"aoDestroyCallback","destroy",[b]);for(f=0,g=b.aoColumns.length;f<g;f++)!1===b.aoColumns[f].bVisible&&this.fnSetColumnVis(f,!0);h(b.nTableWrapper).find("*").andSelf().unbind(".DT");h("tbody>tr>td."+b.oClasses.sRowEmpty,b.nTable).parent().remove();b.nTable!=b.nTHead.parentNode&&(h(b.nTable).children("thead").remove(),b.nTable.appendChild(b.nTHead));b.nTFoot&&b.nTable!=b.nTFoot.parentNode&&(h(b.nTable).children("tfoot").remove(),b.nTable.appendChild(b.nTFoot));b.nTable.parentNode.removeChild(b.nTable); 103 | h(b.nTableWrapper).remove();b.aaSorting=[];b.aaSortingFixed=[];Q(b);h(S(b)).removeClass(b.asStripeClasses.join(" "));h("th, td",b.nTHead).removeClass([b.oClasses.sSortable,b.oClasses.sSortableAsc,b.oClasses.sSortableDesc,b.oClasses.sSortableNone].join(" "));b.bJUI&&(h("th span."+b.oClasses.sSortIcon+", td span."+b.oClasses.sSortIcon,b.nTHead).remove(),h("th, td",b.nTHead).each(function(){var a=h("div."+b.oClasses.sSortJUIWrapper,this),c=a.contents();h(this).append(c);a.remove()}));!a&&b.nTableReinsertBefore? 104 | c.insertBefore(b.nTable,b.nTableReinsertBefore):a||c.appendChild(b.nTable);for(f=0,g=b.aoData.length;f<g;f++)null!==b.aoData[f].nTr&&d.appendChild(b.aoData[f].nTr);if(!0===b.oFeatures.bAutoWidth)b.nTable.style.width=q(b.sDestroyWidth);h(d).children("tr:even").addClass(b.asDestroyStripes[0]);h(d).children("tr:odd").addClass(b.asDestroyStripes[1]);for(f=0,g=j.settings.length;f<g;f++)j.settings[f]==b&&j.settings.splice(f,1);b=null};this.fnDraw=function(a){var b=t(this[j.ext.iApiIndex]);!1===a?(B(b), 105 | z(b)):$(b)};this.fnFilter=function(a,b,c,d,f,g){var e=t(this[j.ext.iApiIndex]);if(e.oFeatures.bFilter){if(c===m||null===c)c=!1;if(d===m||null===d)d=!0;if(f===m||null===f)f=!0;if(g===m||null===g)g=!0;if(b===m||null===b){if(M(e,{sSearch:a+"",bRegex:c,bSmart:d,bCaseInsensitive:g},1),f&&e.aanFeatures.f){b=e.aanFeatures.f;c=0;for(d=b.length;c<d;c++)h(b[c]._DT_Input).val(a)}}else h.extend(e.aoPreSearchCols[b],{sSearch:a+"",bRegex:c,bSmart:d,bCaseInsensitive:g}),M(e,e.oPreviousSearch,1)}};this.fnGetData= 106 | function(a,b){var c=t(this[j.ext.iApiIndex]);if(a!==m){var d=a;if("object"===typeof a){var f=a.nodeName.toLowerCase();"tr"===f?d=K(c,a):"td"===f&&(d=K(c,a.parentNode),b=da(c,d,a))}return b!==m?w(c,d,b,""):c.aoData[d]!==m?c.aoData[d]._aData:null}return Y(c)};this.fnGetNodes=function(a){var b=t(this[j.ext.iApiIndex]);return a!==m?b.aoData[a]!==m?b.aoData[a].nTr:null:S(b)};this.fnGetPosition=function(a){var b=t(this[j.ext.iApiIndex]),c=a.nodeName.toUpperCase();if("TR"==c)return K(b,a);return"TD"==c|| 107 | "TH"==c?(c=K(b,a.parentNode),a=da(b,c,a),[c,r(b,a),a]):null};this.fnIsOpen=function(a){for(var b=t(this[j.ext.iApiIndex]),c=0;c<b.aoOpenRows.length;c++)if(b.aoOpenRows[c].nParent==a)return!0;return!1};this.fnOpen=function(a,b,c){var d=t(this[j.ext.iApiIndex]),f=S(d);if(-1!==h.inArray(a,f)){this.fnClose(a);var f=l.createElement("tr"),g=l.createElement("td");f.appendChild(g);g.className=c;g.colSpan=v(d);"string"===typeof b?g.innerHTML=b:h(g).html(b);b=h("tr",d.nTBody);-1!=h.inArray(a,b)&&h(f).insertAfter(a); 108 | d.aoOpenRows.push({nTr:f,nParent:a});return f}};this.fnPageChange=function(a,b){var c=t(this[j.ext.iApiIndex]);pa(c,a);B(c);(b===m||b)&&z(c)};this.fnSetColumnVis=function(a,b,c){var d=t(this[j.ext.iApiIndex]),f,g,e=d.aoColumns,h=d.aoData,o,n;if(e[a].bVisible!=b){if(b){for(f=g=0;f<a;f++)e[f].bVisible&&g++;n=g>=v(d);if(!n)for(f=a;f<e.length;f++)if(e[f].bVisible){o=f;break}for(f=0,g=h.length;f<g;f++)null!==h[f].nTr&&(n?h[f].nTr.appendChild(h[f]._anHidden[a]):h[f].nTr.insertBefore(h[f]._anHidden[a],L(d, 109 | f)[o]))}else for(f=0,g=h.length;f<g;f++)null!==h[f].nTr&&(o=L(d,f)[a],h[f]._anHidden[a]=o,o.parentNode.removeChild(o));e[a].bVisible=b;U(d,d.aoHeader);d.nTFoot&&U(d,d.aoFooter);for(f=0,g=d.aoOpenRows.length;f<g;f++)d.aoOpenRows[f].nTr.colSpan=v(d);if(c===m||c)k(d),z(d);qa(d)}};this.fnSettings=function(){return t(this[j.ext.iApiIndex])};this.fnSort=function(a){var b=t(this[j.ext.iApiIndex]);b.aaSorting=a;P(b)};this.fnSortListener=function(a,b,c){ga(t(this[j.ext.iApiIndex]),a,b,c)};this.fnUpdate=function(a, 110 | b,c,d,f){var e=t(this[j.ext.iApiIndex]),b="object"===typeof b?K(e,b):b;if(e.__fnUpdateDeep===m&&h.isArray(a)&&"object"===typeof a){e.aoData[b]._aData=a.slice();e.__fnUpdateDeep=!0;for(c=0;c<e.aoColumns.length;c++)this.fnUpdate(w(e,b,c),b,c,!1,!1);e.__fnUpdateDeep=m}else if(e.__fnUpdateDeep===m&&null!==a&&"object"===typeof a){e.aoData[b]._aData=h.extend(!0,{},a);e.__fnUpdateDeep=!0;for(c=0;c<e.aoColumns.length;c++)this.fnUpdate(w(e,b,c),b,c,!1,!1);e.__fnUpdateDeep=m}else{I(e,b,c,a);var a=w(e,b,c,"display"), 111 | i=e.aoColumns[c];null!==i.fnRender&&(a=R(e,b,c),i.bUseRendered&&I(e,b,c,a));if(null!==e.aoData[b].nTr)L(e,b)[c].innerHTML=a}c=h.inArray(b,e.aiDisplay);e.asDataSearch[c]=ma(e,X(e,b,"filter"));(f===m||f)&&k(e);(d===m||d)&&$(e);return 0};this.fnVersionCheck=j.ext.fnVersionCheck;this.oApi={_fnExternApiFunc:Ua,_fnInitialise:aa,_fnInitComplete:Z,_fnLanguageCompat:oa,_fnAddColumn:o,_fnColumnOptions:s,_fnAddData:H,_fnCreateTr:ca,_fnGatherData:ua,_fnBuildHead:va,_fnDrawHead:U,_fnDraw:z,_fnReDraw:$,_fnAjaxUpdate:wa, 112 | _fnAjaxParameters:Ea,_fnAjaxUpdateDraw:Fa,_fnServerParams:ia,_fnAddOptionsHtml:xa,_fnFeatureHtmlTable:Ba,_fnScrollDraw:Ka,_fnAdjustColumnSizing:k,_fnFeatureHtmlFilter:za,_fnFilterComplete:M,_fnFilterCustom:Ia,_fnFilterColumn:Ha,_fnFilter:Ga,_fnBuildSearchArray:ja,_fnBuildSearchRow:ma,_fnFilterCreateSearch:ka,_fnDataToSearch:la,_fnSort:P,_fnSortAttachListener:ga,_fnSortingClasses:Q,_fnFeatureHtmlPaginate:Da,_fnPageChange:pa,_fnFeatureHtmlInfo:Ca,_fnUpdateInfo:Ja,_fnFeatureHtmlLength:ya,_fnFeatureHtmlProcessing:Aa, 113 | _fnProcessingDisplay:G,_fnVisibleToColumnIndex:x,_fnColumnIndexToVisible:r,_fnNodeToDataIndex:K,_fnVisbleColumns:v,_fnCalculateEnd:B,_fnConvertToWidth:La,_fnCalculateColumnWidths:ba,_fnScrollingWidthAdjust:Na,_fnGetWidestNode:Ma,_fnGetMaxLenString:Oa,_fnStringToCss:q,_fnDetectType:A,_fnSettingsFromNode:t,_fnGetDataMaster:Y,_fnGetTrNodes:S,_fnGetTdNodes:L,_fnEscapeRegex:na,_fnDeleteIndex:fa,_fnReOrderIndex:E,_fnColumnOrdering:y,_fnLog:F,_fnClearTable:ea,_fnSaveState:qa,_fnLoadState:Ra,_fnCreateCookie:function(a, 114 | b,c,d,e){var g=new Date;g.setTime(g.getTime()+1E3*c);var c=V.location.pathname.split("/"),a=a+"_"+c.pop().replace(/[\/:]/g,"").toLowerCase(),i;null!==e?(i="function"===typeof h.parseJSON?h.parseJSON(b):eval("("+b+")"),b=e(a,i,g.toGMTString(),c.join("/")+"/")):b=a+"="+encodeURIComponent(b)+"; expires="+g.toGMTString()+"; path="+c.join("/")+"/";e="";g=9999999999999;if(4096<(null!==Sa(a)?l.cookie.length:b.length+l.cookie.length)+10){for(var a=l.cookie.split(";"),j=0,o=a.length;j<o;j++)if(-1!=a[j].indexOf(d)){var k= 115 | a[j].split("=");try{i=eval("("+decodeURIComponent(k[1])+")")}catch(m){continue}if(i.iCreate&&i.iCreate<g)e=k[0],g=i.iCreate}if(""!==e)l.cookie=e+"=; expires=Thu, 01-Jan-1970 00:00:01 GMT; path="+c.join("/")+"/"}l.cookie=b},_fnReadCookie:Sa,_fnDetectHeader:T,_fnGetUniqueThs:O,_fnScrollBarWidth:Pa,_fnApplyToChildren:N,_fnMap:p,_fnGetRowData:X,_fnGetCellData:w,_fnSetCellData:I,_fnGetObjectDataFn:W,_fnSetObjectDataFn:ta,_fnApplyColumnDefs:J,_fnBindAction:Qa,_fnExtend:Ta,_fnCallbackReg:C,_fnCallbackFire:D, 116 | _fnJsonString:Va,_fnRender:R,_fnNodeToColumnIndex:da,_fnInfoMacros:ha};h.extend(j.ext.oApi,this.oApi);for(var ra in j.ext.oApi)ra&&(this[ra]=Ua(ra));var sa=this;return this.each(function(){var a=0,b,c,d;c=this.getAttribute("id");var f=!1,g=!1;if("table"!=this.nodeName.toLowerCase())F(null,0,"Attempted to initialise DataTables on a node which is not a table: "+this.nodeName);else{for(a=0,b=j.settings.length;a<b;a++){if(j.settings[a].nTable==this){if(e===m||e.bRetrieve)return j.settings[a].oInstance; 117 | if(e.bDestroy){j.settings[a].oInstance.fnDestroy();break}else{F(j.settings[a],0,"Cannot reinitialise DataTable.\n\nTo retrieve the DataTables object for this table, pass no arguments or see the docs for bRetrieve and bDestroy");return}}if(j.settings[a].sTableId==this.id){j.settings.splice(a,1);break}}if(null===c||""===c)this.id=c="DataTables_Table_"+j.ext._oExternConfig.iNextUnique++;var i=h.extend(!0,{},j.models.oSettings,{nTable:this,oApi:sa.oApi,oInit:e,sDestroyWidth:h(this).width(),sInstance:c, 118 | sTableId:c});j.settings.push(i);i.oInstance=1===sa.length?sa:h(this).dataTable();e||(e={});e.oLanguage&&oa(e.oLanguage);e=Ta(h.extend(!0,{},j.defaults),e);p(i.oFeatures,e,"bPaginate");p(i.oFeatures,e,"bLengthChange");p(i.oFeatures,e,"bFilter");p(i.oFeatures,e,"bSort");p(i.oFeatures,e,"bInfo");p(i.oFeatures,e,"bProcessing");p(i.oFeatures,e,"bAutoWidth");p(i.oFeatures,e,"bSortClasses");p(i.oFeatures,e,"bServerSide");p(i.oFeatures,e,"bDeferRender");p(i.oScroll,e,"sScrollX","sX");p(i.oScroll,e,"sScrollXInner", 119 | "sXInner");p(i.oScroll,e,"sScrollY","sY");p(i.oScroll,e,"bScrollCollapse","bCollapse");p(i.oScroll,e,"bScrollInfinite","bInfinite");p(i.oScroll,e,"iScrollLoadGap","iLoadGap");p(i.oScroll,e,"bScrollAutoCss","bAutoCss");p(i,e,"asStripeClasses");p(i,e,"asStripClasses","asStripeClasses");p(i,e,"fnServerData");p(i,e,"fnFormatNumber");p(i,e,"sServerMethod");p(i,e,"aaSorting");p(i,e,"aaSortingFixed");p(i,e,"aLengthMenu");p(i,e,"sPaginationType");p(i,e,"sAjaxSource");p(i,e,"sAjaxDataProp");p(i,e,"iCookieDuration"); 120 | p(i,e,"sCookiePrefix");p(i,e,"sDom");p(i,e,"bSortCellsTop");p(i,e,"iTabIndex");p(i,e,"oSearch","oPreviousSearch");p(i,e,"aoSearchCols","aoPreSearchCols");p(i,e,"iDisplayLength","_iDisplayLength");p(i,e,"bJQueryUI","bJUI");p(i,e,"fnCookieCallback");p(i,e,"fnStateLoad");p(i,e,"fnStateSave");p(i.oLanguage,e,"fnInfoCallback");C(i,"aoDrawCallback",e.fnDrawCallback,"user");C(i,"aoServerParams",e.fnServerParams,"user");C(i,"aoStateSaveParams",e.fnStateSaveParams,"user");C(i,"aoStateLoadParams",e.fnStateLoadParams, 121 | "user");C(i,"aoStateLoaded",e.fnStateLoaded,"user");C(i,"aoRowCallback",e.fnRowCallback,"user");C(i,"aoRowCreatedCallback",e.fnCreatedRow,"user");C(i,"aoHeaderCallback",e.fnHeaderCallback,"user");C(i,"aoFooterCallback",e.fnFooterCallback,"user");C(i,"aoInitComplete",e.fnInitComplete,"user");C(i,"aoPreDrawCallback",e.fnPreDrawCallback,"user");i.oFeatures.bServerSide&&i.oFeatures.bSort&&i.oFeatures.bSortClasses?C(i,"aoDrawCallback",Q,"server_side_sort_classes"):i.oFeatures.bDeferRender&&C(i,"aoDrawCallback", 122 | Q,"defer_sort_classes");if(e.bJQueryUI){if(h.extend(i.oClasses,j.ext.oJUIClasses),e.sDom===j.defaults.sDom&&"lfrtip"===j.defaults.sDom)i.sDom='<"H"lfr>t<"F"ip>'}else h.extend(i.oClasses,j.ext.oStdClasses);h(this).addClass(i.oClasses.sTable);if(""!==i.oScroll.sX||""!==i.oScroll.sY)i.oScroll.iBarWidth=Pa();if(i.iInitDisplayStart===m)i.iInitDisplayStart=e.iDisplayStart,i._iDisplayStart=e.iDisplayStart;if(e.bStateSave)i.oFeatures.bStateSave=!0,Ra(i,e),C(i,"aoDrawCallback",qa,"state_save");if(null!==e.iDeferLoading)i.bDeferLoading= 123 | !0,a=h.isArray(e.iDeferLoading),i._iRecordsDisplay=a?e.iDeferLoading[0]:e.iDeferLoading,i._iRecordsTotal=a?e.iDeferLoading[1]:e.iDeferLoading;null!==e.aaData&&(g=!0);""!==e.oLanguage.sUrl?(i.oLanguage.sUrl=e.oLanguage.sUrl,h.getJSON(i.oLanguage.sUrl,null,function(a){oa(a);h.extend(!0,i.oLanguage,e.oLanguage,a);aa(i)}),f=!0):h.extend(!0,i.oLanguage,e.oLanguage);if(null===e.asStripeClasses)i.asStripeClasses=[i.oClasses.sStripeOdd,i.oClasses.sStripeEven];c=!1;d=h(this).children("tbody").children("tr"); 124 | for(a=0,b=i.asStripeClasses.length;a<b;a++)if(d.filter(":lt(2)").hasClass(i.asStripeClasses[a])){c=!0;break}if(c)i.asDestroyStripes=["",""],h(d[0]).hasClass(i.oClasses.sStripeOdd)&&(i.asDestroyStripes[0]+=i.oClasses.sStripeOdd+" "),h(d[0]).hasClass(i.oClasses.sStripeEven)&&(i.asDestroyStripes[0]+=i.oClasses.sStripeEven),h(d[1]).hasClass(i.oClasses.sStripeOdd)&&(i.asDestroyStripes[1]+=i.oClasses.sStripeOdd+" "),h(d[1]).hasClass(i.oClasses.sStripeEven)&&(i.asDestroyStripes[1]+=i.oClasses.sStripeEven), 125 | d.removeClass(i.asStripeClasses.join(" "));c=[];a=this.getElementsByTagName("thead");0!==a.length&&(T(i.aoHeader,a[0]),c=O(i));if(null===e.aoColumns){d=[];for(a=0,b=c.length;a<b;a++)d.push(null)}else d=e.aoColumns;for(a=0,b=d.length;a<b;a++){if(e.saved_aoColumns!==m&&e.saved_aoColumns.length==b)null===d[a]&&(d[a]={}),d[a].bVisible=e.saved_aoColumns[a].bVisible;o(i,c?c[a]:null)}J(i,e.aoColumnDefs,d,function(a,b){s(i,a,b)});for(a=0,b=i.aaSorting.length;a<b;a++){i.aaSorting[a][0]>=i.aoColumns.length&& 126 | (i.aaSorting[a][0]=0);var k=i.aoColumns[i.aaSorting[a][0]];i.aaSorting[a][2]===m&&(i.aaSorting[a][2]=0);e.aaSorting===m&&i.saved_aaSorting===m&&(i.aaSorting[a][1]=k.asSorting[0]);for(c=0,d=k.asSorting.length;c<d;c++)if(i.aaSorting[a][1]==k.asSorting[c]){i.aaSorting[a][2]=c;break}}Q(i);a=h(this).children("caption").each(function(){this._captionSide=h(this).css("caption-side")});b=h(this).children("thead");0===b.length&&(b=[l.createElement("thead")],this.appendChild(b[0]));i.nTHead=b[0];b=h(this).children("tbody"); 127 | 0===b.length&&(b=[l.createElement("tbody")],this.appendChild(b[0]));i.nTBody=b[0];i.nTBody.setAttribute("role","alert");i.nTBody.setAttribute("aria-live","polite");i.nTBody.setAttribute("aria-relevant","all");b=h(this).children("tfoot");if(0===b.length&&0<a.length&&(""!==i.oScroll.sX||""!==i.oScroll.sY))b=[l.createElement("tfoot")],this.appendChild(b[0]);if(0<b.length)i.nTFoot=b[0],T(i.aoFooter,i.nTFoot);if(g)for(a=0;a<e.aaData.length;a++)H(i,e.aaData[a]);else ua(i);i.aiDisplay=i.aiDisplayMaster.slice(); 128 | i.bInitialised=!0;!1===f&&aa(i)}})};j.fnVersionCheck=function(e){for(var h=function(e,h){for(;e.length<h;)e+="0";return e},m=j.ext.sVersion.split("."),e=e.split("."),k="",l="",r=0,v=e.length;r<v;r++)k+=h(m[r],3),l+=h(e[r],3);return parseInt(k,10)>=parseInt(l,10)};j.fnIsDataTable=function(e){for(var h=j.settings,m=0;m<h.length;m++)if(h[m].nTable===e||h[m].nScrollHead===e||h[m].nScrollFoot===e)return!0;return!1};j.fnTables=function(e){var o=[];jQuery.each(j.settings,function(j,k){(!e||!0===e&&h(k.nTable).is(":visible"))&& 129 | o.push(k.nTable)});return o};j.version="1.9.1";j.settings=[];j.models={};j.models.ext={afnFiltering:[],afnSortData:[],aoFeatures:[],aTypes:[],fnVersionCheck:j.fnVersionCheck,iApiIndex:0,ofnSearch:{},oApi:{},oStdClasses:{},oJUIClasses:{},oPagination:{},oSort:{},sVersion:j.version,sErrMode:"alert",_oExternConfig:{iNextUnique:0}};j.models.oSearch={bCaseInsensitive:!0,sSearch:"",bRegex:!1,bSmart:!0};j.models.oRow={nTr:null,_aData:[],_aSortData:[],_anHidden:[],_sRowStripe:""};j.models.oColumn={aDataSort:null, 130 | asSorting:null,bSearchable:null,bSortable:null,bUseRendered:null,bVisible:null,_bAutoType:!0,fnCreatedCell:null,fnGetData:null,fnRender:null,fnSetData:null,mDataProp:null,nTh:null,nTf:null,sClass:null,sContentPadding:null,sDefaultContent:null,sName:null,sSortDataType:"std",sSortingClass:null,sSortingClassJUI:null,sTitle:null,sType:null,sWidth:null,sWidthOrig:null};j.defaults={aaData:null,aaSorting:[[0,"asc"]],aaSortingFixed:null,aLengthMenu:[10,25,50,100],aoColumns:null,aoColumnDefs:null,aoSearchCols:[], 131 | asStripeClasses:null,bAutoWidth:!0,bDeferRender:!1,bDestroy:!1,bFilter:!0,bInfo:!0,bJQueryUI:!1,bLengthChange:!0,bPaginate:!0,bProcessing:!1,bRetrieve:!1,bScrollAutoCss:!0,bScrollCollapse:!1,bScrollInfinite:!1,bServerSide:!1,bSort:!0,bSortCellsTop:!1,bSortClasses:!0,bStateSave:!1,fnCookieCallback:null,fnCreatedRow:null,fnDrawCallback:null,fnFooterCallback:null,fnFormatNumber:function(e){if(1E3>e)return e;for(var h=e+"",e=h.split(""),j="",h=h.length,k=0;k<h;k++)0===k%3&&0!==k&&(j=this.oLanguage.sInfoThousands+ 132 | j),j=e[h-k-1]+j;return j},fnHeaderCallback:null,fnInfoCallback:null,fnInitComplete:null,fnPreDrawCallback:null,fnRowCallback:null,fnServerData:function(e,j,m,k){k.jqXHR=h.ajax({url:e,data:j,success:function(e){h(k.oInstance).trigger("xhr",k);m(e)},dataType:"json",cache:!1,type:k.sServerMethod,error:function(e,h){"parsererror"==h&&k.oApi._fnLog(k,0,"DataTables warning: JSON data from server could not be parsed. This is caused by a JSON formatting error.")}})},fnServerParams:null,fnStateLoad:function(e){var e= 133 | this.oApi._fnReadCookie(e.sCookiePrefix+e.sInstance),j;try{j="function"===typeof h.parseJSON?h.parseJSON(e):eval("("+e+")")}catch(m){j=null}return j},fnStateLoadParams:null,fnStateLoaded:null,fnStateSave:function(e,h){this.oApi._fnCreateCookie(e.sCookiePrefix+e.sInstance,this.oApi._fnJsonString(h),e.iCookieDuration,e.sCookiePrefix,e.fnCookieCallback)},fnStateSaveParams:null,iCookieDuration:7200,iDeferLoading:null,iDisplayLength:10,iDisplayStart:0,iScrollLoadGap:100,iTabIndex:0,oLanguage:{oAria:{sSortAscending:": activate to sort column ascending", 134 | sSortDescending:": activate to sort column descending"},oPaginate:{sFirst:"First",sLast:"Last",sNext:"Next",sPrevious:"Previous"},sEmptyTable:"No data available in table",sInfo:"Showing _START_ to _END_ of _TOTAL_ entries",sInfoEmpty:"Showing 0 to 0 of 0 entries",sInfoFiltered:"(filtered from _MAX_ total entries)",sInfoPostFix:"",sInfoThousands:",",sLengthMenu:"Show _MENU_ entries",sLoadingRecords:"Loading...",sProcessing:"Processing...",sSearch:"Search:",sUrl:"",sZeroRecords:"No matching records found"}, 135 | oSearch:h.extend({},j.models.oSearch),sAjaxDataProp:"aaData",sAjaxSource:null,sCookiePrefix:"SpryMedia_DataTables_",sDom:"lfrtip",sPaginationType:"two_button",sScrollX:"",sScrollXInner:"",sScrollY:"",sServerMethod:"GET"};j.defaults.columns={aDataSort:null,asSorting:["asc","desc"],bSearchable:!0,bSortable:!0,bUseRendered:!0,bVisible:!0,fnCreatedCell:null,fnRender:null,iDataSort:-1,mDataProp:null,sCellType:"td",sClass:"",sContentPadding:"",sDefaultContent:null,sName:"",sSortDataType:"std",sTitle:null, 136 | sType:null,sWidth:null};j.models.oSettings={oFeatures:{bAutoWidth:null,bDeferRender:null,bFilter:null,bInfo:null,bLengthChange:null,bPaginate:null,bProcessing:null,bServerSide:null,bSort:null,bSortClasses:null,bStateSave:null},oScroll:{bAutoCss:null,bCollapse:null,bInfinite:null,iBarWidth:0,iLoadGap:null,sX:null,sXInner:null,sY:null},oLanguage:{fnInfoCallback:null},aanFeatures:[],aoData:[],aiDisplay:[],aiDisplayMaster:[],aoColumns:[],aoHeader:[],aoFooter:[],asDataSearch:[],oPreviousSearch:{},aoPreSearchCols:[], 137 | aaSorting:null,aaSortingFixed:null,asStripeClasses:null,asDestroyStripes:[],sDestroyWidth:0,aoRowCallback:[],aoHeaderCallback:[],aoFooterCallback:[],aoDrawCallback:[],aoRowCreatedCallback:[],aoPreDrawCallback:[],aoInitComplete:[],aoStateSaveParams:[],aoStateLoadParams:[],aoStateLoaded:[],sTableId:"",nTable:null,nTHead:null,nTFoot:null,nTBody:null,nTableWrapper:null,bDeferLoading:!1,bInitialised:!1,aoOpenRows:[],sDom:null,sPaginationType:"two_button",iCookieDuration:0,sCookiePrefix:"",fnCookieCallback:null, 138 | aoStateSave:[],aoStateLoad:[],oLoadedState:null,sAjaxSource:null,sAjaxDataProp:null,bAjaxDataGet:!0,jqXHR:null,fnServerData:null,aoServerParams:[],sServerMethod:null,fnFormatNumber:null,aLengthMenu:null,iDraw:0,bDrawing:!1,iDrawError:-1,_iDisplayLength:10,_iDisplayStart:0,_iDisplayEnd:10,_iRecordsTotal:0,_iRecordsDisplay:0,bJUI:null,oClasses:{},bFiltered:!1,bSorted:!1,bSortCellsTop:null,oInit:null,aoDestroyCallback:[],fnRecordsTotal:function(){return this.oFeatures.bServerSide?parseInt(this._iRecordsTotal, 139 | 10):this.aiDisplayMaster.length},fnRecordsDisplay:function(){return this.oFeatures.bServerSide?parseInt(this._iRecordsDisplay,10):this.aiDisplay.length},fnDisplayEnd:function(){return this.oFeatures.bServerSide?!1===this.oFeatures.bPaginate||-1==this._iDisplayLength?this._iDisplayStart+this.aiDisplay.length:Math.min(this._iDisplayStart+this._iDisplayLength,this._iRecordsDisplay):this._iDisplayEnd},oInstance:null,sInstance:null,iTabIndex:0,nScrollHead:null,nScrollFoot:null};j.ext=h.extend(!0,{},j.models.ext); 140 | h.extend(j.ext.oStdClasses,{sTable:"dataTable",sPagePrevEnabled:"paginate_enabled_previous",sPagePrevDisabled:"paginate_disabled_previous",sPageNextEnabled:"paginate_enabled_next",sPageNextDisabled:"paginate_disabled_next",sPageJUINext:"",sPageJUIPrev:"",sPageButton:"paginate_button",sPageButtonActive:"paginate_active",sPageButtonStaticDisabled:"paginate_button paginate_button_disabled",sPageFirst:"first",sPagePrevious:"previous",sPageNext:"next",sPageLast:"last",sStripeOdd:"odd",sStripeEven:"even", 141 | sRowEmpty:"dataTables_empty",sWrapper:"dataTables_wrapper",sFilter:"dataTables_filter",sInfo:"dataTables_info",sPaging:"dataTables_paginate paging_",sLength:"dataTables_length",sProcessing:"dataTables_processing",sSortAsc:"sorting_asc",sSortDesc:"sorting_desc",sSortable:"sorting",sSortableAsc:"sorting_asc_disabled",sSortableDesc:"sorting_desc_disabled",sSortableNone:"sorting_disabled",sSortColumn:"sorting_",sSortJUIAsc:"",sSortJUIDesc:"",sSortJUI:"",sSortJUIAscAllowed:"",sSortJUIDescAllowed:"",sSortJUIWrapper:"", 142 | sSortIcon:"",sScrollWrapper:"dataTables_scroll",sScrollHead:"dataTables_scrollHead",sScrollHeadInner:"dataTables_scrollHeadInner",sScrollBody:"dataTables_scrollBody",sScrollFoot:"dataTables_scrollFoot",sScrollFootInner:"dataTables_scrollFootInner",sFooterTH:""});h.extend(j.ext.oJUIClasses,j.ext.oStdClasses,{sPagePrevEnabled:"fg-button ui-button ui-state-default ui-corner-left",sPagePrevDisabled:"fg-button ui-button ui-state-default ui-corner-left ui-state-disabled",sPageNextEnabled:"fg-button ui-button ui-state-default ui-corner-right", 143 | sPageNextDisabled:"fg-button ui-button ui-state-default ui-corner-right ui-state-disabled",sPageJUINext:"ui-icon ui-icon-circle-arrow-e",sPageJUIPrev:"ui-icon ui-icon-circle-arrow-w",sPageButton:"fg-button ui-button ui-state-default",sPageButtonActive:"fg-button ui-button ui-state-default ui-state-disabled",sPageButtonStaticDisabled:"fg-button ui-button ui-state-default ui-state-disabled",sPageFirst:"first ui-corner-tl ui-corner-bl",sPageLast:"last ui-corner-tr ui-corner-br",sPaging:"dataTables_paginate fg-buttonset ui-buttonset fg-buttonset-multi ui-buttonset-multi paging_", 144 | sSortAsc:"ui-state-default",sSortDesc:"ui-state-default",sSortable:"ui-state-default",sSortableAsc:"ui-state-default",sSortableDesc:"ui-state-default",sSortableNone:"ui-state-default",sSortJUIAsc:"css_right ui-icon ui-icon-triangle-1-n",sSortJUIDesc:"css_right ui-icon ui-icon-triangle-1-s",sSortJUI:"css_right ui-icon ui-icon-carat-2-n-s",sSortJUIAscAllowed:"css_right ui-icon ui-icon-carat-1-n",sSortJUIDescAllowed:"css_right ui-icon ui-icon-carat-1-s",sSortJUIWrapper:"DataTables_sort_wrapper",sSortIcon:"DataTables_sort_icon", 145 | sScrollHead:"dataTables_scrollHead ui-state-default",sScrollFoot:"dataTables_scrollFoot ui-state-default",sFooterTH:"ui-state-default"});h.extend(j.ext.oPagination,{two_button:{fnInit:function(e,j,m){var k=e.oLanguage.oPaginate,l=function(h){e.oApi._fnPageChange(e,h.data.action)&&m(e)},k=!e.bJUI?'<a class="'+e.oClasses.sPagePrevDisabled+'" tabindex="'+e.iTabIndex+'" role="button">'+k.sPrevious+'</a><a class="'+e.oClasses.sPageNextDisabled+'" tabindex="'+e.iTabIndex+'" role="button">'+k.sNext+"</a>": 146 | '<a class="'+e.oClasses.sPagePrevDisabled+'" tabindex="'+e.iTabIndex+'" role="button"><span class="'+e.oClasses.sPageJUIPrev+'"></span></a><a class="'+e.oClasses.sPageNextDisabled+'" tabindex="'+e.iTabIndex+'" role="button"><span class="'+e.oClasses.sPageJUINext+'"></span></a>';h(j).append(k);var r=h("a",j),k=r[0],r=r[1];e.oApi._fnBindAction(k,{action:"previous"},l);e.oApi._fnBindAction(r,{action:"next"},l);if(!e.aanFeatures.p)j.id=e.sTableId+"_paginate",k.id=e.sTableId+"_previous",r.id=e.sTableId+ 147 | "_next",k.setAttribute("aria-controls",e.sTableId),r.setAttribute("aria-controls",e.sTableId)},fnUpdate:function(e){if(e.aanFeatures.p)for(var h=e.oClasses,j=e.aanFeatures.p,k=0,m=j.length;k<m;k++)if(0!==j[k].childNodes.length)j[k].childNodes[0].className=0===e._iDisplayStart?h.sPagePrevDisabled:h.sPagePrevEnabled,j[k].childNodes[1].className=e.fnDisplayEnd()==e.fnRecordsDisplay()?h.sPageNextDisabled:h.sPageNextEnabled}},iFullNumbersShowPages:5,full_numbers:{fnInit:function(e,j,m){var k=e.oLanguage.oPaginate, 148 | l=e.oClasses,r=function(h){e.oApi._fnPageChange(e,h.data.action)&&m(e)};h(j).append('<a tabindex="'+e.iTabIndex+'" class="'+l.sPageButton+" "+l.sPageFirst+'">'+k.sFirst+'</a><a tabindex="'+e.iTabIndex+'" class="'+l.sPageButton+" "+l.sPagePrevious+'">'+k.sPrevious+'</a><span></span><a tabindex="'+e.iTabIndex+'" class="'+l.sPageButton+" "+l.sPageNext+'">'+k.sNext+'</a><a tabindex="'+e.iTabIndex+'" class="'+l.sPageButton+" "+l.sPageLast+'">'+k.sLast+"</a>");var v=h("a",j),k=v[0],l=v[1],A=v[2],v=v[3]; 149 | e.oApi._fnBindAction(k,{action:"first"},r);e.oApi._fnBindAction(l,{action:"previous"},r);e.oApi._fnBindAction(A,{action:"next"},r);e.oApi._fnBindAction(v,{action:"last"},r);if(!e.aanFeatures.p)j.id=e.sTableId+"_paginate",k.id=e.sTableId+"_first",l.id=e.sTableId+"_previous",A.id=e.sTableId+"_next",v.id=e.sTableId+"_last"},fnUpdate:function(e,m){if(e.aanFeatures.p){var l=j.ext.oPagination.iFullNumbersShowPages,k=Math.floor(l/2),x=Math.ceil(e.fnRecordsDisplay()/e._iDisplayLength),r=Math.ceil(e._iDisplayStart/ 150 | e._iDisplayLength)+1,v="",A,E=e.oClasses,y,J=e.aanFeatures.p,H=function(h){e.oApi._fnBindAction(this,{page:h+A-1},function(h){e.oApi._fnPageChange(e,h.data.page);m(e);h.preventDefault()})};-1===e._iDisplayLength?r=k=A=1:x<l?(A=1,k=x):r<=k?(A=1,k=l):r>=x-k?(A=x-l+1,k=x):(A=r-Math.ceil(l/2)+1,k=A+l-1);for(l=A;l<=k;l++)v+=r!==l?'<a tabindex="'+e.iTabIndex+'" class="'+E.sPageButton+'">'+e.fnFormatNumber(l)+"</a>":'<a tabindex="'+e.iTabIndex+'" class="'+E.sPageButtonActive+'">'+e.fnFormatNumber(l)+"</a>"; 151 | for(l=0,k=J.length;l<k;l++)0!==J[l].childNodes.length&&(h("span:eq(0)",J[l]).html(v).children("a").each(H),y=J[l].getElementsByTagName("a"),y=[y[0],y[1],y[y.length-2],y[y.length-1]],h(y).removeClass(E.sPageButton+" "+E.sPageButtonActive+" "+E.sPageButtonStaticDisabled),h([y[0],y[1]]).addClass(1==r?E.sPageButtonStaticDisabled:E.sPageButton),h([y[2],y[3]]).addClass(0===x||r===x||-1===e._iDisplayLength?E.sPageButtonStaticDisabled:E.sPageButton))}}}});h.extend(j.ext.oSort,{"string-pre":function(e){"string"!= 152 | typeof e&&(e=null!==e&&e.toString?e.toString():"");return e.toLowerCase()},"string-asc":function(e,h){return e<h?-1:e>h?1:0},"string-desc":function(e,h){return e<h?1:e>h?-1:0},"html-pre":function(e){return e.replace(/<.*?>/g,"").toLowerCase()},"html-asc":function(e,h){return e<h?-1:e>h?1:0},"html-desc":function(e,h){return e<h?1:e>h?-1:0},"date-pre":function(e){e=Date.parse(e);if(isNaN(e)||""===e)e=Date.parse("01/01/1970 00:00:00");return e},"date-asc":function(e,h){return e-h},"date-desc":function(e, 153 | h){return h-e},"numeric-pre":function(e){return"-"==e||""===e?0:1*e},"numeric-asc":function(e,h){return e-h},"numeric-desc":function(e,h){return h-e}});h.extend(j.ext.aTypes,[function(e){if("number"===typeof e)return"numeric";if("string"!==typeof e)return null;var h,j=!1;h=e.charAt(0);if(-1=="0123456789-".indexOf(h))return null;for(var k=1;k<e.length;k++){h=e.charAt(k);if(-1=="0123456789.".indexOf(h))return null;if("."==h){if(j)return null;j=!0}}return"numeric"},function(e){var h=Date.parse(e);return null!== 154 | h&&!isNaN(h)||"string"===typeof e&&0===e.length?"date":null},function(e){return"string"===typeof e&&-1!=e.indexOf("<")&&-1!=e.indexOf(">")?"html":null}]);h.fn.DataTable=j;h.fn.dataTable=j;h.fn.dataTableSettings=j.settings;h.fn.dataTableExt=j.ext})(jQuery,window,document,void 0); 155 | --------------------------------------------------------------------------------