├── application
├── controllers
│ ├── chat.php
│ ├── user1.php
│ └── user2.php
├── views
│ ├── user1.php
│ └── user2.php
└── libraries
│ └── ci_chat.php
├── css
└── chat
│ ├── screen_ie.css
│ ├── screen.css
│ └── chat.css
├── README.md
└── js
└── chat
├── chat.js
└── jquery.js
/application/controllers/chat.php:
--------------------------------------------------------------------------------
1 | load->library('ci_chat');
15 |
16 | }
17 |
18 | }
19 |
20 | /* End of file welcome.php */
21 | /* Location: ./application/controllers/welcome.php */
--------------------------------------------------------------------------------
/css/chat/screen_ie.css:
--------------------------------------------------------------------------------
1 | @charset "utf-8";
2 | /*
3 | * CSS Document
4 | * Written by Ryan Yonzon
5 | * http://ryan.rawswift.com/
6 | */
7 |
8 | /*
9 | * IE hack
10 | */
11 | html, body {
12 | margin:0px;
13 | overflow:hidden; /* hide browser's main scrollbar */
14 | height:100%; /* make sure we'll use 100% of the page's height */
15 | }
16 |
17 | #main_container {
18 | width:100%; /* make sure we'll use 100% of page's width */
19 | background-color:#ffffff; /* DO NOT REMOVE THIS; or you'll have issue w/ the scrollbar, when the mouse pointer is on a white space */
20 | overflow-x: hidden;
21 | overflow-y: scroll;
22 | }
23 |
--------------------------------------------------------------------------------
/css/chat/screen.css:
--------------------------------------------------------------------------------
1 | @charset "utf-8";
2 | /*
3 | * CSS Document
4 | * Written by Ryan Yonzon
5 | * http://ryan.rawswift.com/
6 | */
7 |
8 | html, body {
9 | margin:0px; /* FF hack: or we'll have double scrollbar showing on the browser */
10 |
11 |
12 | }
13 |
14 | #main_container {
15 | width:100%;
16 | background-color:#ffffff; /* DO NOT REMOVE THIS; or you'll have issue w/ the scrollbar, when the mouse pointer is on a white space */
17 | overflow-x: hidden;
18 | overflow-y: scroll;
19 | height:100%; /* this will make sure that the height will extend at the bottom */
20 | position:absolute; /* container div must be absolute, for our fixed bar to work */
21 | }
--------------------------------------------------------------------------------
/application/controllers/user1.php:
--------------------------------------------------------------------------------
1 |
18 | * @see http://codeigniter.com/user_guide/general/urls.html
19 | */
20 | public function __construct(){
21 | parent::__construct();
22 | @session_start();
23 | }
24 | public function index()
25 | {
26 |
27 | if( !isset( $_SESSION['chatusername'] ) || !isset( $_SESSION['username'] ) ){
28 | $_SESSION['chatusername'] = 'User 2';
29 | $_SESSION['username'] = '2';
30 | }
31 |
32 | $this->load->view('user1');
33 |
34 |
35 | }
36 | }
37 |
38 | /* End of file welcome.php */
39 | /* Location: ./application/controllers/welcome.php */
--------------------------------------------------------------------------------
/application/controllers/user2.php:
--------------------------------------------------------------------------------
1 |
18 | * @see http://codeigniter.com/user_guide/general/urls.html
19 | */
20 | public function __construct(){
21 | parent::__construct();
22 | @session_start();
23 | }
24 | public function index()
25 | {
26 |
27 | if( !isset( $_SESSION['chatusername'] ) || !isset( $_SESSION['username'] ) ){
28 | $_SESSION['chatusername'] = 'User 2';
29 | $_SESSION['username'] = '2';
30 | }
31 |
32 | $this->load->view('user2');
33 |
34 |
35 | }
36 | }
37 |
38 | /* End of file welcome.php */
39 | /* Location: ./application/controllers/welcome.php */
--------------------------------------------------------------------------------
/application/views/user1.php:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Chat - CodeIgniter
6 |
7 |
8 |
9 |
10 |
11 |
49 |
50 |
51 |
52 |
53 |
CodeIgniter Chat!
54 |
i am
55 |
56 |
chat with User 2
57 |
58 |
59 |
60 |
61 |
--------------------------------------------------------------------------------
/application/views/user2.php:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Chat - CodeIgniter
6 |
7 |
8 |
9 |
10 |
11 |
49 |
50 |
51 |
52 |
53 |
CodeIgniter Chat!
54 |
i am
55 |
56 |
chat with User 1
57 |
58 |
59 |
60 |
61 |
62 |
--------------------------------------------------------------------------------
/css/chat/chat.css:
--------------------------------------------------------------------------------
1 | .chatbox {
2 | position: fixed;
3 | position:expression("absolute");
4 | width: 225px;
5 | display:none;
6 | }
7 |
8 | .chatboxhead {
9 | background-color: #00a0de;
10 | padding:7px;
11 | color: #ffffff;
12 |
13 | border-right:1px solid #00a0de;
14 | border-left:1px solid #00a0de;
15 | }
16 |
17 | .chatboxblink {
18 | background-color: #176689;
19 | border-right:1px solid #176689;
20 | border-left:1px solid #176689;
21 | }
22 |
23 | .chatboxcontent {
24 | font-family: arial,sans-serif;
25 | font-size: 13px;
26 | color: #333333;
27 | height:200px;
28 | width:209px;
29 | overflow-y:auto;
30 | overflow-x:auto;
31 | padding:7px;
32 | border-left:1px solid #cccccc;
33 | border-right:1px solid #cccccc;
34 | border-bottom:1px solid #eeeeee;
35 | background-color: #ffffff;
36 | line-height: 1.3em;
37 | }
38 |
39 | .chatboxinput {
40 | padding: 5px;
41 | background-color: #ffffff;
42 | border-left:1px solid #cccccc;
43 | border-right:1px solid #cccccc;
44 | border-bottom:1px solid #cccccc;
45 | }
46 |
47 | .chatboxtextarea {
48 | width: 206px;
49 | height:44px;
50 | padding:3px 0pt 3px 3px;
51 | border: 1px solid #eeeeee;
52 | margin: 1px;
53 | overflow:hidden;
54 | }
55 |
56 | .chatboxtextareaselected {
57 | border: 2px solid #f99d39;
58 | margin:0;
59 | }
60 |
61 | .chatboxmessage {
62 | margin-left:1em;
63 | }
64 |
65 | .chatboxinfo {
66 | margin-left:-1em;
67 | color:#666666;
68 |
69 | }
70 |
71 | .chatboxmessagefrom {
72 | margin-left:-1em;
73 | font-weight: bold;
74 | }
75 |
76 | .chatboxmessagecontent {
77 | }
78 |
79 | .chatboxoptions {
80 | float: right;
81 | }
82 |
83 | .chatboxoptions a {
84 | text-decoration: none;
85 | color: white;
86 | font-weight:bold;
87 | font-family:Verdana,Arial,"Bitstream Vera Sans",sans-serif;
88 | }
89 |
90 | .chatboxtitle {
91 | float: left;
92 | }
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | Codeiginter FB like Chat library
2 | --------------------------------
3 |
4 | http://anantgarg.com/2009/05/13/gmail-facebook-style-jquery-chat/ i have converted this chat to codeigniter library. to use in Codeigniter.
5 |
6 |
7 |
8 | You must first create a mySQL table as below.
9 | ```
10 | CREATE TABLE IF NOT EXISTS `chat` (
11 | `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
12 | `from` varchar(255) NOT NULL DEFAULT '',
13 | `to` varchar(255) NOT NULL DEFAULT '',
14 | `message` text NOT NULL,
15 | `sent` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
16 | `recd` int(10) unsigned NOT NULL DEFAULT '0',
17 | `from_name` varchar(100) NOT NULL,
18 | `to_name` varchar(100) NOT NULL,
19 | PRIMARY KEY (`id`)
20 | ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
21 | ```
22 |
23 |
24 |
25 | How to use?
26 | ------------
27 | Set the session variable:
28 | ```
29 | @session_start();
30 | if( !isset( $_SESSION['chatusername'] ) || !isset( $_SESSION['username'] ) ){
31 | $_SESSION['chatusername'] = 'User 2';
32 | $_SESSION['username'] = '2';
33 | }
34 | ```
35 |
36 | Add the following CSS to your page template
37 | ```
38 |
39 |
40 | ```
41 |
42 | Add the following scripts to your page template
43 | ```
44 |
45 |
46 |
47 |
48 | And in the view
49 | chat with User 2
50 | ```
51 |
52 | Features
53 | ---------
54 | 1. Gmail style bottom right display of chat boxes
55 | 2. Keeps chat boxes open and stores state (data) even when pages are browsed/refreshed similar to Facebook
56 | 3. Displays “Sent at…” after 3 minutes of inactivity
57 | 4. Displays “X says…” & blinks chat boxes when window is not in focus
58 | 5. Minimize and close chat boxes
59 | 6. Auto-resize of text input box
60 | 7. Auto-scrolling of chat text
61 | 8. Auto-back-off polling policy (hits the server less-often when chat activity is low)
62 | 9. Extremely simple to integrate into existing site
63 |
--------------------------------------------------------------------------------
/application/libraries/ci_chat.php:
--------------------------------------------------------------------------------
1 | ci =& get_instance();
8 | $this->ci->load->database();
9 | //$this->ci->load->model('chat_model');
10 | if (!isset($_SESSION['chatHistory'])) {
11 | $_SESSION['chatHistory'] = array();
12 | }
13 | if (!isset($_SESSION['openChatBoxes'])) {
14 | $_SESSION['openChatBoxes'] = array();
15 | }
16 |
17 | if( isset( $_GET['action'] ) ){
18 | if ($_GET['action'] == "chatheartbeat") {
19 | $this->chatHeartbeat();
20 | }
21 | if ($_GET['action'] == "sendchat") {
22 | $this->sendChat();
23 | }
24 | if ($_GET['action'] == "closechat") {
25 | $this->closeChat();
26 | }
27 | if ($_GET['action'] == "startchatsession") {
28 | $this->startChatSession();
29 | }
30 | if ($_GET['action'] == "chathistory") {
31 | $this->chatHistory();
32 | }
33 | }
34 | }
35 | /*
36 | ------------
37 | */
38 | function startChatSession() {
39 | $items = '';
40 | if (!empty($_SESSION['openChatBoxes'])) {
41 | foreach ($_SESSION['openChatBoxes'] as $chatbox => $void) {
42 | $items .= $this->chatBoxSession($chatbox);
43 | }
44 | }
45 | if ($items != '') {
46 | $items = substr($items, 0, -1);
47 | }
48 | header('Content-type: application/json');
49 | ?>
50 | {
51 | "username": "",
52 | "from_username": "",
53 | "items": [
54 |
55 | ]
56 | }
57 | ",$text);
90 | return $text;
91 | }
92 | /*
93 | --------
94 | */
95 |
96 | function sendChat() {
97 | $from = $_SESSION['username'];
98 | $from_name = $_SESSION['chatusername'];
99 | $to = $_POST['to'];
100 | $to_name = $_POST['to_name'];
101 | $message = $_POST['message'];
102 | $_SESSION['openChatBoxes'][$_POST['to']] = date('Y-m-d H:i:s', time());
103 |
104 | $messagesan = $this->sanitize($message);
105 |
106 | if (!isset($_SESSION['chatHistory'][$_POST['to']])) {
107 | $_SESSION['chatHistory'][$_POST['to']] = '';
108 | }
109 | $d['s'] = '1';
110 | $d['fname'] = "$to_name";
111 | $d['f'] = "$to";
112 | $d['m'] = "$messagesan";
113 |
114 | $_SESSION['chatHistory'][$_POST['to']] .= json_encode( $d ).",\r\n";
115 | /*$_SESSION['chatHistory'][$_POST['to']] .= << $from ,
126 | 'from_name' => $from_name ,
127 | 'to_name' => $to_name ,
128 | 'to' => $to ,
129 | 'message' => $message,
130 | );
131 | $this->ci->db->set('sent', 'NOW()', FALSE);
132 | $this->ci->db->insert('chat', $data);
133 | echo "1";
134 | exit(0);
135 | }
136 |
137 |
138 | function chatHistory(){
139 | $this->ci->db->select('*');
140 | $this->ci->db->where("(`from` = $_SESSION[username] AND `to` = ".$this->ci->input->get('to')." )");
141 | $this->ci->db->or_where("(`to` = $_SESSION[username] AND `from` = ".$this->ci->input->get('to')." )");
142 | $this->ci->db->order_by('id','ASC' );
143 | $query = $this->ci->db->get('chat');
144 | $items = '';
145 | $chatBoxes = array();
146 | foreach ($query->result_array() as $chat) {
147 | # code...
148 | $chat['message'] = $this->sanitize($chat['message']);
149 |
150 | $d = array();
151 | $d['s'] = '0';
152 | $d['f'] = "$chat[from]";
153 | $d['fname'] = "$chat[from_name]";
154 | $d['m'] = "$chat[message]";
155 | $items.=json_encode( $d ).',';
156 | }
157 | header('Content-type: application/json');
158 | ?>
159 | {
160 | "items": [
161 |
162 | ]
163 | }
164 |
165 | ci->db->select('*');
171 | $this->ci->db->where('to', $_SESSION['username'] );
172 | $this->ci->db->where('recd',0 );
173 | $this->ci->db->order_by('id','ASC' );
174 | $query = $this->ci->db->get('chat');
175 | $items = '';
176 | $chatBoxes = array();
177 | foreach ($query->result_array() as $chat) {
178 | # code...
179 | if (!isset($_SESSION['openChatBoxes'][$chat['from']]) && isset($_SESSION['chatHistory'][$chat['from']])) {
180 | $items = $_SESSION['chatHistory'][$chat['from']];
181 | }
182 |
183 | $chat['message'] = $this->sanitize($chat['message']);
184 |
185 | $d = array();
186 | $d['s'] = '0';
187 | $d['f'] = "$chat[from]";
188 | $d['fname'] = "$chat[from_name]";
189 | $d['m'] = "$chat[message]";
190 | /*$items .= << $time) {
222 | if (!isset($_SESSION['tsChatBoxes'][$chatbox])) {
223 | $now = time()-strtotime($time);
224 | $time = date('g:iA M dS', strtotime($time));
225 |
226 | $message = "Sent at $time";
227 | if ($now > 180) {
228 |
229 | $d = array();
230 | $d['s'] = '2';
231 | $d['f'] = "$chatbox";
232 | $d['m'] = "$message";
233 |
234 | $items.= json_encode( $d ).",\r\n";
235 | // $items .= <<
272 | {
273 | "items": [
274 |
275 | ]
276 | }
277 |
278 | 0) {
82 | if ($("#chatbox_"+chatboxtitle).css('display') == 'none') {
83 | $("#chatbox_"+chatboxtitle).css('display','block');
84 | restructureChatBoxes();
85 | }
86 | $("#chatbox_"+chatboxtitle+" .chatboxtextarea").focus();
87 | return;
88 | }
89 |
90 | $(" " ).attr("id","chatbox_"+chatboxtitle)
91 | .addClass("chatbox")
92 | .html(''+getTitle( chatuserName )+'
')
93 | .appendTo($( "body" ));
94 |
95 | $("#chatbox_"+chatboxtitle).css('bottom', '0px');
96 |
97 | chatBoxeslength = 0;
98 |
99 | for (x in chatBoxes) {
100 | if ($("#chatbox_"+chatBoxes[x]).css('display') != 'none') {
101 | chatBoxeslength++;
102 | }
103 | }
104 |
105 | if (chatBoxeslength == 0) {
106 | $("#chatbox_"+chatboxtitle).css('right', '20px');
107 | } else {
108 | width = (chatBoxeslength)*(225+7)+20;
109 | $("#chatbox_"+chatboxtitle).css('right', width+'px');
110 | }
111 |
112 | chatBoxes.push(chatboxtitle);
113 |
114 | if (minimizeChatBox == 1) {
115 | minimizedChatBoxes = new Array();
116 |
117 | if ($.cookie('chatbox_minimized')) {
118 | minimizedChatBoxes = $.cookie('chatbox_minimized').split(/\|/);
119 | }
120 | minimize = 0;
121 | for (j=0;j'+item.m+'');
168 | } else {
169 | $("#chatbox_"+chatboxtitle+" .chatboxcontent").append(''+ getTitle( item.fname )+': '+item.m+'
');
170 | }
171 |
172 | $("#chatbox_"+chatboxtitle+" .chatboxcontent").scrollTop($("#chatbox_"+chatboxtitle+" .chatboxcontent")[0].scrollHeight);
173 | itemsfound += 1;
174 | }
175 | });
176 |
177 | }});
178 |
179 | }
180 |
181 |
182 | function chatHeartbeat(){
183 | var itemsfound = 0;
184 |
185 | if (windowFocus == false) {
186 |
187 | var blinkNumber = 0;
188 | var titleChanged = 0;
189 | for (x in newMessagesWin) {
190 | if (newMessagesWin[x] == true) {
191 | ++blinkNumber;
192 | if (blinkNumber >= blinkOrder) {
193 | //document.title = x+' says...';
194 | document.title = ' New message...';
195 | titleChanged = 1;
196 | break;
197 | }
198 | }
199 | }
200 |
201 | if (titleChanged == 0) {
202 | document.title = originalTitle;
203 | blinkOrder = 0;
204 | } else {
205 | ++blinkOrder;
206 | }
207 |
208 | } else {
209 | for (x in newMessagesWin) {
210 | newMessagesWin[x] = false;
211 | }
212 | }
213 |
214 | for (x in newMessages) {
215 | if (newMessages[x] == true) {
216 | if (chatboxFocus[x] == false) {
217 | //FIXME: add toggle all or none policy, otherwise it looks funny
218 | $('#chatbox_'+x+' .chatboxhead').toggleClass('chatboxblink');
219 | }
220 | }
221 | }
222 |
223 | $.ajax({
224 | url: "chat?action=chatheartbeat",
225 | cache: false,
226 | dataType: "json",
227 | success: function(data) {
228 |
229 | $.each(data.items, function(i,item){
230 | if (item) { // fix strange ie bug
231 | chatboxtitle = item.f;
232 | chatuserName = item.fname;
233 |
234 | if ($("#chatbox_"+chatboxtitle).length <= 0) {
235 | createChatBox(chatboxtitle, chatuserName);
236 | }
237 | if ($("#chatbox_"+chatboxtitle).css('display') == 'none') {
238 | $("#chatbox_"+chatboxtitle).css('display','block');
239 | restructureChatBoxes();
240 | }
241 |
242 | if (item.s == 1) {
243 | item.f = from_username;
244 | }
245 | if (item.s == 2) {
246 | $("#chatbox_"+chatboxtitle+" .chatboxcontent").append(''+item.m+'
');
247 | } else {
248 | newMessages[chatboxtitle] = true;
249 | newMessagesWin[chatboxtitle] = true;
250 | $("#chatbox_"+chatboxtitle+" .chatboxcontent").append(''+ getTitle( item.fname )+': '+item.m+'
');
251 | }
252 |
253 | $("#chatbox_"+chatboxtitle+" .chatboxcontent").scrollTop($("#chatbox_"+chatboxtitle+" .chatboxcontent")[0].scrollHeight);
254 | itemsfound += 1;
255 | }
256 | });
257 | chatHeartbeatCount++;
258 |
259 | if (itemsfound > 0) {
260 | chatHeartbeatTime = minChatHeartbeat;
261 | chatHeartbeatCount = 1;
262 | } else if (chatHeartbeatCount >= 10) {
263 | chatHeartbeatTime *= 2;
264 | chatHeartbeatCount = 1;
265 | if (chatHeartbeatTime > maxChatHeartbeat) {
266 | chatHeartbeatTime = maxChatHeartbeat;
267 | }
268 | }
269 |
270 | setTimeout('chatHeartbeat();',chatHeartbeatTime);
271 | }});
272 | }
273 |
274 | function closeChatBox(chatboxtitle) {
275 | $('#chatbox_'+chatboxtitle).css('display','none');
276 | restructureChatBoxes();
277 |
278 | $.post("chat?action=closechat", { chatbox: chatboxtitle} , function(data){
279 | });
280 |
281 | }
282 |
283 | function toggleChatBoxGrowth(chatboxtitle) {
284 | if ($('#chatbox_'+chatboxtitle+' .chatboxcontent').css('display') == 'none') {
285 |
286 | var minimizedChatBoxes = new Array();
287 |
288 | if ($.cookie('chatbox_minimized')) {
289 | minimizedChatBoxes = $.cookie('chatbox_minimized').split(/\|/);
290 | }
291 |
292 | var newCookie = '';
293 |
294 | for (i=0;i/g,">").replace(/\"/g,""");
335 | $("#chatbox_"+chatboxtitle+" .chatboxcontent").append(''+getTitle(from_username)+': '+message+'
');
336 | $("#chatbox_"+chatboxtitle+" .chatboxcontent").scrollTop($("#chatbox_"+chatboxtitle+" .chatboxcontent")[0].scrollHeight);
337 | });
338 | }
339 | chatHeartbeatTime = minChatHeartbeat;
340 | chatHeartbeatCount = 1;
341 |
342 | return false;
343 | }
344 |
345 | var adjustedHeight = chatboxtextarea.clientHeight;
346 | var maxHeight = 94;
347 |
348 | if (maxHeight > adjustedHeight) {
349 | adjustedHeight = Math.max(chatboxtextarea.scrollHeight, adjustedHeight);
350 | if (maxHeight)
351 | adjustedHeight = Math.min(maxHeight, adjustedHeight);
352 | if (adjustedHeight > chatboxtextarea.clientHeight)
353 | $(chatboxtextarea).css('height',adjustedHeight+8 +'px');
354 | } else {
355 | $(chatboxtextarea).css('overflow','auto');
356 | }
357 |
358 | }
359 |
360 | function startChatSession(){
361 | $.ajax({
362 | url: "chat?action=startchatsession",
363 | cache: false,
364 | dataType: "json",
365 | success: function(data) {
366 |
367 | username = data.username;
368 | from_username = data.from_username;
369 | $.each(data.items, function(i,item){
370 | if (item) { // fix strange ie bug
371 |
372 | chatboxtitle = item.f;
373 | chatuserName = item.fname;
374 | if ($("#chatbox_"+chatboxtitle).length <= 0) {
375 | createChatBox(chatboxtitle,chatuserName ,1);
376 | }
377 |
378 | if (item.s == 1) {
379 | item.f = from_username;
380 | item.fname = from_username;
381 | }
382 |
383 | if (item.s == 2) {
384 | $("#chatbox_"+chatboxtitle+" .chatboxcontent").append(''+item.m+'
');
385 | } else {
386 | $("#chatbox_"+chatboxtitle+" .chatboxcontent").append(''+getTitle(item.fname)+': '+item.m+'
');
387 | }
388 | }
389 | });
390 |
391 | for (i=0;i)[^>]*$|^#([\w-]+)$/,f=/^.[^:#\[\.,]*$/;o.fn=o.prototype={init:function(E,H){E=E||document;if(E.nodeType){this[0]=E;this.length=1;this.context=E;return this}if(typeof E==="string"){var G=D.exec(E);if(G&&(G[1]||!H)){if(G[1]){E=o.clean([G[1]],H)}else{var I=document.getElementById(G[3]);if(I&&I.id!=G[3]){return o().find(E)}var F=o(I||[]);F.context=document;F.selector=E;return F}}else{return o(H).find(E)}}else{if(o.isFunction(E)){return o(document).ready(E)}}if(E.selector&&E.context){this.selector=E.selector;this.context=E.context}return this.setArray(o.isArray(E)?E:o.makeArray(E))},selector:"",jquery:"1.3.2",size:function(){return this.length},get:function(E){return E===g?Array.prototype.slice.call(this):this[E]},pushStack:function(F,H,E){var G=o(F);G.prevObject=this;G.context=this.context;if(H==="find"){G.selector=this.selector+(this.selector?" ":"")+E}else{if(H){G.selector=this.selector+"."+H+"("+E+")"}}return G},setArray:function(E){this.length=0;Array.prototype.push.apply(this,E);return this},each:function(F,E){return o.each(this,F,E)},index:function(E){return o.inArray(E&&E.jquery?E[0]:E,this)},attr:function(F,H,G){var E=F;if(typeof F==="string"){if(H===g){return this[0]&&o[G||"attr"](this[0],F)}else{E={};E[F]=H}}return this.each(function(I){for(F in E){o.attr(G?this.style:this,F,o.prop(this,E[F],G,I,F))}})},css:function(E,F){if((E=="width"||E=="height")&&parseFloat(F)<0){F=g}return this.attr(E,F,"curCSS")},text:function(F){if(typeof F!=="object"&&F!=null){return this.empty().append((this[0]&&this[0].ownerDocument||document).createTextNode(F))}var E="";o.each(F||this,function(){o.each(this.childNodes,function(){if(this.nodeType!=8){E+=this.nodeType!=1?this.nodeValue:o.fn.text([this])}})});return E},wrapAll:function(E){if(this[0]){var F=o(E,this[0].ownerDocument).clone();if(this[0].parentNode){F.insertBefore(this[0])}F.map(function(){var G=this;while(G.firstChild){G=G.firstChild}return G}).append(this)}return this},wrapInner:function(E){return this.each(function(){o(this).contents().wrapAll(E)})},wrap:function(E){return this.each(function(){o(this).wrapAll(E)})},append:function(){return this.domManip(arguments,true,function(E){if(this.nodeType==1){this.appendChild(E)}})},prepend:function(){return this.domManip(arguments,true,function(E){if(this.nodeType==1){this.insertBefore(E,this.firstChild)}})},before:function(){return this.domManip(arguments,false,function(E){this.parentNode.insertBefore(E,this)})},after:function(){return this.domManip(arguments,false,function(E){this.parentNode.insertBefore(E,this.nextSibling)})},end:function(){return this.prevObject||o([])},push:[].push,sort:[].sort,splice:[].splice,find:function(E){if(this.length===1){var F=this.pushStack([],"find",E);F.length=0;o.find(E,this[0],F);return F}else{return this.pushStack(o.unique(o.map(this,function(G){return o.find(E,G)})),"find",E)}},clone:function(G){var E=this.map(function(){if(!o.support.noCloneEvent&&!o.isXMLDoc(this)){var I=this.outerHTML;if(!I){var J=this.ownerDocument.createElement("div");J.appendChild(this.cloneNode(true));I=J.innerHTML}return o.clean([I.replace(/ jQuery\d+="(?:\d+|null)"/g,"").replace(/^\s*/,"")])[0]}else{return this.cloneNode(true)}});if(G===true){var H=this.find("*").andSelf(),F=0;E.find("*").andSelf().each(function(){if(this.nodeName!==H[F].nodeName){return}var I=o.data(H[F],"events");for(var K in I){for(var J in I[K]){o.event.add(this,K,I[K][J],I[K][J].data)}}F++})}return E},filter:function(E){return this.pushStack(o.isFunction(E)&&o.grep(this,function(G,F){return E.call(G,F)})||o.multiFilter(E,o.grep(this,function(F){return F.nodeType===1})),"filter",E)},closest:function(E){var G=o.expr.match.POS.test(E)?o(E):null,F=0;return this.map(function(){var H=this;while(H&&H.ownerDocument){if(G?G.index(H)>-1:o(H).is(E)){o.data(H,"closest",F);return H}H=H.parentNode;F++}})},not:function(E){if(typeof E==="string"){if(f.test(E)){return this.pushStack(o.multiFilter(E,this,true),"not",E)}else{E=o.multiFilter(E,this)}}var F=E.length&&E[E.length-1]!==g&&!E.nodeType;return this.filter(function(){return F?o.inArray(this,E)<0:this!=E})},add:function(E){return this.pushStack(o.unique(o.merge(this.get(),typeof E==="string"?o(E):o.makeArray(E))))},is:function(E){return !!E&&o.multiFilter(E,this).length>0},hasClass:function(E){return !!E&&this.is("."+E)},val:function(K){if(K===g){var E=this[0];if(E){if(o.nodeName(E,"option")){return(E.attributes.value||{}).specified?E.value:E.text}if(o.nodeName(E,"select")){var I=E.selectedIndex,L=[],M=E.options,H=E.type=="select-one";if(I<0){return null}for(var F=H?I:0,J=H?I+1:M.length;F=0||o.inArray(this.name,K)>=0)}else{if(o.nodeName(this,"select")){var N=o.makeArray(K);o("option",this).each(function(){this.selected=(o.inArray(this.value,N)>=0||o.inArray(this.text,N)>=0)});if(!N.length){this.selectedIndex=-1}}else{this.value=K}}})},html:function(E){return E===g?(this[0]?this[0].innerHTML.replace(/ jQuery\d+="(?:\d+|null)"/g,""):null):this.empty().append(E)},replaceWith:function(E){return this.after(E).remove()},eq:function(E){return this.slice(E,+E+1)},slice:function(){return this.pushStack(Array.prototype.slice.apply(this,arguments),"slice",Array.prototype.slice.call(arguments).join(","))},map:function(E){return this.pushStack(o.map(this,function(G,F){return E.call(G,F,G)}))},andSelf:function(){return this.add(this.prevObject)},domManip:function(J,M,L){if(this[0]){var I=(this[0].ownerDocument||this[0]).createDocumentFragment(),F=o.clean(J,(this[0].ownerDocument||this[0]),I),H=I.firstChild;if(H){for(var G=0,E=this.length;G1||G>0?I.cloneNode(true):I)}}if(F){o.each(F,z)}}return this;function K(N,O){return M&&o.nodeName(N,"table")&&o.nodeName(O,"tr")?(N.getElementsByTagName("tbody")[0]||N.appendChild(N.ownerDocument.createElement("tbody"))):N}}};o.fn.init.prototype=o.fn;function z(E,F){if(F.src){o.ajax({url:F.src,async:false,dataType:"script"})}else{o.globalEval(F.text||F.textContent||F.innerHTML||"")}if(F.parentNode){F.parentNode.removeChild(F)}}function e(){return +new Date}o.extend=o.fn.extend=function(){var J=arguments[0]||{},H=1,I=arguments.length,E=false,G;if(typeof J==="boolean"){E=J;J=arguments[1]||{};H=2}if(typeof J!=="object"&&!o.isFunction(J)){J={}}if(I==H){J=this;--H}for(;H-1}},swap:function(H,G,I){var E={};for(var F in G){E[F]=H.style[F];H.style[F]=G[F]}I.call(H);for(var F in G){H.style[F]=E[F]}},css:function(H,F,J,E){if(F=="width"||F=="height"){var L,G={position:"absolute",visibility:"hidden",display:"block"},K=F=="width"?["Left","Right"]:["Top","Bottom"];function I(){L=F=="width"?H.offsetWidth:H.offsetHeight;if(E==="border"){return}o.each(K,function(){if(!E){L-=parseFloat(o.curCSS(H,"padding"+this,true))||0}if(E==="margin"){L+=parseFloat(o.curCSS(H,"margin"+this,true))||0}else{L-=parseFloat(o.curCSS(H,"border"+this+"Width",true))||0}})}if(H.offsetWidth!==0){I()}else{o.swap(H,G,I)}return Math.max(0,Math.round(L))}return o.curCSS(H,F,J)},curCSS:function(I,F,G){var L,E=I.style;if(F=="opacity"&&!o.support.opacity){L=o.attr(E,"opacity");return L==""?"1":L}if(F.match(/float/i)){F=w}if(!G&&E&&E[F]){L=E[F]}else{if(q.getComputedStyle){if(F.match(/float/i)){F="float"}F=F.replace(/([A-Z])/g,"-$1").toLowerCase();var M=q.getComputedStyle(I,null);if(M){L=M.getPropertyValue(F)}if(F=="opacity"&&L==""){L="1"}}else{if(I.currentStyle){var J=F.replace(/\-(\w)/g,function(N,O){return O.toUpperCase()});L=I.currentStyle[F]||I.currentStyle[J];if(!/^\d+(px)?$/i.test(L)&&/^\d/.test(L)){var H=E.left,K=I.runtimeStyle.left;I.runtimeStyle.left=I.currentStyle.left;E.left=L||0;L=E.pixelLeft+"px";E.left=H;I.runtimeStyle.left=K}}}}return L},clean:function(F,K,I){K=K||document;if(typeof K.createElement==="undefined"){K=K.ownerDocument||K[0]&&K[0].ownerDocument||document}if(!I&&F.length===1&&typeof F[0]==="string"){var H=/^<(\w+)\s*\/?>$/.exec(F[0]);if(H){return[K.createElement(H[1])]}}var G=[],E=[],L=K.createElement("div");o.each(F,function(P,S){if(typeof S==="number"){S+=""}if(!S){return}if(typeof S==="string"){S=S.replace(/(<(\w+)[^>]*?)\/>/g,function(U,V,T){return T.match(/^(abbr|br|col|img|input|link|meta|param|hr|area|embed)$/i)?U:V+">"+T+">"});var O=S.replace(/^\s+/,"").substring(0,10).toLowerCase();var Q=!O.indexOf("",""]||!O.indexOf("",""]||O.match(/^<(thead|tbody|tfoot|colg|cap)/)&&[1,""]||!O.indexOf("
",""]||(!O.indexOf(" | ","
"]||!O.indexOf("",""]||!o.support.htmlSerialize&&[1,"div","
"]||[0,"",""];L.innerHTML=Q[1]+S+Q[2];while(Q[0]--){L=L.lastChild}if(!o.support.tbody){var R=/"&&!R?L.childNodes:[];for(var M=N.length-1;M>=0;--M){if(o.nodeName(N[M],"tbody")&&!N[M].childNodes.length){N[M].parentNode.removeChild(N[M])}}}if(!o.support.leadingWhitespace&&/^\s/.test(S)){L.insertBefore(K.createTextNode(S.match(/^\s*/)[0]),L.firstChild)}S=o.makeArray(L.childNodes)}if(S.nodeType){G.push(S)}else{G=o.merge(G,S)}});if(I){for(var J=0;G[J];J++){if(o.nodeName(G[J],"script")&&(!G[J].type||G[J].type.toLowerCase()==="text/javascript")){E.push(G[J].parentNode?G[J].parentNode.removeChild(G[J]):G[J])}else{if(G[J].nodeType===1){G.splice.apply(G,[J+1,0].concat(o.makeArray(G[J].getElementsByTagName("script"))))}I.appendChild(G[J])}}return E}return G},attr:function(J,G,K){if(!J||J.nodeType==3||J.nodeType==8){return g}var H=!o.isXMLDoc(J),L=K!==g;G=H&&o.props[G]||G;if(J.tagName){var F=/href|src|style/.test(G);if(G=="selected"&&J.parentNode){J.parentNode.selectedIndex}if(G in J&&H&&!F){if(L){if(G=="type"&&o.nodeName(J,"input")&&J.parentNode){throw"type property can't be changed"}J[G]=K}if(o.nodeName(J,"form")&&J.getAttributeNode(G)){return J.getAttributeNode(G).nodeValue}if(G=="tabIndex"){var I=J.getAttributeNode("tabIndex");return I&&I.specified?I.value:J.nodeName.match(/(button|input|object|select|textarea)/i)?0:J.nodeName.match(/^(a|area)$/i)&&J.href?0:g}return J[G]}if(!o.support.style&&H&&G=="style"){return o.attr(J.style,"cssText",K)}if(L){J.setAttribute(G,""+K)}var E=!o.support.hrefNormalized&&H&&F?J.getAttribute(G,2):J.getAttribute(G);return E===null?g:E}if(!o.support.opacity&&G=="opacity"){if(L){J.zoom=1;J.filter=(J.filter||"").replace(/alpha\([^)]*\)/,"")+(parseInt(K)+""=="NaN"?"":"alpha(opacity="+K*100+")")}return J.filter&&J.filter.indexOf("opacity=")>=0?(parseFloat(J.filter.match(/opacity=([^)]*)/)[1])/100)+"":""}G=G.replace(/-([a-z])/ig,function(M,N){return N.toUpperCase()});if(L){J[G]=K}return J[G]},trim:function(E){return(E||"").replace(/^\s+|\s+$/g,"")},makeArray:function(G){var E=[];if(G!=null){var F=G.length;if(F==null||typeof G==="string"||o.isFunction(G)||G.setInterval){E[0]=G}else{while(F){E[--F]=G[F]}}}return E},inArray:function(G,H){for(var E=0,F=H.length;E0?this.clone(true):this).get();o.fn[F].apply(o(L[K]),I);J=J.concat(I)}return this.pushStack(J,E,G)}});o.each({removeAttr:function(E){o.attr(this,E,"");if(this.nodeType==1){this.removeAttribute(E)}},addClass:function(E){o.className.add(this,E)},removeClass:function(E){o.className.remove(this,E)},toggleClass:function(F,E){if(typeof E!=="boolean"){E=!o.className.has(this,F)}o.className[E?"add":"remove"](this,F)},remove:function(E){if(!E||o.filter(E,[this]).length){o("*",this).add([this]).each(function(){o.event.remove(this);o.removeData(this)});if(this.parentNode){this.parentNode.removeChild(this)}}},empty:function(){o(this).children().remove();while(this.firstChild){this.removeChild(this.firstChild)}}},function(E,F){o.fn[E]=function(){return this.each(F,arguments)}});function j(E,F){return E[0]&&parseInt(o.curCSS(E[0],F,true),10)||0}var h="jQuery"+e(),v=0,A={};o.extend({cache:{},data:function(F,E,G){F=F==l?A:F;var H=F[h];if(!H){H=F[h]=++v}if(E&&!o.cache[H]){o.cache[H]={}}if(G!==g){o.cache[H][E]=G}return E?o.cache[H][E]:H},removeData:function(F,E){F=F==l?A:F;var H=F[h];if(E){if(o.cache[H]){delete o.cache[H][E];E="";for(E in o.cache[H]){break}if(!E){o.removeData(F)}}}else{try{delete F[h]}catch(G){if(F.removeAttribute){F.removeAttribute(h)}}delete o.cache[H]}},queue:function(F,E,H){if(F){E=(E||"fx")+"queue";var G=o.data(F,E);if(!G||o.isArray(H)){G=o.data(F,E,o.makeArray(H))}else{if(H){G.push(H)}}}return G},dequeue:function(H,G){var E=o.queue(H,G),F=E.shift();if(!G||G==="fx"){F=E[0]}if(F!==g){F.call(H)}}});o.fn.extend({data:function(E,G){var H=E.split(".");H[1]=H[1]?"."+H[1]:"";if(G===g){var F=this.triggerHandler("getData"+H[1]+"!",[H[0]]);if(F===g&&this.length){F=o.data(this[0],E)}return F===g&&H[1]?this.data(H[0]):F}else{return this.trigger("setData"+H[1]+"!",[H[0],G]).each(function(){o.data(this,E,G)})}},removeData:function(E){return this.each(function(){o.removeData(this,E)})},queue:function(E,F){if(typeof E!=="string"){F=E;E="fx"}if(F===g){return o.queue(this[0],E)}return this.each(function(){var G=o.queue(this,E,F);if(E=="fx"&&G.length==1){G[0].call(this)}})},dequeue:function(E){return this.each(function(){o.dequeue(this,E)})}});
13 | /*
14 | * Sizzle CSS Selector Engine - v0.9.3
15 | * Copyright 2009, The Dojo Foundation
16 | * Released under the MIT, BSD, and GPL Licenses.
17 | * More information: http://sizzlejs.com/
18 | */
19 | (function(){var R=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?/g,L=0,H=Object.prototype.toString;var F=function(Y,U,ab,ac){ab=ab||[];U=U||document;if(U.nodeType!==1&&U.nodeType!==9){return[]}if(!Y||typeof Y!=="string"){return ab}var Z=[],W,af,ai,T,ad,V,X=true;R.lastIndex=0;while((W=R.exec(Y))!==null){Z.push(W[1]);if(W[2]){V=RegExp.rightContext;break}}if(Z.length>1&&M.exec(Y)){if(Z.length===2&&I.relative[Z[0]]){af=J(Z[0]+Z[1],U)}else{af=I.relative[Z[0]]?[U]:F(Z.shift(),U);while(Z.length){Y=Z.shift();if(I.relative[Y]){Y+=Z.shift()}af=J(Y,af)}}}else{var ae=ac?{expr:Z.pop(),set:E(ac)}:F.find(Z.pop(),Z.length===1&&U.parentNode?U.parentNode:U,Q(U));af=F.filter(ae.expr,ae.set);if(Z.length>0){ai=E(af)}else{X=false}while(Z.length){var ah=Z.pop(),ag=ah;if(!I.relative[ah]){ah=""}else{ag=Z.pop()}if(ag==null){ag=U}I.relative[ah](ai,ag,Q(U))}}if(!ai){ai=af}if(!ai){throw"Syntax error, unrecognized expression: "+(ah||Y)}if(H.call(ai)==="[object Array]"){if(!X){ab.push.apply(ab,ai)}else{if(U.nodeType===1){for(var aa=0;ai[aa]!=null;aa++){if(ai[aa]&&(ai[aa]===true||ai[aa].nodeType===1&&K(U,ai[aa]))){ab.push(af[aa])}}}else{for(var aa=0;ai[aa]!=null;aa++){if(ai[aa]&&ai[aa].nodeType===1){ab.push(af[aa])}}}}}else{E(ai,ab)}if(V){F(V,U,ab,ac);if(G){hasDuplicate=false;ab.sort(G);if(hasDuplicate){for(var aa=1;aa":function(Z,U,aa){var X=typeof U==="string";if(X&&!/\W/.test(U)){U=aa?U:U.toUpperCase();for(var V=0,T=Z.length;V=0)){if(!V){T.push(Y)}}else{if(V){U[X]=false}}}}return false},ID:function(T){return T[1].replace(/\\/g,"")},TAG:function(U,T){for(var V=0;T[V]===false;V++){}return T[V]&&Q(T[V])?U[1]:U[1].toUpperCase()},CHILD:function(T){if(T[1]=="nth"){var U=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(T[2]=="even"&&"2n"||T[2]=="odd"&&"2n+1"||!/\D/.test(T[2])&&"0n+"+T[2]||T[2]);T[2]=(U[1]+(U[2]||1))-0;T[3]=U[3]-0}T[0]=L++;return T},ATTR:function(X,U,V,T,Y,Z){var W=X[1].replace(/\\/g,"");if(!Z&&I.attrMap[W]){X[1]=I.attrMap[W]}if(X[2]==="~="){X[4]=" "+X[4]+" "}return X},PSEUDO:function(X,U,V,T,Y){if(X[1]==="not"){if(X[3].match(R).length>1||/^\w/.test(X[3])){X[3]=F(X[3],null,null,U)}else{var W=F.filter(X[3],U,V,true^Y);if(!V){T.push.apply(T,W)}return false}}else{if(I.match.POS.test(X[0])||I.match.CHILD.test(X[0])){return true}}return X},POS:function(T){T.unshift(true);return T}},filters:{enabled:function(T){return T.disabled===false&&T.type!=="hidden"},disabled:function(T){return T.disabled===true},checked:function(T){return T.checked===true},selected:function(T){T.parentNode.selectedIndex;return T.selected===true},parent:function(T){return !!T.firstChild},empty:function(T){return !T.firstChild},has:function(V,U,T){return !!F(T[3],V).length},header:function(T){return/h\d/i.test(T.nodeName)},text:function(T){return"text"===T.type},radio:function(T){return"radio"===T.type},checkbox:function(T){return"checkbox"===T.type},file:function(T){return"file"===T.type},password:function(T){return"password"===T.type},submit:function(T){return"submit"===T.type},image:function(T){return"image"===T.type},reset:function(T){return"reset"===T.type},button:function(T){return"button"===T.type||T.nodeName.toUpperCase()==="BUTTON"},input:function(T){return/input|select|textarea|button/i.test(T.nodeName)}},setFilters:{first:function(U,T){return T===0},last:function(V,U,T,W){return U===W.length-1},even:function(U,T){return T%2===0},odd:function(U,T){return T%2===1},lt:function(V,U,T){return UT[3]-0},nth:function(V,U,T){return T[3]-0==U},eq:function(V,U,T){return T[3]-0==U}},filter:{PSEUDO:function(Z,V,W,aa){var U=V[1],X=I.filters[U];if(X){return X(Z,W,V,aa)}else{if(U==="contains"){return(Z.textContent||Z.innerText||"").indexOf(V[3])>=0}else{if(U==="not"){var Y=V[3];for(var W=0,T=Y.length;W=0)}}},ID:function(U,T){return U.nodeType===1&&U.getAttribute("id")===T},TAG:function(U,T){return(T==="*"&&U.nodeType===1)||U.nodeName===T},CLASS:function(U,T){return(" "+(U.className||U.getAttribute("class"))+" ").indexOf(T)>-1},ATTR:function(Y,W){var V=W[1],T=I.attrHandle[V]?I.attrHandle[V](Y):Y[V]!=null?Y[V]:Y.getAttribute(V),Z=T+"",X=W[2],U=W[4];return T==null?X==="!=":X==="="?Z===U:X==="*="?Z.indexOf(U)>=0:X==="~="?(" "+Z+" ").indexOf(U)>=0:!U?Z&&T!==false:X==="!="?Z!=U:X==="^="?Z.indexOf(U)===0:X==="$="?Z.substr(Z.length-U.length)===U:X==="|="?Z===U||Z.substr(0,U.length+1)===U+"-":false},POS:function(X,U,V,Y){var T=U[2],W=I.setFilters[T];if(W){return W(X,V,U,Y)}}}};var M=I.match.POS;for(var O in I.match){I.match[O]=RegExp(I.match[O].source+/(?![^\[]*\])(?![^\(]*\))/.source)}var E=function(U,T){U=Array.prototype.slice.call(U);if(T){T.push.apply(T,U);return T}return U};try{Array.prototype.slice.call(document.documentElement.childNodes)}catch(N){E=function(X,W){var U=W||[];if(H.call(X)==="[object Array]"){Array.prototype.push.apply(U,X)}else{if(typeof X.length==="number"){for(var V=0,T=X.length;V";var T=document.documentElement;T.insertBefore(U,T.firstChild);if(!!document.getElementById(V)){I.find.ID=function(X,Y,Z){if(typeof Y.getElementById!=="undefined"&&!Z){var W=Y.getElementById(X[1]);return W?W.id===X[1]||typeof W.getAttributeNode!=="undefined"&&W.getAttributeNode("id").nodeValue===X[1]?[W]:g:[]}};I.filter.ID=function(Y,W){var X=typeof Y.getAttributeNode!=="undefined"&&Y.getAttributeNode("id");return Y.nodeType===1&&X&&X.nodeValue===W}}T.removeChild(U)})();(function(){var T=document.createElement("div");T.appendChild(document.createComment(""));if(T.getElementsByTagName("*").length>0){I.find.TAG=function(U,Y){var X=Y.getElementsByTagName(U[1]);if(U[1]==="*"){var W=[];for(var V=0;X[V];V++){if(X[V].nodeType===1){W.push(X[V])}}X=W}return X}}T.innerHTML="";if(T.firstChild&&typeof T.firstChild.getAttribute!=="undefined"&&T.firstChild.getAttribute("href")!=="#"){I.attrHandle.href=function(U){return U.getAttribute("href",2)}}})();if(document.querySelectorAll){(function(){var T=F,U=document.createElement("div");U.innerHTML="";if(U.querySelectorAll&&U.querySelectorAll(".TEST").length===0){return}F=function(Y,X,V,W){X=X||document;if(!W&&X.nodeType===9&&!Q(X)){try{return E(X.querySelectorAll(Y),V)}catch(Z){}}return T(Y,X,V,W)};F.find=T.find;F.filter=T.filter;F.selectors=T.selectors;F.matches=T.matches})()}if(document.getElementsByClassName&&document.documentElement.getElementsByClassName){(function(){var T=document.createElement("div");T.innerHTML="";if(T.getElementsByClassName("e").length===0){return}T.lastChild.className="e";if(T.getElementsByClassName("e").length===1){return}I.order.splice(1,0,"CLASS");I.find.CLASS=function(U,V,W){if(typeof V.getElementsByClassName!=="undefined"&&!W){return V.getElementsByClassName(U[1])}}})()}function P(U,Z,Y,ad,aa,ac){var ab=U=="previousSibling"&&!ac;for(var W=0,V=ad.length;W0){X=T;break}}}T=T[U]}ad[W]=X}}}var K=document.compareDocumentPosition?function(U,T){return U.compareDocumentPosition(T)&16}:function(U,T){return U!==T&&(U.contains?U.contains(T):true)};var Q=function(T){return T.nodeType===9&&T.documentElement.nodeName!=="HTML"||!!T.ownerDocument&&Q(T.ownerDocument)};var J=function(T,aa){var W=[],X="",Y,V=aa.nodeType?[aa]:aa;while((Y=I.match.PSEUDO.exec(T))){X+=Y[0];T=T.replace(I.match.PSEUDO,"")}T=I.relative[T]?T+"*":T;for(var Z=0,U=V.length;Z0||T.offsetHeight>0};F.selectors.filters.animated=function(T){return o.grep(o.timers,function(U){return T===U.elem}).length};o.multiFilter=function(V,T,U){if(U){V=":not("+V+")"}return F.matches(V,T)};o.dir=function(V,U){var T=[],W=V[U];while(W&&W!=document){if(W.nodeType==1){T.push(W)}W=W[U]}return T};o.nth=function(X,T,V,W){T=T||1;var U=0;for(;X;X=X[V]){if(X.nodeType==1&&++U==T){break}}return X};o.sibling=function(V,U){var T=[];for(;V;V=V.nextSibling){if(V.nodeType==1&&V!=U){T.push(V)}}return T};return;l.Sizzle=F})();o.event={add:function(I,F,H,K){if(I.nodeType==3||I.nodeType==8){return}if(I.setInterval&&I!=l){I=l}if(!H.guid){H.guid=this.guid++}if(K!==g){var G=H;H=this.proxy(G);H.data=K}var E=o.data(I,"events")||o.data(I,"events",{}),J=o.data(I,"handle")||o.data(I,"handle",function(){return typeof o!=="undefined"&&!o.event.triggered?o.event.handle.apply(arguments.callee.elem,arguments):g});J.elem=I;o.each(F.split(/\s+/),function(M,N){var O=N.split(".");N=O.shift();H.type=O.slice().sort().join(".");var L=E[N];if(o.event.specialAll[N]){o.event.specialAll[N].setup.call(I,K,O)}if(!L){L=E[N]={};if(!o.event.special[N]||o.event.special[N].setup.call(I,K,O)===false){if(I.addEventListener){I.addEventListener(N,J,false)}else{if(I.attachEvent){I.attachEvent("on"+N,J)}}}}L[H.guid]=H;o.event.global[N]=true});I=null},guid:1,global:{},remove:function(K,H,J){if(K.nodeType==3||K.nodeType==8){return}var G=o.data(K,"events"),F,E;if(G){if(H===g||(typeof H==="string"&&H.charAt(0)==".")){for(var I in G){this.remove(K,I+(H||""))}}else{if(H.type){J=H.handler;H=H.type}o.each(H.split(/\s+/),function(M,O){var Q=O.split(".");O=Q.shift();var N=RegExp("(^|\\.)"+Q.slice().sort().join(".*\\.")+"(\\.|$)");if(G[O]){if(J){delete G[O][J.guid]}else{for(var P in G[O]){if(N.test(G[O][P].type)){delete G[O][P]}}}if(o.event.specialAll[O]){o.event.specialAll[O].teardown.call(K,Q)}for(F in G[O]){break}if(!F){if(!o.event.special[O]||o.event.special[O].teardown.call(K,Q)===false){if(K.removeEventListener){K.removeEventListener(O,o.data(K,"handle"),false)}else{if(K.detachEvent){K.detachEvent("on"+O,o.data(K,"handle"))}}}F=null;delete G[O]}}})}for(F in G){break}if(!F){var L=o.data(K,"handle");if(L){L.elem=null}o.removeData(K,"events");o.removeData(K,"handle")}}},trigger:function(I,K,H,E){var G=I.type||I;if(!E){I=typeof I==="object"?I[h]?I:o.extend(o.Event(G),I):o.Event(G);if(G.indexOf("!")>=0){I.type=G=G.slice(0,-1);I.exclusive=true}if(!H){I.stopPropagation();if(this.global[G]){o.each(o.cache,function(){if(this.events&&this.events[G]){o.event.trigger(I,K,this.handle.elem)}})}}if(!H||H.nodeType==3||H.nodeType==8){return g}I.result=g;I.target=H;K=o.makeArray(K);K.unshift(I)}I.currentTarget=H;var J=o.data(H,"handle");if(J){J.apply(H,K)}if((!H[G]||(o.nodeName(H,"a")&&G=="click"))&&H["on"+G]&&H["on"+G].apply(H,K)===false){I.result=false}if(!E&&H[G]&&!I.isDefaultPrevented()&&!(o.nodeName(H,"a")&&G=="click")){this.triggered=true;try{H[G]()}catch(L){}}this.triggered=false;if(!I.isPropagationStopped()){var F=H.parentNode||H.ownerDocument;if(F){o.event.trigger(I,K,F,true)}}},handle:function(K){var J,E;K=arguments[0]=o.event.fix(K||l.event);K.currentTarget=this;var L=K.type.split(".");K.type=L.shift();J=!L.length&&!K.exclusive;var I=RegExp("(^|\\.)"+L.slice().sort().join(".*\\.")+"(\\.|$)");E=(o.data(this,"events")||{})[K.type];for(var G in E){var H=E[G];if(J||I.test(H.type)){K.handler=H;K.data=H.data;var F=H.apply(this,arguments);if(F!==g){K.result=F;if(F===false){K.preventDefault();K.stopPropagation()}}if(K.isImmediatePropagationStopped()){break}}}},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode metaKey newValue originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),fix:function(H){if(H[h]){return H}var F=H;H=o.Event(F);for(var G=this.props.length,J;G;){J=this.props[--G];H[J]=F[J]}if(!H.target){H.target=H.srcElement||document}if(H.target.nodeType==3){H.target=H.target.parentNode}if(!H.relatedTarget&&H.fromElement){H.relatedTarget=H.fromElement==H.target?H.toElement:H.fromElement}if(H.pageX==null&&H.clientX!=null){var I=document.documentElement,E=document.body;H.pageX=H.clientX+(I&&I.scrollLeft||E&&E.scrollLeft||0)-(I.clientLeft||0);H.pageY=H.clientY+(I&&I.scrollTop||E&&E.scrollTop||0)-(I.clientTop||0)}if(!H.which&&((H.charCode||H.charCode===0)?H.charCode:H.keyCode)){H.which=H.charCode||H.keyCode}if(!H.metaKey&&H.ctrlKey){H.metaKey=H.ctrlKey}if(!H.which&&H.button){H.which=(H.button&1?1:(H.button&2?3:(H.button&4?2:0)))}return H},proxy:function(F,E){E=E||function(){return F.apply(this,arguments)};E.guid=F.guid=F.guid||E.guid||this.guid++;return E},special:{ready:{setup:B,teardown:function(){}}},specialAll:{live:{setup:function(E,F){o.event.add(this,F[0],c)},teardown:function(G){if(G.length){var E=0,F=RegExp("(^|\\.)"+G[0]+"(\\.|$)");o.each((o.data(this,"events").live||{}),function(){if(F.test(this.type)){E++}});if(E<1){o.event.remove(this,G[0],c)}}}}}};o.Event=function(E){if(!this.preventDefault){return new o.Event(E)}if(E&&E.type){this.originalEvent=E;this.type=E.type}else{this.type=E}this.timeStamp=e();this[h]=true};function k(){return false}function u(){return true}o.Event.prototype={preventDefault:function(){this.isDefaultPrevented=u;var E=this.originalEvent;if(!E){return}if(E.preventDefault){E.preventDefault()}E.returnValue=false},stopPropagation:function(){this.isPropagationStopped=u;var E=this.originalEvent;if(!E){return}if(E.stopPropagation){E.stopPropagation()}E.cancelBubble=true},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=u;this.stopPropagation()},isDefaultPrevented:k,isPropagationStopped:k,isImmediatePropagationStopped:k};var a=function(F){var E=F.relatedTarget;while(E&&E!=this){try{E=E.parentNode}catch(G){E=this}}if(E!=this){F.type=F.data;o.event.handle.apply(this,arguments)}};o.each({mouseover:"mouseenter",mouseout:"mouseleave"},function(F,E){o.event.special[E]={setup:function(){o.event.add(this,F,a,E)},teardown:function(){o.event.remove(this,F,a)}}});o.fn.extend({bind:function(F,G,E){return F=="unload"?this.one(F,G,E):this.each(function(){o.event.add(this,F,E||G,E&&G)})},one:function(G,H,F){var E=o.event.proxy(F||H,function(I){o(this).unbind(I,E);return(F||H).apply(this,arguments)});return this.each(function(){o.event.add(this,G,E,F&&H)})},unbind:function(F,E){return this.each(function(){o.event.remove(this,F,E)})},trigger:function(E,F){return this.each(function(){o.event.trigger(E,F,this)})},triggerHandler:function(E,G){if(this[0]){var F=o.Event(E);F.preventDefault();F.stopPropagation();o.event.trigger(F,G,this[0]);return F.result}},toggle:function(G){var E=arguments,F=1;while(Fa';var H=K.getElementsByTagName("*"),E=K.getElementsByTagName("a")[0];if(!H||!H.length||!E){return}o.support={leadingWhitespace:K.firstChild.nodeType==3,tbody:!K.getElementsByTagName("tbody").length,objectAll:!!K.getElementsByTagName("object")[0].getElementsByTagName("*").length,htmlSerialize:!!K.getElementsByTagName("link").length,style:/red/.test(E.getAttribute("style")),hrefNormalized:E.getAttribute("href")==="/a",opacity:E.style.opacity==="0.5",cssFloat:!!E.style.cssFloat,scriptEval:false,noCloneEvent:true,boxModel:null};G.type="text/javascript";try{G.appendChild(document.createTextNode("window."+J+"=1;"))}catch(I){}F.insertBefore(G,F.firstChild);if(l[J]){o.support.scriptEval=true;delete l[J]}F.removeChild(G);if(K.attachEvent&&K.fireEvent){K.attachEvent("onclick",function(){o.support.noCloneEvent=false;K.detachEvent("onclick",arguments.callee)});K.cloneNode(true).fireEvent("onclick")}o(function(){var L=document.createElement("div");L.style.width=L.style.paddingLeft="1px";document.body.appendChild(L);o.boxModel=o.support.boxModel=L.offsetWidth===2;document.body.removeChild(L).style.display="none"})})();var w=o.support.cssFloat?"cssFloat":"styleFloat";o.props={"for":"htmlFor","class":"className","float":w,cssFloat:w,styleFloat:w,readonly:"readOnly",maxlength:"maxLength",cellspacing:"cellSpacing",rowspan:"rowSpan",tabindex:"tabIndex"};o.fn.extend({_load:o.fn.load,load:function(G,J,K){if(typeof G!=="string"){return this._load(G)}var I=G.indexOf(" ");if(I>=0){var E=G.slice(I,G.length);G=G.slice(0,I)}var H="GET";if(J){if(o.isFunction(J)){K=J;J=null}else{if(typeof J==="object"){J=o.param(J);H="POST"}}}var F=this;o.ajax({url:G,type:H,dataType:"html",data:J,complete:function(M,L){if(L=="success"||L=="notmodified"){F.html(E?o("").append(M.responseText.replace(/