Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > JavaScript
JavaScript Forum programmation JavaScript. Lire : Cours JavaScript, FAQ JavaScript, Toutes les FAQ JavaScript et Sources JavaScript
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 18/02/2011, 10h03   #1
Invité de passage
 
Inscription : février 2011
Messages : 9
Détails du profil
Informations forums :
Inscription : février 2011
Messages : 9
Points : 0
Points : 0
Par défaut Résumé automatique des articles avec le même libellé dans blogger

Bonjour,

Après une recherche approfondie, je n'ai pas trouvé de solution à mon problème.

Voilà, je souhaiterais savoir s'il existe un code javascript capable de faire un résumé automatique avec une image en page d'accueil pour des articles avec des libellés spécifiques.

En fait, j'ai un blog blogger qui utilise déjà un code javascript qui résume tous les nouveaux messages en première page. Mais je ne souhaite avoir un résumé que des pages avec le même libellé.

Voici mon code javascript quej'utilise actuellement:

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<b:if cond='data:blog.pageType != "item"'>
<b:if cond='data:blog.pageType != "static_page"'>
<div expr:id='"summary" + data:post.id'><data:post.body/></div>
<script type='text/javascript'>createSummaryAndThumb("summary<data:post.id/>");</script>
<span id='showlink'><a expr:href='data:post.url'>lire la suite...</a></span>
</b:if></b:if>
 
 
<script type='text/javascript'>
 
var thumbnail_mode = "no-float" ;
 
 
 
summary_noimg = 250;
summary_img = 90;
img_thumb_height = 130;
img_thumb_width = 250;
</script>

Voilà, j'espère que quelqu'un sait comment faire.

Merci d'avance
Mon blog: http://la-parodie-du-sport.blogspot.com/
Saril est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/02/2011, 10h04   #2
Rédacteur/Modérateur
 
Avatar de SpaceFrog
 
Homme
Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Analyste Programmeur
Inscription : mars 2002
Messages : 30 007
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Royaume-Uni

Informations professionnelles :
Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Analyste Programmeur
Secteur : Industrie

Informations forums :
Inscription : mars 2002
Messages : 30 007
Points : 45 091
Points : 45 091
qu'entends tu par résumé ??
les x premiers caractères ?
__________________
Ma page Developpez
Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
Votre post est résolu ? Alors n'oubliez pas le Tag


réalisations :www.planet-languages.com|www.saftair.com| www.ouestisol.fr | www.sebemex.fr | www.extramiante.fr | www.sistac-alizay.fr | www.acoustishop.fr | www.litt.fr | www.ouestventil.fr
SpaceFrog est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/02/2011, 10h49   #3
Invité de passage
 
Inscription : février 2011
Messages : 9
Détails du profil
Informations forums :
Inscription : février 2011
Messages : 9
Points : 0
Points : 0
Ehbien avoir exactement la même chose que ce que j'ai actuellement sur mon blog en page d'acceuil. Si vous allez voir vous verrez en bas à gauche, 4 petits résumés.

Seulement ceux que je veux moi c'est ce genre de résumé pour un libellé en particulier et non pas pour tous les articles en général que j'écris.

Vous avez une idée?
Saril est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/02/2011, 10h52   #4
Rédacteur/Modérateur
 
Avatar de SpaceFrog
 
Homme
Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Analyste Programmeur
Inscription : mars 2002
Messages : 30 007
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Royaume-Uni

Informations professionnelles :
Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Analyste Programmeur
Secteur : Industrie

Informations forums :
Inscription : mars 2002
Messages : 30 007
Points : 45 091
Points : 45 091
sur le principe du résumé pas de souci il suffit de faire un substr ou une regexp ...
après pour le "filtre" faudrait connaitre les conditions ...
__________________
Ma page Developpez
Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
Votre post est résolu ? Alors n'oubliez pas le Tag


réalisations :www.planet-languages.com|www.saftair.com| www.ouestisol.fr | www.sebemex.fr | www.extramiante.fr | www.sistac-alizay.fr | www.acoustishop.fr | www.litt.fr | www.ouestventil.fr
SpaceFrog est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/02/2011, 10h59   #5
Invité de passage
 
Inscription : février 2011
Messages : 9
Détails du profil
Informations forums :
Inscription : février 2011
Messages : 9
Points : 0
Points : 0
Je précise que ce script était déjà incorporé à l'origine dans mon template parce que moi mes connaissances en javascriptsont très limités .

La page que je veux résumer est celle-ci: http://la-parodie-du-sport.blogspot..../Parodie-Sport.

Si vous avez la solution, je vous serais très reconnaissant!
Saril est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/02/2011, 11h00   #6
Rédacteur/Modérateur
 
Avatar de SpaceFrog
 
Homme
Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Analyste Programmeur
Inscription : mars 2002
Messages : 30 007
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Royaume-Uni

Informations professionnelles :
Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Analyste Programmeur
Secteur : Industrie

Informations forums :
Inscription : mars 2002
Messages : 30 007
Points : 45 091
Points : 45 091
je viens de te donner la solution pour le résumé ...
subtring substr ou regexp ...

pour ce qui est du filtre si tu ne nous en dit pas plus ...
__________________
Ma page Developpez
Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
Votre post est résolu ? Alors n'oubliez pas le Tag


réalisations :www.planet-languages.com|www.saftair.com| www.ouestisol.fr | www.sebemex.fr | www.extramiante.fr | www.sistac-alizay.fr | www.acoustishop.fr | www.litt.fr | www.ouestventil.fr
SpaceFrog est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/02/2011, 11h04   #7
Invité de passage
 
Inscription : février 2011
Messages : 9
Détails du profil
Informations forums :
Inscription : février 2011
Messages : 9
Points : 0
Points : 0
Ah, c'est juste que je suis novice, et je comprends pas où et comment mettre ce subtring substr ou regexp .

Et puis, je ne sais pas ce que vous entendez par "filtre".

Désolé d'être ignorant comme ça
Saril est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/02/2011, 11h05   #8
Rédacteur/Modérateur
 
Avatar de SpaceFrog
 
Homme
Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Analyste Programmeur
Inscription : mars 2002
Messages : 30 007
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Royaume-Uni

Informations professionnelles :
Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Analyste Programmeur
Secteur : Industrie

Informations forums :
Inscription : mars 2002
Messages : 30 007
Points : 45 091
Points : 45 091
commence déja par le résumé
Code :
1
2
var article="Etiam elementum nisi quis enim sollicitudin dapibus quis vitae sem. Aenean dictum lobortis leo quis cursus. Mauris varius vestibulum dui eget viverra! Nullam varius ligula eget metus ornare ut dignissim turpis viverra. Vivamus eget risus non augue fermentum vestibulum ut quis dui. Vestibulum mollis laoreet diam, et congue nibh pellentesque molestie. Curabitur pulvinar tincidunt posuere. Vivamus auctor mi at purus sagittis varius. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Mauris tincidunt, ligula id tincidunt elementum, nulla risus volutpat ipsum, elementum congue ipsum risus id lacus. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Quisque est lacus, aliquet malesuada tincidunt vel, tincidunt at enim? Nam ornare, nulla a adipiscing placerat, justo sapien viverra orci, sed tincidunt est diam eu erat? In at neque massa, vel sagittis odio. Etiam eget ligula in mi malesuada porttitor ut eget orci. Sed a eros sit amet eros porta ultrices. Nullam eu purus velit, eget pellentesque felis. Aliquam vestibulum pharetra neque, nec volutpat erat placerat sit amet. Maecenas iaculis, nibh quis tincidunt ultricies, lectus libero ullamcorper turpis, nec ultricies nunc mauris eu mi. Cras lobortis velit at odio accumsan dictum."
alert(article.substr(0,50)+" ... " )
__________________
Ma page Developpez
Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
Votre post est résolu ? Alors n'oubliez pas le Tag


réalisations :www.planet-languages.com|www.saftair.com| www.ouestisol.fr | www.sebemex.fr | www.extramiante.fr | www.sistac-alizay.fr | www.acoustishop.fr | www.litt.fr | www.ouestventil.fr
SpaceFrog est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/02/2011, 11h11   #9
Invité de passage
 
Inscription : février 2011
Messages : 9
Détails du profil
Informations forums :
Inscription : février 2011
Messages : 9
Points : 0
Points : 0
Et je dois mettre ce code à quelle endroit?
Saril est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/02/2011, 11h13   #10
Rédacteur/Modérateur
 
Avatar de SpaceFrog
 
Homme
Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Analyste Programmeur
Inscription : mars 2002
Messages : 30 007
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Royaume-Uni

Informations professionnelles :
Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Analyste Programmeur
Secteur : Industrie

Informations forums :
Inscription : mars 2002
Messages : 30 007
Points : 45 091
Points : 45 091
oulà !!!
j'en sais rien tu utilises un template un cms ...

a priori il existe une focntion quei le fait
createSummaryAndThumb()
après faut fouiller dans le code pour savoir comment ça fonctionne ton bouzin
__________________
Ma page Developpez
Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
Votre post est résolu ? Alors n'oubliez pas le Tag


réalisations :www.planet-languages.com|www.saftair.com| www.ouestisol.fr | www.sebemex.fr | www.extramiante.fr | www.sistac-alizay.fr | www.acoustishop.fr | www.litt.fr | www.ouestventil.fr
SpaceFrog est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/02/2011, 11h23   #11
Invité de passage
 
Inscription : février 2011
Messages : 9
Détails du profil
Informations forums :
Inscription : février 2011
Messages : 9
Points : 0
Points : 0
Et si je vous met une partie de mon code vous pensez pouvoir trouver où le mettre? Même si ça doit être difficile je pense....
Saril est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/02/2011, 11h26   #12
Rédacteur/Modérateur
 
Avatar de SpaceFrog
 
Homme
Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Analyste Programmeur
Inscription : mars 2002
Messages : 30 007
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Royaume-Uni

Informations professionnelles :
Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Analyste Programmeur
Secteur : Industrie

Informations forums :
Inscription : mars 2002
Messages : 30 007
Points : 45 091
Points : 45 091
si tu mets le code entre balise code ...
perso j'ai pas le temps, mais peut être une autre ame charitable ...
__________________
Ma page Developpez
Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
Votre post est résolu ? Alors n'oubliez pas le Tag


réalisations :www.planet-languages.com|www.saftair.com| www.ouestisol.fr | www.sebemex.fr | www.extramiante.fr | www.sistac-alizay.fr | www.acoustishop.fr | www.litt.fr | www.ouestventil.fr
SpaceFrog est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/02/2011, 11h32   #13
Invité de passage
 
Inscription : février 2011
Messages : 9
Détails du profil
Informations forums :
Inscription : février 2011
Messages : 9
Points : 0
Points : 0
Dommage , sinon voici la première partie de mon code

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
 
 
<b:if cond='data:blog.url == data:blog.homepageUrl'>
 
<!-- Home Page -->
<style type='text/css'>
/* Layout Editor  */
body#layout #outer-wrapper { width: 990px; margin:0; padding: 0; }
body#layout #header-wrapper, body#layout #footer-wrapper { margin: 0; padding: 0; background-image: none; height: auto; } 
body#layout #home{margin:0px;padding:0px;height:180px}
body#layout #s3slider, body#layout #destaque{margin: 25px 0 0 0}
body#layout #content-wrapper{margin: 0; padding:0px}
</style>
 
</b:if>
 
<script type='text/javascript'>
//<![CDATA[
var relatedTitles = new Array();
var relatedTitlesNum = 0;
var relatedUrls = new Array();
function related_results_labels(json) {
for (var i = 0; i < json.feed.entry.length; i++) {
var entry = json.feed.entry[i];
relatedTitles[relatedTitlesNum] = entry.title.$t;
for (var k = 0; k < entry.link.length; k++) {
if (entry.link[k].rel == 'alternate') {
relatedUrls[relatedTitlesNum] = entry.link[k].href;
relatedTitlesNum++;
break;
}
}
}
}
function removeRelatedDuplicates() {
var tmp = new Array(0);
var tmp2 = new Array(0);
for(var i = 0; i < relatedUrls.length; i++) {
if(!contains(tmp, relatedUrls[i])) {
tmp.length += 1;
tmp[tmp.length - 1] = relatedUrls[i];
tmp2.length += 1;
tmp2[tmp2.length - 1] = relatedTitles[i];
}
}
relatedTitles = tmp2;
relatedUrls = tmp;
}
function contains(a, e) {
for(var j = 0; j < a.length; j++) if (a[j]==e) return true;
return false;
}
function printRelatedLabels() {
var r = Math.floor((relatedTitles.length - 1) * Math.random());
var i = 0;
document.write('<ul>');
while (i < relatedTitles.length && i < 20) {
document.write('<li><a href="' + relatedUrls[r] + '">' + relatedTitles[r] + '</a></li>');
if (r < relatedTitles.length - 1) {
r++;
} else {
r = 0;
}
i++;
}
document.write('</ul>');
}
//]]>
</script>
 
 
<script type='text/javascript'>
//<![CDATA[
(function(){
/*
 * jQuery 1.2.6 - New Wave Javascript
 *
 * Copyright (c) 2008 John Resig (jquery.com)
 * Dual licensed under the MIT (MIT-LICENSE.txt)
 * and GPL (GPL-LICENSE.txt) licenses.
 *
 * $Date: 2008-05-24 14:22:17 -0400 (Sat, 24 May 2008) $
 * $Rev: 5685 $
 */
 
// Map over jQuery in case of overwrite
var _jQuery = window.jQuery,
// Map over the $ in case of overwrite
    _$ = window.$;
 
var jQuery = window.jQuery = window.$ = function( selector, context ) {
    // The jQuery object is actually just the init constructor 'enhanced'
    return new jQuery.fn.init( selector, context );
};
 
// A simple way to check for HTML strings or ID strings
// (both of which we optimize for)
var quickExpr = /^[^<]*(<(.|\s)+>)[^>]*$|^#(\w+)$/,
 
// Is it a simple selector
    isSimple = /^.[^:#\[\.]*$/,
 
// Will speed up references to undefined, and allows munging its name.
    undefined;
 
jQuery.fn = jQuery.prototype = {
    init: function( selector, context ) {
        // Make sure that a selection was provided
        selector = selector || document;
 
        // Handle $(DOMElement)
        if ( selector.nodeType ) {
            this[0] = selector;
            this.length = 1;
            return this;
        }
        // Handle HTML strings
        if ( typeof selector == "string" ) {
            // Are we dealing with HTML string or an ID?
            var match = quickExpr.exec( selector );
 
            // Verify a match, and that no context was specified for #id
            if ( match && (match[1] || !context) ) {
 
                // HANDLE: $(html) -> $(array)
                if ( match[1] )
                    selector = jQuery.clean( [ match[1] ], context );
 
                // HANDLE: $("#id")
                else {
                    var elem = document.getElementById( match[3] );
 
                    // Make sure an element was located
                    if ( elem ){
                        // Handle the case where IE and Opera return items
                        // by name instead of ID
                        if ( elem.id != match[3] )
                            return jQuery().find( selector );
 
                        // Otherwise, we inject the element directly into the jQuery object
                        return jQuery( elem );
                    }
                    selector = [];
                }
 
            // HANDLE: $(expr, [context])
            // (which is just equivalent to: $(content).find(expr)
            } else
                return jQuery( context ).find( selector );
 
        // HANDLE: $(function)
        // Shortcut for document ready
        } else if ( jQuery.isFunction( selector ) )
            return jQuery( document )[ jQuery.fn.ready ? "ready" : "load" ]( selector );
 
        return this.setArray(jQuery.makeArray(selector));
    },
 
    // The current version of jQuery being used
    jquery: "1.2.6",
 
    // The number of elements contained in the matched element set
    size: function() {
        return this.length;
    },
 
    // The number of elements contained in the matched element set
    length: 0,
 
    // Get the Nth element in the matched element set OR
    // Get the whole matched element set as a clean array
    get: function( num ) {
        return num == undefined ?
 
            // Return a 'clean' array
            jQuery.makeArray( this ) :
 
            // Return just the object
            this[ num ];
    },
 
    // Take an array of elements and push it onto the stack
    // (returning the new matched element set)
    pushStack: function( elems ) {
        // Build a new jQuery matched element set
        var ret = jQuery( elems );
 
        // Add the old object onto the stack (as a reference)
        ret.prevObject = this;
 
        // Return the newly-formed element set
        return ret;
    },
 
    // Force the current matched set of elements to become
    // the specified array of elements (destroying the stack in the process)
    // You should use pushStack() in order to do this, but maintain the stack
    setArray: function( elems ) {
        // Resetting the length to 0, then using the native Array push
        // is a super-fast way to populate an object with array-like properties
        this.length = 0;
        Array.prototype.push.apply( this, elems );
 
        return this;
    },
 
    // Execute a callback for every element in the matched set.
    // (You can seed the arguments with an array of args, but this is
    // only used internally.)
    each: function( callback, args ) {
        return jQuery.each( this, callback, args );
    },
 
    // Determine the position of an element within
    // the matched set of elements
    index: function( elem ) {
        var ret = -1;
 
        // Locate the position of the desired element
        return jQuery.inArray(
            // If it receives a jQuery object, the first element is used
            elem && elem.jquery ? elem[0] : elem
        , this );
    },
 
    attr: function( name, value, type ) {
        var options = name;
 
        // Look for the case where we're accessing a style value
        if ( name.constructor == String )
            if ( value === undefined )
                return this[0] && jQuery[ type || "attr" ]( this[0], name );
 
            else {
                options = {};
                options[ name ] = value;
            }
 
        // Check to see if we're setting style values
        return this.each(function(i){
            // Set all the styles
            for ( name in options )
                jQuery.attr(
                    type ?
                        this.style :
                        this,
                    name, jQuery.prop( this, options[ name ], type, i, name )
                );
        });
    },
 
    css: function( key, value ) {
        // ignore negative width and height values
        if ( (key == 'width' || key == 'height') && parseFloat(value) < 0 )
            value = undefined;
        return this.attr( key, value, "curCSS" );
    },
 
    text: function( text ) {
        if ( typeof text != "object" && text != null )
            return this.empty().append( (this[0] && this[0].ownerDocument || document).createTextNode( text ) );
 
        var ret = "";
 
        jQuery.each( text || this, function(){
            jQuery.each( this.childNodes, function(){
                if ( this.nodeType != 8 )
                    ret += this.nodeType != 1 ?
                        this.nodeValue :
                        jQuery.fn.text( [ this ] );
            });
        });
 
        return ret;
    },
 
    wrapAll: function( html ) {
        if ( this[0] )
            // The elements to wrap the target around
            jQuery( html, this[0].ownerDocument )
                .clone()
                .insertBefore( this[0] )
                .map(function(){
                    var elem = this;
 
                    while ( elem.firstChild )
                        elem = elem.firstChild;
 
                    return elem;
                })
                .append(this);
 
        return this;
    },
 
    wrapInner: function( html ) {
        return this.each(function(){
            jQuery( this ).contents().wrapAll( html );
        });
    },
 
    wrap: function( html ) {
        return this.each(function(){
            jQuery( this ).wrapAll( html );
        });
    },
 
    append: function() {
        return this.domManip(arguments, true, false, function(elem){
            if (this.nodeType == 1)
                this.appendChild( elem );
        });
    },
 
    prepend: function() {
        return this.domManip(arguments, true, true, function(elem){
            if (this.nodeType == 1)
                this.insertBefore( elem, this.firstChild );
        });
    },
 
    before: function() {
        return this.domManip(arguments, false, false, function(elem){
            this.parentNode.insertBefore( elem, this );
        });
    },
 
    after: function() {
        return this.domManip(arguments, false, true, function(elem){
            this.parentNode.insertBefore( elem, this.nextSibling );
        });
    },
 
    end: function() {
        return this.prevObject || jQuery( [] );
    },
 
    find: function( selector ) {
        var elems = jQuery.map(this, function(elem){
            return jQuery.find( selector, elem );
        });
 
        return this.pushStack( /[^+>] [^+>]/.test( selector ) || selector.indexOf("..") > -1 ?
            jQuery.unique( elems ) :
            elems );
    },
 
    clone: function( events ) {
        // Do the clone
        var ret = this.map(function(){
            if ( jQuery.browser.msie && !jQuery.isXMLDoc(this) ) {
                // IE copies events bound via attachEvent when
                // using cloneNode. Calling detachEvent on the
                // clone will also remove the events from the orignal
                // In order to get around this, we use innerHTML.
                // Unfortunately, this means some modifications to
                // attributes in IE that are actually only stored
                // as properties will not be copied (such as the
                // the name attribute on an input).
                var clone = this.cloneNode(true),
                    container = document.createElement("div");
                container.appendChild(clone);
                return jQuery.clean([container.innerHTML])[0];
            } else
                return this.cloneNode(true);
        });
 
        // Need to set the expando to null on the cloned set if it exists
        // removeData doesn't work here, IE removes it from the original as well
        // this is primarily for IE but the data expando shouldn't be copied over in any browser
        var clone = ret.find("*").andSelf().each(function(){
            if ( this[ expando ] != undefined )
                this[ expando ] = null;
        });
 
        // Copy the events from the original to the clone
        if ( events === true )
            this.find("*").andSelf().each(function(i){
                if (this.nodeType == 3)
                    return;
                var events = jQuery.data( this, "events" );
 
                for ( var type in events )
                    for ( var handler in events[ type ] )
                        jQuery.event.add( clone[ i ], type, events[ type ][ handler ], events[ type ][ handler ].data );
            });
 
        // Return the cloned set
        return ret;
    },
 
    filter: function( selector ) {
        return this.pushStack(
            jQuery.isFunction( selector ) &&
            jQuery.grep(this, function(elem, i){
                return selector.call( elem, i );
            }) ||
 
            jQuery.multiFilter( selector, this ) );
    },
 
    not: function( selector ) {
        if ( selector.constructor == String )
            // test special case where just one selector is passed in
            if ( isSimple.test( selector ) )
                return this.pushStack( jQuery.multiFilter( selector, this, true ) );
            else
                selector = jQuery.multiFilter( selector, this );
 
        var isArrayLike = selector.length && selector[selector.length - 1] !== undefined && !selector.nodeType;
        return this.filter(function() {
            return isArrayLike ? jQuery.inArray( this, selector ) < 0 : this != selector;
        });
    },
 
    add: function( selector ) {
        return this.pushStack( jQuery.unique( jQuery.merge(
            this.get(),
            typeof selector == 'string' ?
                jQuery( selector ) :
                jQuery.makeArray( selector )
        )));
    },
 
    is: function( selector ) {
        return !!selector && jQuery.multiFilter( selector, this ).length > 0;
    },
 
    hasClass: function( selector ) {
        return this.is( "." + selector );
    },
 
    val: function( value ) {
        if ( value == undefined ) {
 
            if ( this.length ) {
                var elem = this[0];
 
                // We need to handle select boxes special
                if ( jQuery.nodeName( elem, "select" ) ) {
                    var index = elem.selectedIndex,
                        values = [],
                        options = elem.options,
                        one = elem.type == "select-one";
 
                    // Nothing was selected
                    if ( index < 0 )
                        return null;
 
                    // Loop through all the selected options
                    for ( var i = one ? index : 0, max = one ? index + 1 : options.length; i < max; i++ ) {
                        var option = options[ i ];
 
                        if ( option.selected ) {
                            // Get the specifc value for the option
                            value = jQuery.browser.msie && !option.attributes.value.specified ? option.text : option.value;
 
                            // We don't need an array for one selects
                            if ( one )
                                return value;
 
                            // Multi-Selects return an array
                            values.push( value );
                        }
                    }
 
                    return values;
 
                // Everything else, we just grab the value
                } else
                    return (this[0].value || "").replace(/\r/g, "");
 
            }
 
            return undefined;
        }
 
        if( value.constructor == Number )
            value += '';
 
        return this.each(function(){
            if ( this.nodeType != 1 )
                return;
 
            if ( value.constructor == Array && /radio|checkbox/.test( this.type ) )
                this.checked = (jQuery.inArray(this.value, value) >= 0 ||
                    jQuery.inArray(this.name, value) >= 0);
 
            else if ( jQuery.nodeName( this, "select" ) ) {
                var values = jQuery.makeArray(value);
 
                jQuery( "option", this ).each(function(){
                    this.selected = (jQuery.inArray( this.value, values ) >= 0 ||
                        jQuery.inArray( this.text, values ) >= 0);
                });
 
                if ( !values.length )
                    this.selectedIndex = -1;
 
            } else
                this.value = value;
        });
    },
 
    html: function( value ) {
        return value == undefined ?
            (this[0] ?
                this[0].innerHTML :
                null) :
            this.empty().append( value );
    },
 
    replaceWith: function( value ) {
        return this.after( value ).remove();
    },
 
    eq: function( i ) {
        return this.slice( i, i + 1 );
    },
 
    slice: function() {
        return this.pushStack( Array.prototype.slice.apply( this, arguments ) );
    },
 
    map: function( callback ) {
        return this.pushStack( jQuery.map(this, function(elem, i){
            return callback.call( elem, i, elem );
        }));
    },
 
    andSelf: function() {
        return this.add( this.prevObject );
    },
 
    data: function( key, value ){
        var parts = key.split(".");
        parts[1] = parts[1] ? "." + parts[1] : "";
 
        if ( value === undefined ) {
            var data = this.triggerHandler("getData" + parts[1] + "!", [parts[0]]);
 
            if ( data === undefined && this.length )
                data = jQuery.data( this[0], key );
 
            return data === undefined && parts[1] ?
                this.data( parts[0] ) :
                data;
        } else
            return this.trigger("setData" + parts[1] + "!", [parts[0], value]).each(function(){
                jQuery.data( this, key, value );
            });
    },
 
    removeData: function( key ){
        return this.each(function(){
            jQuery.removeData( this, key );
        });
    },
 
    domManip: function( args, table, reverse, callback ) {
        var clone = this.length > 1, elems;
 
        return this.each(function(){
            if ( !elems ) {
                elems = jQuery.clean( args, this.ownerDocument );
 
                if ( reverse )
                    elems.reverse();
            }
 
            var obj = this;
 
            if ( table && jQuery.nodeName( this, "table" ) && jQuery.nodeName( elems[0], "tr" ) )
                obj = this.getElementsByTagName("tbody")[0] || this.appendChild( this.ownerDocument.createElement("tbody") );
 
            var scripts = jQuery( [] );
 
            jQuery.each(elems, function(){
                var elem = clone ?
                    jQuery( this ).clone( true )[0] :
                    this;
 
                // execute all scripts after the elements have been injected
                if ( jQuery.nodeName( elem, "script" ) )
                    scripts = scripts.add( elem );
                else {
                    // Remove any inner scripts for later evaluation
                    if ( elem.nodeType == 1 )
                        scripts = scripts.add( jQuery( "script", elem ).remove() );
 
                    // Inject the elements into the document
                    callback.call( obj, elem );
                }
            });
 
            scripts.each( evalScript );
        });
    }
};
 
// Give the init function the jQuery prototype for later instantiation
jQuery.fn.init.prototype = jQuery.fn;
 
function evalScript( i, elem ) {
    if ( elem.src )
        jQuery.ajax({
            url: elem.src,
            async: false,
            dataType: "script"
        });
 
    else
        jQuery.globalEval( elem.text || elem.textContent || elem.innerHTML || "" );
 
    if ( elem.parentNode )
        elem.parentNode.removeChild( elem );
}
 
function now(){
    return +new Date;
}
 
jQuery.extend = jQuery.fn.extend = function() {
    // copy reference to target object
    var target = arguments[0] || {}, i = 1, length = arguments.length, deep = false, options;
 
    // Handle a deep copy situation
    if ( target.constructor == Boolean ) {
        deep = target;
        target = arguments[1] || {};
        // skip the boolean and the target
        i = 2;
    }
 
    // Handle case when target is a string or something (possible in deep copy)
    if ( typeof target != "object" && typeof target != "function" )
        target = {};
 
    // extend jQuery itself if only one argument is passed
    if ( length == i ) {
        target = this;
        --i;
    }
 
    for ( ; i < length; i++ )
        // Only deal with non-null/undefined values
        if ( (options = arguments[ i ]) != null )
            // Extend the base object
            for ( var name in options ) {
                var src = target[ name ], copy = options[ name ];
 
                // Prevent never-ending loop
                if ( target === copy )
                    continue;
 
                // Recurse if we're merging object values
                if ( deep && copy && typeof copy == "object" && !copy.nodeType )
                    target[ name ] = jQuery.extend( deep, 
                        // Never move original objects, clone them
                        src || ( copy.length != null ? [ ] : { } )
                    , copy );
 
                // Don't bring in undefined values
                else if ( copy !== undefined )
                    target[ name ] = copy;
 
            }
 
    // Return the modified object
    return target;
};
 
var expando = "jQuery" + now(), uuid = 0, windowData = {},
    // exclude the following css properties to add px
    exclude = /z-?index|font-?weight|opacity|zoom|line-?height/i,
    // cache defaultView
    defaultView = document.defaultView || {};
 
jQuery.extend({
    noConflict: function( deep ) {
        window.$ = _$;
 
        if ( deep )
            window.jQuery = _jQuery;
 
        return jQuery;
    },
 
    // See test/unit/core.js for details concerning this function.
    isFunction: function( fn ) {
        return !!fn && typeof fn != "string" && !fn.nodeName &&
            fn.constructor != Array && /^[\s[]?function/.test( fn + "" );
    },
 
    // check if an element is in a (or is an) XML document
    isXMLDoc: function( elem ) {
        return elem.documentElement && !elem.body ||
            elem.tagName && elem.ownerDocument && !elem.ownerDocument.body;
    },
 
    // Evalulates a script in a global context
    globalEval: function( data ) {
        data = jQuery.trim( data );
 
        if ( data ) {
            // Inspired by code by Andrea Giammarchi
            // http://webreflection.blogspot.com/2007/08/global-scope-evaluation-and-dom.html
            var head = document.getElementsByTagName("head")[0] || document.documentElement,
                script = document.createElement("script");
 
            script.type = "text/javascript";
            if ( jQuery.browser.msie )
                script.text = data;
            else
                script.appendChild( document.createTextNode( data ) );
 
            // Use insertBefore instead of appendChild  to circumvent an IE6 bug.
            // This arises when a base node is used (#2709).
            head.insertBefore( script, head.firstChild );
            head.removeChild( script );
        }
    },
 
    nodeName: function( elem, name ) {
        return elem.nodeName && elem.nodeName.toUpperCase() == name.toUpperCase();
    },
 
    cache: {},
 
    data: function( elem, name, data ) {
        elem = elem == window ?
            windowData :
            elem;
 
        var id = elem[ expando ];
 
        // Compute a unique ID for the element
        if ( !id )
            id = elem[ expando ] = ++uuid;
 
        // Only generate the data cache if we're
        // trying to access or manipulate it
        if ( name && !jQuery.cache[ id ] )
            jQuery.cache[ id ] = {};
 
        // Prevent overriding the named cache with undefined values
        if ( data !== undefined )
            jQuery.cache[ id ][ name ] = data;
 
        // Return the named cache data, or the ID for the element
        return name ?
            jQuery.cache[ id ][ name ] :
            id;
    },
 
    removeData: function( elem, name ) {
        elem = elem == window ?
            windowData :
            elem;
 
        var id = elem[ expando ];
 
        // If we want to remove a specific section of the element's data
        if ( name ) {
            if ( jQuery.cache[ id ] ) {
                // Remove the section of cache data
                delete jQuery.cache[ id ][ name ];
 
                // If we've removed all the data, remove the element's cache
                name = "";
 
                for ( name in jQuery.cache[ id ] )
                    break;
 
                if ( !name )
                    jQuery.removeData( elem );
            }
 
        // Otherwise, we want to remove all of the element's data
        } else {
            // Clean up the element expando
            try {
                delete elem[ expando ];
            } catch(e){
                // IE has trouble directly removing the expando
                // but it's ok with using removeAttribute
                if ( elem.removeAttribute )
                    elem.removeAttribute( expando );
            }
 
            // Completely remove the data cache
            delete jQuery.cache[ id ];
        }
    },
 
    // args is for internal usage only
    each: function( object, callback, args ) {
        var name, i = 0, length = object.length;
 
        if ( args ) {
            if ( length == undefined ) {
                for ( name in object )
                    if ( callback.apply( object[ name ], args ) === false )
                        break;
            } else
                for ( ; i < length; )
                    if ( callback.apply( object[ i++ ], args ) === false )
                        break;
 
        // A special, fast, case for the most common use of each
        } else {
            if ( length == undefined ) {
                for ( name in object )
                    if ( callback.call( object[ name ], name, object[ name ] ) === false )
                        break;
            } else
                for ( var value = object[0];
                    i < length && callback.call( value, i, value ) !== false; value = object[++i] ){}
        }
 
        return object;
    },
 
    prop: function( elem, value, type, i, name ) {
        // Handle executable functions
        if ( jQuery.isFunction( value ) )
            value = value.call( elem, i );
 
        // Handle passing in a number to a CSS property
        return value && value.constructor == Number && type == "curCSS" && !exclude.test( name ) ?
            value + "px" :
            value;
    },
 
    className: {
        // internal only, use addClass("class")
        add: function( elem, classNames ) {
            jQuery.each((classNames || "").split(/\s+/), function(i, className){
                if ( elem.nodeType == 1 && !jQuery.className.has( elem.className, className ) )
                    elem.className += (elem.className ? " " : "") + className;
            });
        },
 
        // internal only, use removeClass("class")
        remove: function( elem, classNames ) {
            if (elem.nodeType == 1)
                elem.className = classNames != undefined ?
                    jQuery.grep(elem.className.split(/\s+/), function(className){
                        return !jQuery.className.has( classNames, className );
                    }).join(" ") :
                    "";
        },
 
        // internal only, use hasClass("class")
        has: function( elem, className ) {
            return jQuery.inArray( className, (elem.className || elem).toString().split(/\s+/) ) > -1;
        }
    },
 
    // A method for quickly swapping in/out CSS properties to get correct calculations
    swap: function( elem, options, callback ) {
        var old = {};
        // Remember the old values, and insert the new ones
        for ( var name in options ) {
            old[ name ] = elem.style[ name ];
            elem.style[ name ] = options[ name ];
        }
 
        callback.call( elem );
 
        // Revert the old values
        for ( var name in options )
            elem.style[ name ] = old[ name ];
    },
 
    css: function( elem, name, force ) {
        if ( name == "width" || name == "height" ) {
            var val, props = { position: "absolute", visibility: "hidden", display:"block" }, which = name == "width" ? [ "Left", "Right" ] : [ "Top", "Bottom" ];
 
            function getWH() {
                val = name == "width" ? elem.offsetWidth : elem.offsetHeight;
                var padding = 0, border = 0;
                jQuery.each( which, function() {
                    padding += parseFloat(jQuery.curCSS( elem, "padding" + this, true)) || 0;
                    border += parseFloat(jQuery.curCSS( elem, "border" + this + "Width", true)) || 0;
                });
                val -= Math.round(padding + border);
            }
 
            if ( jQuery(elem).is(":visible") )
                getWH();
            else
                jQuery.swap( elem, props, getWH );
 
            return Math.max(0, val);
        }
 
        return jQuery.curCSS( elem, name, force );
    },
 
    curCSS: function( elem, name, force ) {
        var ret, style = elem.style;
 
        // A helper method for determining if an element's values are broken
        function color( elem ) {
            if ( !jQuery.browser.safari )
                return false;
 
            // defaultView is cached
            var ret = defaultView.getComputedStyle( elem, null );
            return !ret || ret.getPropertyValue("color") == "";
        }
 
        // We need to handle opacity special in IE
        if ( name == "opacity" && jQuery.browser.msie ) {
            ret = jQuery.attr( style, "opacity" );
 
            return ret == "" ?
                "1" :
                ret;
        }
        // Opera sometimes will give the wrong display answer, this fixes it, see #2037
        if ( jQuery.browser.opera && name == "display" ) {
            var save = style.outline;
            style.outline = "0 solid black";
            style.outline = save;
        }
 
        // Make sure we're using the right name for getting the float value
        if ( name.match( /float/i ) )
            name = styleFloat;
 
        if ( !force && style && style[ name ] )
            ret = style[ name ];
 
        else if ( defaultView.getComputedStyle ) {
 
            // Only "float" is needed here
            if ( name.match( /float/i ) )
                name = "float";
 
            name = name.replace( /([A-Z])/g, "-$1" ).toLowerCase();
 
            var computedStyle = defaultView.getComputedStyle( elem, null );
 
            if ( computedStyle && !color( elem ) )
                ret = computedStyle.getPropertyValue( name );
 
            // If the element isn't reporting its values properly in Safari
            // then some display: none elements are involved
            else {
                var swap = [], stack = [], a = elem, i = 0;
 
                // Locate all of the parent display: none elements
                for ( ; a && color(a); a = a.parentNode )
                    stack.unshift(a);
 
                // Go through and make them visible, but in reverse
                // (It would be better if we knew the exact display type that they had)
                for ( ; i < stack.length; i++ )
                    if ( color( stack[ i ] ) ) {
                        swap[ i ] = stack[ i ].style.display;
                        stack[ i ].style.display = "block";
                    }
 
                // Since we flip the display style, we have to handle that
                // one special, otherwise get the value
                ret = name == "display" && swap[ stack.length - 1 ] != null ?
                    "none" :
                    ( computedStyle && computedStyle.getPropertyValue( name ) ) || "";
 
                // Finally, revert the display styles back
                for ( i = 0; i < swap.length; i++ )
                    if ( swap[ i ] != null )
                        stack[ i ].style.display = swap[ i ];
            }
 
            // We should always get a number back from opacity
            if ( name == "opacity" && ret == "" )
                ret = "1";
 
        } else if ( elem.currentStyle ) {
            var camelCase = name.replace(/\-(\w)/g, function(all, letter){
                return letter.toUpperCase();
            });
 
            ret = elem.currentStyle[ name ] || elem.currentStyle[ camelCase ];
 
            // From the awesome hack by Dean Edwards
            // http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291
 
            // If we're not dealing with a regular pixel number
            // but a number that has a weird ending, we need to convert it to pixels
            if ( !/^\d+(px)?$/i.test( ret ) && /^\d/.test( ret ) ) {
                // Remember the original values
                var left = style.left, rsLeft = elem.runtimeStyle.left;
 
                // Put in the new values to get a computed value out
                elem.runtimeStyle.left = elem.currentStyle.left;
                style.left = ret || 0;
                ret = style.pixelLeft + "px";
 
                // Revert the changed values
                style.left = left;
                elem.runtimeStyle.left = rsLeft;
            }
        }
 
        return ret;
    },
 
    clean: function( elems, context ) {
        var ret = [];
        context = context || document;
        // !context.createElement fails in IE with an error but returns typeof 'object'
        if (typeof context.createElement == 'undefined')
            context = context.ownerDocument || context[0] && context[0].ownerDocument || document;
 
        jQuery.each(elems, function(i, elem){
            if ( !elem )
                return;
 
            if ( elem.constructor == Number )
                elem += '';
 
            // Convert html string into DOM nodes
            if ( typeof elem == "string" ) {
                // Fix "XHTML"-style tags in all browsers
                elem = elem.replace(/(<(\w+)[^>]*?)\/>/g, function(all, front, tag){
                    return tag.match(/^(abbr|br|col|img|input|link|meta|param|hr|area|embed)$/i) ?
                        all :
                        front + "></" + tag + ">";
                });
 
                // Trim whitespace, otherwise indexOf won't work as expected
                var tags = jQuery.trim( elem ).toLowerCase(), div = context.createElement("div");
 
                var wrap =
                    // option or optgroup
                    !tags.indexOf("<opt") &&
                    [ 1, "<select multiple='multiple'>", "</select>" ] ||
 
                    !tags.indexOf("<leg") &&
                    [ 1, "<fieldset>", "</fieldset>" ] ||
 
                    tags.match(/^<(thead|tbody|tfoot|colg|cap)/) &&
                    [ 1, "<table>", "</table>" ] ||
 
                    !tags.indexOf("<tr") &&
                    [ 2, "<table><tbody>", "</tbody></table>" ] ||
 
                     // <thead> matched above
                    (!tags.indexOf("<td") || !tags.indexOf("<th")) &&
                    [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ] ||
 
                    !tags.indexOf("<col") &&
                    [ 2, "<table><tbody></tbody><colgroup>", "</colgroup></table>" ] ||
 
                    // IE can't serialize <link> and <script> tags normally
                    jQuery.browser.msie &&
                    [ 1, "div<div>", "</div>" ] ||
 
                    [ 0, "", "" ];
 
                // Go to html and back, then peel off extra wrappers
                div.innerHTML = wrap[1] + elem + wrap[2];
 
                // Move to the right depth
                while ( wrap[0]-- )
                    div = div.lastChild;
 
                // Remove IE's autoinserted <tbody> from table fragments
                if ( jQuery.browser.msie ) {
 
                    // String was a <table>, *may* have spurious <tbody>
                    var tbody = !tags.indexOf("<table") && tags.indexOf("<tbody") < 0 ?
                        div.firstChild && div.firstChild.childNodes :
 
                        // String was a bare <thead> or <tfoot>
                        wrap[1] == "<table>" && tags.indexOf("<tbody") < 0 ?
                            div.childNodes :
                            [];
 
                    for ( var j = tbody.length - 1; j >= 0 ; --j )
                        if ( jQuery.nodeName( tbody[ j ], "tbody" ) && !tbody[ j ].childNodes.length )
                            tbody[ j ].parentNode.removeChild( tbody[ j ] );
 
                    // IE completely kills leading whitespace when innerHTML is used
                    if ( /^\s/.test( elem ) )
                        div.insertBefore( context.createTextNode( elem.match(/^\s*/)[0] ), div.firstChild );
 
                }
 
                elem = jQuery.makeArray( div.childNodes );
            }
 
            if ( elem.length === 0 && (!jQuery.nodeName( elem, "form" ) && !jQuery.nodeName( elem, "select" )) )
                return;
 
            if ( elem[0] == undefined || jQuery.nodeName( elem, "form" ) || elem.options )
                ret.push( elem );
 
            else
                ret = jQuery.merge( ret, elem );
 
        });
 
        return ret;
    },
 
    attr: function( elem, name, value ) {
        // don't set attributes on text and comment nodes
        if (!elem || elem.nodeType == 3 || elem.nodeType == 8)
            return undefined;
 
        var notxml = !jQuery.isXMLDoc( elem ),
            // Whether we are setting (or getting)
            set = value !== undefined,
            msie = jQuery.browser.msie;
 
        // Try to normalize/fix the name
        name = notxml && jQuery.props[ name ] || name;
 
        // Only do all the following if this is a node (faster for style)
        // IE elem.getAttribute passes even for style
        if ( elem.tagName ) {
 
            // These attributes require special treatment
            var special = /href|src|style/.test( name );
 
            // Safari mis-reports the default selected property of a hidden option
            // Accessing the parent's selectedIndex property fixes it
            if ( name == "selected" && jQuery.browser.safari )
                elem.parentNode.selectedIndex;
 
            // If applicable, access the attribute via the DOM 0 way
            if ( name in elem && notxml && !special ) {
                if ( set ){
                    // We can't allow the type property to be changed (since it causes problems in IE)
                    if ( name == "type" && jQuery.nodeName( elem, "input" ) && elem.parentNode )
                        throw "type property can't be changed";
 
                    elem[ name ] = value;
                }
 
                // browsers index elements by id/name on forms, give priority to attributes.
                if( jQuery.nodeName( elem, "form" ) && elem.getAttributeNode(name) )
                    return elem.getAttributeNode( name ).nodeValue;
 
                return elem[ name ];
            }
 
            if ( msie && notxml &&  name == "style" )
                return jQuery.attr( elem.style, "cssText", value );
 
            if ( set )
                // convert the value to a string (all browsers do this but IE) see #1070
                elem.setAttribute( name, "" + value );
 
            var attr = msie && notxml && special
                    // Some attributes require a special call on IE
                    ? elem.getAttribute( name, 2 )
                    : elem.getAttribute( name );
 
            // Non-existent attributes return null, we normalize to undefined
            return attr === null ? undefined : attr;
        }
 
        // elem is actually elem.style ... set the style
 
        // IE uses filters for opacity
        if ( msie && name == "opacity" ) {
            if ( set ) {
                // IE has trouble with opacity if it does not have layout
                // Force it by setting the zoom level
                elem.zoom = 1;
 
                // Set the alpha filter to set the opacity
                elem.filter = (elem.filter || "").replace( /alpha\([^)]*\)/, "" ) +
                    (parseInt( value ) + '' == "NaN" ? "" : "alpha(opacity=" + value * 100 + ")");
            }
 
            return elem.filter && elem.filter.indexOf("opacity=") >= 0 ?
                (parseFloat( elem.filter.match(/opacity=([^)]*)/)[1] ) / 100) + '':
                "";
        }
 
        name = name.replace(/-([a-z])/ig, function(all, letter){
            return letter.toUpperCase();
        });
 
        if ( set )
            elem[ name ] = value;
 
        return elem[ name ];
    },
 
    trim: function( text ) {
        return (text || "").replace( /^\s+|\s+$/g, "" );
    },
 
    makeArray: function( array ) {
        var ret = [];
 
        if( array != null ){
            var i = array.length;
            //the window, strings and functions also have 'length'
            if( i == null || array.split || array.setInterval || array.call )
                ret[0] = array;
            else
                while( i )
                    ret[--i] = array[i];
        }
 
        return ret;
    },
 
    inArray: function( elem, array ) {
        for ( var i = 0, length = array.length; i < length; i++ )
        // Use === because on IE, window == document
            if ( array[ i ] === elem )
                return i;
 
        return -1;
    },
 
    merge: function( first, second ) {
        // We have to loop this way because IE & Opera overwrite the length
        // expando of getElementsByTagName
        var i = 0, elem, pos = first.length;
        // Also, we need to make sure that the correct elements are being returned
        // (IE returns comment nodes in a '*' query)
        if ( jQuery.browser.msie ) {
            while ( elem = second[ i++ ] )
                if ( elem.nodeType != 8 )
                    first[ pos++ ] = elem;
 
        } else
            while ( elem = second[ i++ ] )
                first[ pos++ ] = elem;
 
        return first;
    },
 
    unique: function( array ) {
        var ret = [], done = {};
 
        try {
 
            for ( var i = 0, length = array.length; i < length; i++ ) {
                var id = jQuery.data( array[ i ] );
 
                if ( !done[ id ] ) {
                    done[ id ] = true;
                    ret.push( array[ i ] );
                }
            }
 
        } catch( e ) {
            ret = array;
        }
 
        return ret;
    },
 
    grep: function( elems, callback, inv ) {
        var ret = [];
 
        // Go through the array, only saving the items
        // that pass the validator function
        for ( var i = 0, length = elems.length; i < length; i++ )
            if ( !inv != !callback( elems[ i ], i ) )
                ret.push( elems[ i ] );
 
        return ret;
    },
 
    map: function( elems, callback ) {
        var ret = [];
 
        // Go through the array, translating each of the items to their
        // new value (or values).
        for ( var i = 0, length = elems.length; i < length; i++ ) {
            var value = callback( elems[ i ], i );
 
            if ( value != null )
                ret[ ret.length ] = value;
        }
 
        return ret.concat.apply( [], ret );
    }
});
 
var userAgent = navigator.userAgent.toLowerCase();
 
// Figure out what browser is being used
jQuery.browser = {
    version: (userAgent.match( /.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/ ) || [])[1],
    safari: /webkit/.test( userAgent ),
    opera: /opera/.test( userAgent ),
    msie: /msie/.test( userAgent ) && !/opera/.test( userAgent ),
    mozilla: /mozilla/.test( userAgent ) && !/(compatible|webkit)/.test( userAgent )
};
 
var styleFloat = jQuery.browser.msie ?
    "styleFloat" :
    "cssFloat";
 
jQuery.extend({
    // Check to see if the W3C box model is being used
    boxModel: !jQuery.browser.msie || document.compatMode == "CSS1Compat",
 
    props: {
        "for": "htmlFor",
        "class": "className",
        "float": styleFloat,
        cssFloat: styleFloat,
        styleFloat: styleFloat,
        readonly: "readOnly",
        maxlength: "maxLength",
        cellspacing: "cellSpacing"
    }
});
 
jQuery.each({
    parent: function(elem){return elem.parentNode;},
    parents: function(elem){return jQuery.dir(elem,"parentNode");},
    next: function(elem){return jQuery.nth(elem,2,"nextSibling");},
    prev: function(elem){return jQuery.nth(elem,2,"previousSibling");},
    nextAll: function(elem){return jQuery.dir(elem,"nextSibling");},
    prevAll: function(elem){return jQuery.dir(elem,"previousSibling");},
    siblings: function(elem){return jQuery.sibling(elem.parentNode.firstChild,elem);},
    children: function(elem){return jQuery.sibling(elem.firstChild);},
    contents: function(elem){return jQuery.nodeName(elem,"iframe")?elem.contentDocument||elem.contentWindow.document:jQuery.makeArray(elem.childNodes);}
}, function(name, fn){
    jQuery.fn[ name ] = function( selector ) {
        var ret = jQuery.map( this, fn );
 
        if ( selector && typeof selector == "string" )
            ret = jQuery.multiFilter( selector, ret );
 
        return this.pushStack( jQuery.unique( ret ) );
    };
});
 
jQuery.each({
    appendTo: "append",
    prependTo: "prepend",
    insertBefore: "before",
    insertAfter: "after",
    replaceAll: "replaceWith"
}, function(name, original){
    jQuery.fn[ name ] = function() {
        var args = arguments;
 
        return this.each(function(){
            for ( var i = 0, length = args.length; i < length; i++ )
                jQuery( args[ i ] )[ original ]( this );
        });
    };
});
 
jQuery.each({
    removeAttr: function( name ) {
        jQuery.attr( this, name, "" );
        if (this.nodeType == 1)
            this.removeAttribute( name );
    },
 
    addClass: function( classNames ) {
        jQuery.className.add( this, classNames );
    },
 
    removeClass: function( classNames ) {
        jQuery.className.remove( this, classNames );
    },
 
    toggleClass: function( classNames ) {
        jQuery.className[ jQuery.className.has( this, classNames ) ? "remove" : "add" ]( this, classNames );
    },
 
    remove: function( selector ) {
        if ( !selector || jQuery.filter( selector, [ this ] ).r.length ) {
            // Prevent memory leaks
            jQuery( "*", this ).add(this).each(function(){
                jQuery.event.remove(this);
                jQuery.removeData(this);
            });
            if (this.parentNode)
                this.parentNode.removeChild( this );
        }
    },
 
    empty: function() {
        // Remove element nodes and prevent memory leaks
        jQuery( ">*", this ).remove();
 
        // Remove any remaining nodes
        while ( this.firstChild )
            this.removeChild( this.firstChild );
    }
}, function(name, fn){
    jQuery.fn[ name ] = function(){
        return this.each( fn, arguments );
    };
});
 
jQuery.each([ "Height", "Width" ], function(i, name){
    var type = name.toLowerCase();
 
    jQuery.fn[ type ] = function( size ) {
        // Get window width or height
        return this[0] == window ?
            // Opera reports document.body.client[Width/Height] properly in both quirks and standards
            jQuery.browser.opera && document.body[ "client" + name ] ||
 
            // Safari reports inner[Width/Height] just fine (Mozilla and Opera include scroll bar widths)
            jQuery.browser.safari && window[ "inner" + name ] ||
 
            // Everyone else use document.documentElement or document.body depending on Quirks vs Standards mode
            document.compatMode == "CSS1Compat" && document.documentElement[ "client" + name ] || document.body[ "client" + name ] :
 
            // Get document width or height
            this[0] == document ?
                // Either scroll[Width/Height] or offset[Width/Height], whichever is greater
                Math.max(
                    Math.max(document.body["scroll" + name], document.documentElement["scroll" + name]),
                    Math.max(document.body["offset" + name], document.documentElement["offset" + name])
                ) :
 
                // Get or set width or height on the element
                size == undefined ?
                    // Get width or height on the element
                    (this.length ? jQuery.css( this[0], type ) : null) :
 
                    // Set the width or height on the element (default to pixels if value is unitless)
                    this.css( type, size.constructor == String ? size : size + "px" );
    };
});
 
// Helper function used by the dimensions and offset modules
function num(elem, prop) {
    return elem[0] && parseInt( jQuery.curCSS(elem[0], prop, true), 10 ) || 0;
}var chars = jQuery.browser.safari && parseInt(jQuery.browser.version) < 417 ?
        "(?:[\\w*_-]|\\\\.)" :
        "(?:[\\w\u0128-\uFFFF*_-]|\\\\.)",
    quickChild = new RegExp("^>\\s*(" + chars + "+)"),
    quickID = new RegExp("^(" + chars + "+)(#)(" + chars + "+)"),
    quickClass = new RegExp("^([#.]?)(" + chars + "*)");
Saril est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/02/2011, 11h35   #14
Invité de passage
 
Inscription : février 2011
Messages : 9
Détails du profil
Informations forums :
Inscription : février 2011
Messages : 9
Points : 0
Points : 0
voici la 2ème

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
jQuery.extend({
    expr: {
        "": function(a,i,m){return m[2]=="*"||jQuery.nodeName(a,m[2]);},
        "#": function(a,i,m){return a.getAttribute("id")==m[2];},
        ":": {
            // Position Checks
            lt: function(a,i,m){return i<m[3]-0;},
            gt: function(a,i,m){return i>m[3]-0;},
            nth: function(a,i,m){return m[3]-0==i;},
            eq: function(a,i,m){return m[3]-0==i;},
            first: function(a,i){return i==0;},
            last: function(a,i,m,r){return i==r.length-1;},
            even: function(a,i){return i%2==0;},
            odd: function(a,i){return i%2;},
 
            // Child Checks
            "first-child": function(a){return a.parentNode.getElementsByTagName("*")[0]==a;},
            "last-child": function(a){return jQuery.nth(a.parentNode.lastChild,1,"previousSibling")==a;},
            "only-child": function(a){return !jQuery.nth(a.parentNode.lastChild,2,"previousSibling");},
 
            // Parent Checks
            parent: function(a){return a.firstChild;},
            empty: function(a){return !a.firstChild;},
 
            // Text Check
            contains: function(a,i,m){return (a.textContent||a.innerText||jQuery(a).text()||"").indexOf(m[3])>=0;},
 
            // Visibility
            visible: function(a){return "hidden"!=a.type&&jQuery.css(a,"display")!="none"&&jQuery.css(a,"visibility")!="hidden";},
            hidden: function(a){return "hidden"==a.type||jQuery.css(a,"display")=="none"||jQuery.css(a,"visibility")=="hidden";},
 
            // Form attributes
            enabled: function(a){return !a.disabled;},
            disabled: function(a){return a.disabled;},
            checked: function(a){return a.checked;},
            selected: function(a){return a.selected||jQuery.attr(a,"selected");},
 
            // Form elements
            text: function(a){return "text"==a.type;},
            radio: function(a){return "radio"==a.type;},
            checkbox: function(a){return "checkbox"==a.type;},
            file: function(a){return "file"==a.type;},
            password: function(a){return "password"==a.type;},
            submit: function(a){return "submit"==a.type;},
            image: function(a){return "image"==a.type;},
            reset: function(a){return "reset"==a.type;},
            button: function(a){return "button"==a.type||jQuery.nodeName(a,"button");},
            input: function(a){return /input|select|textarea|button/i.test(a.nodeName);},
 
            // :has()
            has: function(a,i,m){return jQuery.find(m[3],a).length;},
 
            // :header
            header: function(a){return /h\d/i.test(a.nodeName);},
 
            // :animated
            animated: function(a){return jQuery.grep(jQuery.timers,function(fn){return a==fn.elem;}).length;}
        }
    },
 
    // The regular expressions that power the parsing engine
    parse: [
        // Match: [@value='test'], [@foo]
        /^(\[) *@?([\w-]+) *([!*$^~=]*) *('?"?)(.*?)\4 *\]/,
 
        // Match: :contains('foo')
        /^(:)([\w-]+)\("?'?(.*?(\(.*?\))?[^(]*?)"?'?\)/,
 
        // Match: :even, :last-child, #id, .class
        new RegExp("^([:.#]*)(" + chars + "+)")
    ],
 
    multiFilter: function( expr, elems, not ) {
        var old, cur = [];
 
        while ( expr && expr != old ) {
            old = expr;
            var f = jQuery.filter( expr, elems, not );
            expr = f.t.replace(/^\s*,\s*/, "" );
            cur = not ? elems = f.r : jQuery.merge( cur, f.r );
        }
 
        return cur;
    },
 
    find: function( t, context ) {
        // Quickly handle non-string expressions
        if ( typeof t != "string" )
            return [ t ];
 
        // check to make sure context is a DOM element or a document
        if ( context && context.nodeType != 1 && context.nodeType != 9)
            return [ ];
 
        // Set the correct context (if none is provided)
        context = context || document;
 
        // Initialize the search
        var ret = [context], done = [], last, nodeName;
 
        // Continue while a selector expression exists, and while
        // we're no longer looping upon ourselves
        while ( t && last != t ) {
            var r = [];
            last = t;
 
            t = jQuery.trim(t);
 
            var foundToken = false,
 
            // An attempt at speeding up child selectors that
            // point to a specific element tag
                re = quickChild,
 
                m = re.exec(t);
 
            if ( m ) {
                nodeName = m[1].toUpperCase();
 
                // Perform our own iteration and filter
                for ( var i = 0; ret[i]; i++ )
                    for ( var c = ret[i].firstChild; c; c = c.nextSibling )
                        if ( c.nodeType == 1 && (nodeName == "*" || c.nodeName.toUpperCase() == nodeName) )
                            r.push( c );
 
                ret = r;
                t = t.replace( re, "" );
                if ( t.indexOf(" ") == 0 ) continue;
                foundToken = true;
            } else {
                re = /^([>+~])\s*(\w*)/i;
 
                if ( (m = re.exec(t)) != null ) {
                    r = [];
 
                    var merge = {};
                    nodeName = m[2].toUpperCase();
                    m = m[1];
 
                    for ( var j = 0, rl = ret.length; j < rl; j++ ) {
                        var n = m == "~" || m == "+" ? ret[j].nextSibling : ret[j].firstChild;
                        for ( ; n; n = n.nextSibling )
                            if ( n.nodeType == 1 ) {
                                var id = jQuery.data(n);
 
                                if ( m == "~" && merge[id] ) break;
 
                                if (!nodeName || n.nodeName.toUpperCase() == nodeName ) {
                                    if ( m == "~" ) merge[id] = true;
                                    r.push( n );
                                }
 
                                if ( m == "+" ) break;
                            }
                    }
 
                    ret = r;
 
                    // And remove the token
                    t = jQuery.trim( t.replace( re, "" ) );
                    foundToken = true;
                }
            }
 
            // See if there's still an expression, and that we haven't already
            // matched a token
            if ( t && !foundToken ) {
                // Handle multiple expressions
                if ( !t.indexOf(",") ) {
                    // Clean the result set
                    if ( context == ret[0] ) ret.shift();
 
                    // Merge the result sets
                    done = jQuery.merge( done, ret );
 
                    // Reset the context
                    r = ret = [context];
 
                    // Touch up the selector string
                    t = " " + t.substr(1,t.length);
 
                } else {
                    // Optimize for the case nodeName#idName
                    var re2 = quickID;
                    var m = re2.exec(t);
 
                    // Re-organize the results, so that they're consistent
                    if ( m ) {
                        m = [ 0, m[2], m[3], m[1] ];
 
                    } else {
                        // Otherwise, do a traditional filter check for
                        // ID, class, and element selectors
                        re2 = quickClass;
                        m = re2.exec(t);
                    }
 
                    m[2] = m[2].replace(/\\/g, "");
 
                    var elem = ret[ret.length-1];
 
                    // Try to do a global search by ID, where we can
                    if ( m[1] == "#" && elem && elem.getElementById && !jQuery.isXMLDoc(elem) ) {
                        // Optimization for HTML document case
                        var oid = elem.getElementById(m[2]);
 
                        // Do a quick check for the existence of the actual ID attribute
                        // to avoid selecting by the name attribute in IE
                        // also check to insure id is a string to avoid selecting an element with the name of 'id' inside a form
                        if ( (jQuery.browser.msie||jQuery.browser.opera) && oid && typeof oid.id == "string" && oid.id != m[2] )
                            oid = jQuery('[@id="'+m[2]+'"]', elem)[0];
 
                        // Do a quick check for node name (where applicable) so
                        // that div#foo searches will be really fast
                        ret = r = oid && (!m[3] || jQuery.nodeName(oid, m[3])) ? [oid] : [];
                    } else {
                        // We need to find all descendant elements
                        for ( var i = 0; ret[i]; i++ ) {
                            // Grab the tag name being searched for
                            var tag = m[1] == "#" && m[3] ? m[3] : m[1] != "" || m[0] == "" ? "*" : m[2];
 
                            // Handle IE7 being really dumb about <object>s
                            if ( tag == "*" && ret[i].nodeName.toLowerCase() == "object" )
                                tag = "param";
 
                            r = jQuery.merge( r, ret[i].getElementsByTagName( tag ));
                        }
 
                        // It's faster to filter by class and be done with it
                        if ( m[1] == "." )
                            r = jQuery.classFilter( r, m[2] );
 
                        // Same with ID filtering
                        if ( m[1] == "#" ) {
                            var tmp = [];
 
                            // Try to find the element with the ID
                            for ( var i = 0; r[i]; i++ )
                                if ( r[i].getAttribute("id") == m[2] ) {
                                    tmp = [ r[i] ];
                                    break;
                                }
 
                            r = tmp;
                        }
 
                        ret = r;
                    }
 
                    t = t.replace( re2, "" );
                }
 
            }
 
            // If a selector string still exists
            if ( t ) {
                // Attempt to filter it
                var val = jQuery.filter(t,r);
                ret = r = val.r;
                t = jQuery.trim(val.t);
            }
        }
 
        // An error occurred with the selector;
        // just return an empty set instead
        if ( t )
            ret = [];
 
        // Remove the root context
        if ( ret && context == ret[0] )
            ret.shift();
 
        // And combine the results
        done = jQuery.merge( done, ret );
 
        return done;
    },
 
    classFilter: function(r,m,not){
        m = " " + m + " ";
        var tmp = [];
        for ( var i = 0; r[i]; i++ ) {
            var pass = (" " + r[i].className + " ").indexOf( m ) >= 0;
            if ( !not && pass || not && !pass )
                tmp.push( r[i] );
        }
        return tmp;
    },
 
 
 
filter: function(t,r,not) {
        var last;
 
        // Look for common filter expressions
        while ( t && t != last ) {
            last = t;
 
            var p = jQuery.parse, m;
 
            for ( var i = 0; p[i]; i++ ) {
                m = p[i].exec( t );
 
                if ( m ) {
                    // Remove what we just matched
                    t = t.substring( m[0].length );
 
                    m[2] = m[2].replace(/\\/g, "");
                    break;
                }
            }
 
            if ( !m )
                break;
 
            // :not() is a special case that can be optimized by
            // keeping it out of the expression list
            if ( m[1] == ":" && m[2] == "not" )
                // optimize if only one selector found (most common case)
                r = isSimple.test( m[3] ) ?
                    jQuery.filter(m[3], r, true).r :
                    jQuery( r ).not( m[3] );
 
            // We can get a big speed boost by filtering by class here
            else if ( m[1] == "." )
                r = jQuery.classFilter(r, m[2], not);
 
            else if ( m[1] == "[" ) {
                var tmp = [], type = m[3];
 
                for ( var i = 0, rl = r.length; i < rl; i++ ) {
                    var a = r[i], z = a[ jQuery.props[m[2]] || m[2] ];
 
                    if ( z == null || /href|src|selected/.test(m[2]) )
                        z = jQuery.attr(a,m[2]) || '';
 
                    if ( (type == "" && !!z ||
                         type == "=" && z == m[5] ||
                         type == "!=" && z != m[5] ||
                         type == "^=" && z && !z.indexOf(m[5]) ||
                         type == "$=" && z.substr(z.length - m[5].length) == m[5] ||
                         (type == "*=" || type == "~=") && z.indexOf(m[5]) >= 0) ^ not )
                            tmp.push( a );
                }
 
                r = tmp;
 
            // We can get a speed boost by handling nth-child here
            } else if ( m[1] == ":" && m[2] == "nth-child" ) {
                var merge = {}, tmp = [],
                    // parse equations like 'even', 'odd', '5', '2n', '3n+2', '4n-1', '-n+6'
                    test = /(-?)(\d*)n((?:\+|-)?\d*)/.exec(
                        m[3] == "even" && "2n" || m[3] == "odd" && "2n+1" ||
                        !/\D/.test(m[3]) && "0n+" + m[3] || m[3]),
                    // calculate the numbers (first)n+(last) including if they are negative
                    first = (test[1] + (test[2] || 1)) - 0, last = test[3] - 0;
 
                // loop through all the elements left in the jQuery object
                for ( var i = 0, rl = r.length; i < rl; i++ ) {
                    var node = r[i], parentNode = node.parentNode, id = jQuery.data(parentNode);
 
                    if ( !merge[id] ) {
                        var c = 1;
 
                        for ( var n = parentNode.firstChild; n; n = n.nextSibling )
                            if ( n.nodeType == 1 )
                                n.nodeIndex = c++;
 
                        merge[id] = true;
                    }
 
                    var add = false;
 
                    if ( first == 0 ) {
                        if ( node.nodeIndex == last )
                            add = true;
                    } else if ( (node.nodeIndex - last) % first == 0 && (node.nodeIndex - last) / first >= 0 )
                        add = true;
 
                    if ( add ^ not )
                        tmp.push( node );
                }
 
                r = tmp;
 
            // Otherwise, find the expression to execute
            } else {
                var fn = jQuery.expr[ m[1] ];
                if ( typeof fn == "object" )
                    fn = fn[ m[2] ];
 
                if ( typeof fn == "string" )
                    fn = eval("false||function(a,i){return " + fn + ";}");
 
                // Execute it against the current filter
                r = jQuery.grep( r, function(elem, i){
                    return fn(elem, i, m, r);
                }, not );
            }
        }
 
        // Return an array of filtered elements (r)
        // and the modified expression string (t)
        return { r: r, t: t };
    },
 
    dir: function( elem, dir ){
        var matched = [],
            cur = elem[dir];
        while ( cur && cur != document ) {
            if ( cur.nodeType == 1 )
                matched.push( cur );
            cur = cur[dir];
        }
        return matched;
    },
 
    nth: function(cur,result,dir,elem){
        result = result || 1;
        var num = 0;
 
        for ( ; cur; cur = cur[dir] )
            if ( cur.nodeType == 1 && ++num == result )
                break;
 
        return cur;
    },
 
    sibling: function( n, elem ) {
        var r = [];
 
        for ( ; n; n = n.nextSibling ) {
            if ( n.nodeType == 1 && n != elem )
                r.push( n );
        }
 
        return r;
    }
});
/*
 * A number of helper functions used for managing events.
 * Many of the ideas behind this code orignated from
 * Dean Edwards' addEvent library.
 */
jQuery.event = {
 
    // Bind an event to an element
    // Original by Dean Edwards
    add: function(elem, types, handler, data) {
        if ( elem.nodeType == 3 || elem.nodeType == 8 )
            return;
 
        // For whatever reason, IE has trouble passing the window object
        // around, causing it to be cloned in the process
        if ( jQuery.browser.msie && elem.setInterval )
            elem = window;
 
        // Make sure that the function being executed has a unique ID
        if ( !handler.guid )
            handler.guid = this.guid++;
 
        // if data is passed, bind to handler
        if( data != undefined ) {
            // Create temporary function pointer to original handler
            var fn = handler;
 
            // Create unique handler function, wrapped around original handler
            handler = this.proxy( fn, function() {
                // Pass arguments and context to original handler
                return fn.apply(this, arguments);
            });
 
            // Store data in unique handler
            handler.data = data;
        }
 
        // Init the element's event structure
        var events = jQuery.data(elem, "events") || jQuery.data(elem, "events", {}),
            handle = jQuery.data(elem, "handle") || jQuery.data(elem, "handle", function(){
                // Handle the second event of a trigger and when
                // an event is called after a page has unloaded
                if ( typeof jQuery != "undefined" && !jQuery.event.triggered )
                    return jQuery.event.handle.apply(arguments.callee.elem, arguments);
            });
        // Add elem as a property of the handle function
        // This is to prevent a memory leak with non-native
        // event in IE.
        handle.elem = elem;
 
        // Handle multiple events separated by a space
        // jQuery(...).bind("mouseover mouseout", fn);
        jQuery.each(types.split(/\s+/), function(index, type) {
            // Namespaced event handlers
            var parts = type.split(".");
            type = parts[0];
            handler.type = parts[1];
 
            // Get the current list of functions bound to this event
            var handlers = events[type];
 
            // Init the event handler queue
            if (!handlers) {
                handlers = events[type] = {};
 
                // Check for a special event handler
                // Only use addEventListener/attachEvent if the special
                // events handler returns false
                if ( !jQuery.event.special[type] || jQuery.event.special[type].setup.call(elem) === false ) {
                    // Bind the global event handler to the element
                    if (elem.addEventListener)
                        elem.addEventListener(type, handle, false);
                    else if (elem.attachEvent)
                        elem.attachEvent("on" + type, handle);
                }
            }
 
            // Add the function to the element's handler list
            handlers[handler.guid] = handler;
 
            // Keep track of which events have been used, for global triggering
            jQuery.event.global[type] = true;
        });
 
        // Nullify elem to prevent memory leaks in IE
        elem = null;
    },
 
    guid: 1,
    global: {},
 
    // Detach an event or set of events from an element
    remove: function(elem, types, handler) {
        // don't do events on text and comment nodes
        if ( elem.nodeType == 3 || elem.nodeType == 8 )
            return;
 
        var events = jQuery.data(elem, "events"), ret, index;
 
        if ( events ) {
            // Unbind all events for the element
            if ( types == undefined || (typeof types == "string" && types.charAt(0) == ".") )
                for ( var type in events )
                    this.remove( elem, type + (types || "") );
            else {
                // types is actually an event object here
                if ( types.type ) {
                    handler = types.handler;
                    types = types.type;
                }
 
                // Handle multiple events seperated by a space
                // jQuery(...).unbind("mouseover mouseout", fn);
                jQuery.each(types.split(/\s+/), function(index, type){
                    // Namespaced event handlers
                    var parts = type.split(".");
                    type = parts[0];
 
                    if ( events[type] ) {
                        // remove the given handler for the given type
                        if ( handler )
                            delete events[type][handler.guid];
 
                        // remove all handlers for the given type
                        else
                            for ( handler in events[type] )
                                // Handle the removal of namespaced events
                                if ( !parts[1] || events[type][handler].type == parts[1] )
                                    delete events[type][handler];
 
                        // remove generic event handler if no more handlers exist
                        for ( ret in events[type] ) break;
                        if ( !ret ) {
                            if ( !jQuery.event.special[type] || jQuery.event.special[type].teardown.call(elem) === false ) {
                                if (elem.removeEventListener)
                                    elem.removeEventListener(type, jQuery.data(elem, "handle"), false);
                                else if (elem.detachEvent)
                                    elem.detachEvent("on" + type, jQuery.data(elem, "handle"));
                            }
                            ret = null;
                            delete events[type];
                        }
                    }
                });
            }
 
            // Remove the expando if it's no longer used
            for ( ret in events ) break;
            if ( !ret ) {
                var handle = jQuery.data( elem, "handle" );
                if ( handle ) handle.elem = null;
                jQuery.removeData( elem, "events" );
                jQuery.removeData( elem, "handle" );
            }
        }
    },
 
    trigger: function(type, data, elem, donative, extra) {
        // Clone the incoming data, if any
        data = jQuery.makeArray(data);
 
        if ( type.indexOf("!") >= 0 ) {
            type = type.slice(0, -1);
            var exclusive = true;
        }
 
        // Handle a global trigger
        if ( !elem ) {
            // Only trigger if we've ever bound an event for it
            if ( this.global[type] )
                jQuery("*").add([window, document]).trigger(type, data);
 
        // Handle triggering a single element
        } else {
            // don't do events on text and comment nodes
            if ( elem.nodeType == 3 || elem.nodeType == 8 )
                return undefined;
 
            var val, ret, fn = jQuery.isFunction( elem[ type ] || null ),
                // Check to see if we need to provide a fake event, or not
                event = !data[0] || !data[0].preventDefault;
 
            // Pass along a fake event
            if ( event ) {
                data.unshift({
                    type: type,
                    target: elem,
                    preventDefault: function(){},
                    stopPropagation: function(){},
                    timeStamp: now()
                });
                data[0][expando] = true; // no need to fix fake event
            }
 
            // Enforce the right trigger type
            data[0].type = type;
            if ( exclusive )
                data[0].exclusive = true;
 
            // Trigger the event, it is assumed that "handle" is a function
            var handle = jQuery.data(elem, "handle");
            if ( handle )
                val = handle.apply( elem, data );
 
            // Handle triggering native .onfoo handlers (and on links since we don't call .click() for links)
            if ( (!fn || (jQuery.nodeName(elem, 'a') && type == "click")) && elem["on"+type] && elem["on"+type].apply( elem, data ) === false )
                val = false;
 
            // Extra functions don't get the custom event object
            if ( event )
                data.shift();
 
            // Handle triggering of extra function
            if ( extra && jQuery.isFunction( extra ) ) {
                // call the extra function and tack the current return value on the end for possible inspection
                ret = extra.apply( elem, val == null ? data : data.concat( val ) );
                // if anything is returned, give it precedence and have it overwrite the previous value
                if (ret !== undefined)
                    val = ret;
            }
 
            // Trigger the native events (except for clicks on links)
            if ( fn && donative !== false && val !== false && !(jQuery.nodeName(elem, 'a') && type == "click") ) {
                this.triggered = true;
                try {
                    elem[ type ]();
                // prevent IE from throwing an error for some hidden elements
                } catch (e) {}
            }
 
            this.triggered = false;
        }
 
        return val;
    },
 
    handle: function(event) {
        // returned undefined or false
        var val, ret, namespace, all, handlers;
 
        event = arguments[0] = jQuery.event.fix( event || window.event );
 
        // Namespaced event handlers
        namespace = event.type.split(".");
        event.type = namespace[0];
        namespace = namespace[1];
        // Cache this now, all = true means, any handler
        all = !namespace && !event.exclusive;
 
        handlers = ( jQuery.data(this, "events") || {} )[event.type];
 
        for ( var j in handlers ) {
            var handler = handlers[j];
 
            // Filter the functions by class
            if ( all || handler.type == namespace ) {
                // Pass in a reference to the handler function itself
                // So that we can later remove it
                event.handler = handler;
                event.data = handler.data;
 
                ret = handler.apply( this, arguments );
 
                if ( val !== false )
                    val = ret;
 
                if ( ret === false ) {
                    event.preventDefault();
                    event.stopPropagation();
                }
            }
        }
 
        return val;
    },
 
    fix: function(event) {
        if ( event[expando] == true )
            return event;
 
        // store a copy of the original event object
        // and "clone" to set read-only properties
        var originalEvent = event;
        event = { originalEvent: originalEvent };
        var 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 timeStamp toElement type view wheelDelta which".split(" ");
        for ( var i=props.length; i; i-- )
            event[ props[i] ] = originalEvent[ props[i] ];
 
        // Mark it as fixed
        event[expando] = true;
 
        // add preventDefault and stopPropagation since
        // they will not work on the clone
        event.preventDefault = function() {
            // if preventDefault exists run it on the original event
            if (originalEvent.preventDefault)
                originalEvent.preventDefault();
            // otherwise set the returnValue property of the original event to false (IE)
            originalEvent.returnValue = false;
        };
        event.stopPropagation = function() {
            // if stopPropagation exists run it on the original event
            if (originalEvent.stopPropagation)
                originalEvent.stopPropagation();
            // otherwise set the cancelBubble property of the original event to true (IE)
            originalEvent.cancelBubble = true;
        };
 
        // Fix timeStamp
        event.timeStamp = event.timeStamp || now();
 
        // Fix target property, if necessary
        if ( !event.target )
            event.target = event.srcElement || document; // Fixes #1925 where srcElement might not be defined either
 
        // check if target is a textnode (safari)
        if ( event.target.nodeType == 3 )
            event.target = event.target.parentNode;
 
        // Add relatedTarget, if necessary
        if ( !event.relatedTarget && event.fromElement )
            event.relatedTarget = event.fromElement == event.target ? event.toElement : event.fromElement;
 
        // Calculate pageX/Y if missing and clientX/Y available
        if ( event.pageX == null && event.clientX != null ) {
            var doc = document.documentElement, body = document.body;
            event.pageX = event.clientX + (doc && doc.scrollLeft || body && body.scrollLeft || 0) - (doc.clientLeft || 0);
            event.pageY = event.clientY + (doc && doc.scrollTop || body && body.scrollTop || 0) - (doc.clientTop || 0);
        }
 
        // Add which for key events
        if ( !event.which && ((event.charCode || event.charCode === 0) ? event.charCode : event.keyCode) )
            event.which = event.charCode || event.keyCode;
 
        // Add metaKey to non-Mac browsers (use ctrl for PC's and Meta for Macs)
        if ( !event.metaKey && event.ctrlKey )
            event.metaKey = event.ctrlKey;
 
        // Add which for click: 1 == left; 2 == middle; 3 == right
        // Note: button is not normalized, so don't use it
        if ( !event.which && event.button )
            event.which = (event.button & 1 ? 1 : ( event.button & 2 ? 3 : ( event.button & 4 ? 2 : 0 ) ));
 
        return event;
    },
 
    proxy: function( fn, proxy ){
        // Set the guid of unique handler to the same of original handler, so it can be removed
        proxy.guid = fn.guid = fn.guid || proxy.guid || this.guid++;
        // So proxy can be declared as an argument
        return proxy;
    },
 
    special: {
        ready: {
            setup: function() {
                // Make sure the ready event is setup
                bindReady();
                return;
            },
 
            teardown: function() { return; }
        },
 
        mouseenter: {
            setup: function() {
                if ( jQuery.browser.msie ) return false;
                jQuery(this).bind("mouseover", jQuery.event.special.mouseenter.handler);
                return true;
            },
 
            teardown: function() {
                if ( jQuery.browser.msie ) return false;
                jQuery(this).unbind("mouseover", jQuery.event.special.mouseenter.handler);
                return true;
            },
 
            handler: function(event) {
                // If we actually just moused on to a sub-element, ignore it
                if ( withinElement(event, this) ) return true;
                // Execute the right handlers by setting the event type to mouseenter
                event.type = "mouseenter";
                return jQuery.event.handle.apply(this, arguments);
            }
        },
 
        mouseleave: {
            setup: function() {
                if ( jQuery.browser.msie ) return false;
                jQuery(this).bind("mouseout", jQuery.event.special.mouseleave.handler);
                return true;
            },
 
            teardown: function() {
                if ( jQuery.browser.msie ) return false;
                jQuery(this).unbind("mouseout", jQuery.event.special.mouseleave.handler);
                return true;
            },
 
            handler: function(event) {
                // If we actually just moused on to a sub-element, ignore it
                if ( withinElement(event, this) ) return true;
                // Execute the right handlers by setting the event type to mouseleave
                event.type = "mouseleave";
                return jQuery.event.handle.apply(this, arguments);
            }
        }
    }
};
 
jQuery.fn.extend({
    bind: function( type, data, fn ) {
        return type == "unload" ? this.one(type, data, fn) : this.each(function(){
            jQuery.event.add( this, type, fn || data, fn && data );
        });
    },
 
    one: function( type, data, fn ) {
        var one = jQuery.event.proxy( fn || data, function(event) {
            jQuery(this).unbind(event, one);
            return (fn || data).apply( this, arguments );
        });
        return this.each(function(){
            jQuery.event.add( this, type, one, fn && data);
        });
    },
 
    unbind: function( type, fn ) {
        return this.each(function(){
            jQuery.event.remove( this, type, fn );
        });
    },
 
    trigger: function( type, data, fn ) {
        return this.each(function(){
            jQuery.event.trigger( type, data, this, true, fn );
        });
    },
 
    triggerHandler: function( type, data, fn ) {
        return this[0] && jQuery.event.trigger( type, data, this[0], false, fn );
    },
 
    toggle: function( fn ) {
        // Save reference to arguments for access in closure
        var args = arguments, i = 1;
 
        // link all the functions, so any of them can unbind this click handler
        while( i < args.length )
            jQuery.event.proxy( fn, args[i++] );
 
        return this.click( jQuery.event.proxy( fn, function(event) {
            // Figure out which function to execute
            this.lastToggle = ( this.lastToggle || 0 ) % i;
 
            // Make sure that clicks stop
            event.preventDefault();
 
            // and execute the function
            return args[ this.lastToggle++ ].apply( this, arguments ) || false;
        }));
    },
 
    hover: function(fnOver, fnOut) {
        return this.bind('mouseenter', fnOver).bind('mouseleave', fnOut);
    },
 
    ready: function(fn) {
        // Attach the listeners
        bindReady();
 
        // If the DOM is already ready
        if ( jQuery.isReady )
            // Execute the function immediately
            fn.call( document, jQuery );
 
        // Otherwise, remember the function for later
        else
            // Add the function to the wait list
            jQuery.readyList.push( function() { return fn.call(this, jQuery); } );
 
        return this;
    }
});
 
jQuery.extend({
    isReady: false,
    readyList: [],
    // Handle when the DOM is ready
    ready: function() {
        // Make sure that the DOM is not already loaded
        if ( !jQuery.isReady ) {
            // Remember that the DOM is ready
            jQuery.isReady = true;
 
            // If there are functions bound, to execute
            if ( jQuery.readyList ) {
                // Execute all of them
                jQuery.each( jQuery.readyList, function(){
                    this.call( document );
                });
 
                // Reset the list of functions
                jQuery.readyList = null;
            }
 
            // Trigger any bound ready events
            jQuery(document).triggerHandler("ready");
        }
    }
});
 
var readyBound = false;
 
function bindReady(){
    if ( readyBound ) return;
    readyBound = true;
 
    // Mozilla, Opera (see further below for it) and webkit nightlies currently support this event
    if ( document.addEventListener && !jQuery.browser.opera)
        // Use the handy event callback
        document.addEventListener( "DOMContentLoaded", jQuery.ready, false );
 
    // If IE is used and is not in a frame
    // Continually check to see if the document is ready
    if ( jQuery.browser.msie && window == top ) (function(){
        if (jQuery.isReady) return;
        try {
            // If IE is used, use the trick by Diego Perini
            // http://javascript.nwbox.com/IEContentLoaded/
            document.documentElement.doScroll("left");
        } catch( error ) {
            setTimeout( arguments.callee, 0 );
            return;
        }
        // and execute any waiting functions
        jQuery.ready();
    })();
 
    if ( jQuery.browser.opera )
        document.addEventListener( "DOMContentLoaded", function () {
            if (jQuery.isReady) return;
            for (var i = 0; i < document.styleSheets.length; i++)
                if (document.styleSheets[i].disabled) {
                    setTimeout( arguments.callee, 0 );
                    return;
                }
            // and execute any waiting functions
            jQuery.ready();
        }, false);
 
    if ( jQuery.browser.safari ) {
        var numStyles;
        (function(){
            if (jQuery.isReady) return;
            if ( document.readyState != "loaded" && document.readyState != "complete" ) {
                setTimeout( arguments.callee, 0 );
                return;
            }
            if ( numStyles === undefined )
                numStyles = jQuery("style, link[rel=stylesheet]").length;
            if ( document.styleSheets.length != numStyles ) {
                setTimeout( arguments.callee, 0 );
                return;
            }
            // and execute any waiting functions
            jQuery.ready();
        })();
    }
 
    // A fallback to window.onload, that will always work
    jQuery.event.add( window, "load", jQuery.ready );
}
 
jQuery.each( ("blur,focus,load,resize,scroll,unload,click,dblclick," +
    "mousedown,mouseup,mousemove,mouseover,mouseout,change,select," +
    "submit,keydown,keypress,keyup,error").split(","), function(i, name){
 
    // Handle event binding
    jQuery.fn[name] = function(fn){
        return fn ? this.bind(name, fn) : this.trigger(name);
    };
});
 
// Checks if an event happened on an element within another element
// Used in jQuery.event.special.mouseenter and mouseleave handlers
var withinElement = function(event, elem) {
    // Check if mouse(over|out) are still within the same parent element
    var parent = event.relatedTarget;
    // Traverse up the tree
    while ( parent && parent != elem ) try { parent = parent.parentNode; } catch(error) { parent = elem; }
    // Return true if we actually just moused on to a sub-element
    return parent == elem;
};
 
// Prevent memory leaks in IE
// And prevent errors on refresh with events like mouseover in other browsers
// Window isn't included so as not to unbind existing unload events
jQuery(window).bind("unload", function() {
    jQuery("*").add(document).unbind();
});
jQuery.fn.extend({
    // Keep a copy of the old load
    _load: jQuery.fn.load,
 
    load: function( url, params, callback ) {
        if ( typeof url != 'string' )
            return this._load( url );
 
        var off = url.indexOf(" ");
        if ( off >= 0 ) {
            var selector = url.slice(off, url.length);
            url = url.slice(0, off);
        }
 
        callback = callback || function(){};
 
        // Default to a GET request
        var type = "GET";
 
        // If the second parameter was provided
        if ( params )
            // If it's a function
            if ( jQuery.isFunction( params ) ) {
                // We assume that it's the callback
                callback = params;
                params = null;
 
            // Otherwise, build a param string
            } else {
                params = jQuery.param( params );
                type = "POST";
            }
 
        var self = this;
 
        // Request the remote document
        jQuery.ajax({
            url: url,
            type: type,
            dataType: "html",
            data: params,
            complete: function(res, status){
                // If successful, inject the HTML into all the matched elements
                if ( status == "success" || status == "notmodified" )
                    // See if a selector was specified
                    self.html( selector ?
                        // Create a dummy div to hold the results
                        jQuery("<div/>")
                            // inject the contents of the document in, removing the scripts
                            // to avoid any 'Permission Denied' errors in IE
                            .append(res.responseText.replace(/<script(.|\s)*?\/script>/g, ""))
 
                            // Locate the specified elements
                            .find(selector) :
 
                        // If not, just inject the full result
                        res.responseText );
 
                self.each( callback, [res.responseText, status, res] );
            }
        });
        return this;
    },
 
    serialize: function() {
        return jQuery.param(this.serializeArray());
    },
    serializeArray: function() {
        return this.map(function(){
            return jQuery.nodeName(this, "form") ?
                jQuery.makeArray(this.elements) : this;
        })
        .filter(function(){
            return this.name && !this.disabled &&
                (this.checked || /select|textarea/i.test(this.nodeName) ||
                    /text|hidden|password/i.test(this.type));
        })
        .map(function(i, elem){
            var val = jQuery(this).val();
            return val == null ? null :
                val.constructor == Array ?
                    jQuery.map( val, function(val, i){
                        return {name: elem.name, value: val};
                    }) :
                    {name: elem.name, value: val};
        }).get();
    }
});
 
// Attach a bunch of functions for handling common AJAX events
jQuery.each( "ajaxStart,ajaxStop,ajaxComplete,ajaxError,ajaxSuccess,ajaxSend".split(","), function(i,o){
    jQuery.fn[o] = function(f){
        return this.bind(o, f);
    };
});
 
var jsc = now();
 
jQuery.extend({
    get: function( url, data, callback, type ) {
        // shift arguments if data argument was ommited
        if ( jQuery.isFunction( data ) ) {
            callback = data;
            data = null;
        }
 
        return jQuery.ajax({
            type: "GET",
            url: url,
            data: data,
            success: callback,
            dataType: type
        });
    },
 
    getScript: function( url, callback ) {
        return jQuery.get(url, null, callback, "script");
    },
 
    getJSON: function( url, data, callback ) {
        return jQuery.get(url, data, callback, "json");
    },
 
    post: function( url, data, callback, type ) {
        if ( jQuery.isFunction( data ) ) {
            callback = data;
            data = {};
        }
 
        return jQuery.ajax({
            type: "POST",
            url: url,
            data: data,
            success: callback,
            dataType: type
        });
    },
 
    ajaxSetup: function( settings ) {
        jQuery.extend( jQuery.ajaxSettings, settings );
    },
 
    ajaxSettings: {
        url: location.href,
        global: true,
        type: "GET",
        timeout: 0,
        contentType: "application/x-www-form-urlencoded",
        processData: true,
        async: true,
        data: null,
        username: null,
        password: null,
        accepts: {
            xml: "application/xml, text/xml",
            html: "text/html",
            script: "text/javascript, application/javascript",
            json: "application/json, text/javascript",
            text: "text/plain",
            _default: "*/*"
        }
    },
 
    // Last-Modified header cache for next request
    lastModified: {},
 
    ajax: function( s ) {
        // Extend the settings, but re-extend 's' so that it can be
        // checked again later (in the test suite, specifically)
        s = jQuery.extend(true, s, jQuery.extend(true, {}, jQuery.ajaxSettings, s));
 
        var jsonp, jsre = /=\?(&|$)/g, status, data,
            type = s.type.toUpperCase();
 
        // convert data if not already a string
        if ( s.data && s.processData && typeof s.data != "string" )
            s.data = jQuery.param(s.data);
 
        // Handle JSONP Parameter Callbacks
        if ( s.dataType == "jsonp" ) {
            if ( type == "GET" ) {
                if ( !s.url.match(jsre) )
                    s.url += (s.url.match(/\?/) ? "&" : "?") + (s.jsonp || "callback") + "=?";
            } else if ( !s.data || !s.data.match(jsre) )
                s.data = (s.data ? s.data + "&" : "") + (s.jsonp || "callback") + "=?";
            s.dataType = "json";
        }
 
        // Build temporary JSONP function
        if ( s.dataType == "json" && (s.data && s.data.match(jsre) || s.url.match(jsre)) ) {
            jsonp = "jsonp" + jsc++;
 
            // Replace the =? sequence both in the query string and the data
            if ( s.data )
                s.data = (s.data + "").replace(jsre, "=" + jsonp + "$1");
            s.url = s.url.replace(jsre, "=" + jsonp + "$1");
 
            // We need to make sure
            // that a JSONP style response is executed properly
            s.dataType = "script";
 
            // Handle JSONP-style loading
            window[ jsonp ] = function(tmp){
                data = tmp;
                success();
                complete();
                // Garbage collect
                window[ jsonp ] = undefined;
                try{ delete window[ jsonp ]; } catch(e){}
                if ( head )
                    head.removeChild( script );
            };
        }
 
        if ( s.dataType == "script" && s.cache == null )
            s.cache = false;
 
        if ( s.cache === false && type == "GET" ) {
            var ts = now();
            // try replacing _= if it is there
            var ret = s.url.replace(/(\?|&)_=.*?(&|$)/, "$1_=" + ts + "$2");
            // if nothing was replaced, add timestamp to the end
            s.url = ret + ((ret == s.url) ? (s.url.match(/\?/) ? "&" : "?") + "_=" + ts : "");
        }
 
        // If data is available, append data to url for get requests
        if ( s.data && type == "GET" ) {
            s.url += (s.url.match(/\?/) ? "&" : "?") + s.data;
 
            // IE likes to send both get and post data, prevent this
            s.data = null;
        }
 
        // Watch for a new set of requests
        if ( s.global && ! jQuery.active++ )
            jQuery.event.trigger( "ajaxStart" );
 
        // Matches an absolute URL, and saves the domain
        var remote = /^(?:\w+:)?\/\/([^\/?#]+)/;
 
        // If we're requesting a remote document
        // and trying to load JSON or Script with a GET
        if ( s.dataType == "script" && type == "GET"
                && remote.test(s.url) && remote.exec(s.url)[1] != location.host ){
            var head = document.getElementsByTagName("head")[0];
            var script = document.createElement("script");
            script.src = s.url;
            if (s.scriptCharset)
                script.charset = s.scriptCharset;
 
            // Handle Script loading
            if ( !jsonp ) {
                var done = false;
 
                // Attach handlers for all browsers
                script.onload = script.onreadystatechange = function(){
                    if ( !done && (!this.readyState ||
                            this.readyState == "loaded" || this.readyState == "complete") ) {
                        done = true;
                        success();
                        complete();
                        head.removeChild( script );
                    }
                };
            }
 
            head.appendChild(script);
 
            // We handle everything using the script element injection
            return undefined;
        }
 
        var requestDone = false;
 
        // Create the request object; Microsoft failed to properly
        // implement the XMLHttpRequest in IE7, so we use the ActiveXObject when it is available
        var xhr = window.ActiveXObject ? new ActiveXObject("Microsoft.XMLHTTP") : new XMLHttpRequest();
 
        // Open the socket
        // Passing null username, generates a login popup on Opera (#2865)
        if( s.username )
            xhr.open(type, s.url, s.async, s.username, s.password);
        else
            xhr.open(type, s.url, s.async);
 
        // Need an extra try/catch for cross domain requests in Firefox 3
        try {
            // Set the correct header, if data is being sent
            if ( s.data )
                xhr.setRequestHeader("Content-Type", s.contentType);
 
            // Set the If-Modified-Since header, if ifModified mode.
            if ( s.ifModified )
                xhr.setRequestHeader("If-Modified-Since",
                    jQuery.lastModified[s.url] || "Thu, 01 Jan 1970 00:00:00 GMT" );
 
            // Set header so the called script knows that it's an XMLHttpRequest
            xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest");
 
            // Set the Accepts header for the server, depending on the dataType
            xhr.setRequestHeader("Accept", s.dataType && s.accepts[ s.dataType ] ?
                s.accepts[ s.dataType ] + ", */*" :
                s.accepts._default );
        } catch(e){}
 
        // Allow custom headers/mimetypes
        if ( s.beforeSend && s.beforeSend(xhr, s) === false ) {
            // cleanup active request counter
            s.global && jQuery.active--;
            // close opended socket
            xhr.abort();
            return false;
        }
 
        if ( s.global )
            jQuery.event.trigger("ajaxSend", [xhr, s]);
 
        // Wait for a response to come back
        var onreadystatechange = function(isTimeout){
            // The transfer is complete and the data is available, or the request timed out
            if ( !requestDone && xhr && (xhr.readyState == 4 || isTimeout == "timeout") ) {
                requestDone = true;
 
                // clear poll interval
                if (ival) {
                    clearInterval(ival);
                    ival = null;
                }
 
                status = isTimeout == "timeout" && "timeout" ||
                    !jQuery.httpSuccess( xhr ) && "error" ||
                    s.ifModified && jQuery.httpNotModified( xhr, s.url ) && "notmodified" ||
                    "success";
 
                if ( status == "success" ) {
                    // Watch for, and catch, XML document parse errors
                    try {
                        // process the data (runs the xml through httpData regardless of callback)
                        data = jQuery.httpData( xhr, s.dataType, s.dataFilter );
                    } catch(e) {
                        status = "parsererror";
                    }
                }
 
                // Make sure that the request was successful or notmodified
                if ( status == "success" ) {
                    // Cache Last-Modified header, if ifModified mode.
                    var modRes;
                    try {
                        modRes = xhr.getResponseHeader("Last-Modified");
                    } catch(e) {} // swallow exception thrown by FF if header is not available
 
                    if ( s.ifModified && modRes )
                        jQuery.lastModified[s.url] = modRes;
 
                    // JSONP handles its own success callback
                    if ( !jsonp )
                        success();
                } else
                    jQuery.handleError(s, xhr, status);
 
                // Fire the complete handlers
                complete();
 
                // Stop memory leaks
                if ( s.async )
                    xhr = null;
            }
        };
 
        if ( s.async ) {
            // don't attach the handler to the request, just poll it instead
            var ival = setInterval(onreadystatechange, 13);
 
            // Timeout checker
            if ( s.timeout > 0 )
                setTimeout(function(){
                    // Check to see if the request is still happening
                    if ( xhr ) {
                        // Cancel the request
                        xhr.abort();
 
                        if( !requestDone )
                            onreadystatechange( "timeout" );
                    }
                }, s.timeout);
        }
 
        // Send the data
        try {
            xhr.send(s.data);
        } catch(e) {
            jQuery.handleError(s, xhr, null, e);
        }
 
        // firefox 1.5 doesn't fire statechange for sync requests
        if ( !s.async )
            onreadystatechange();
 
        function success(){
            // If a local callback was specified, fire it and pass it the data
            if ( s.success )
                s.success( data, status );
 
            // Fire the global callback
            if ( s.global )
                jQuery.event.trigger( "ajaxSuccess", [xhr, s] );
        }
 
        function complete(){
            // Process result
            if ( s.complete )
                s.complete(xhr, status);
 
            // The request was completed
            if ( s.global )
                jQuery.event.trigger( "ajaxComplete", [xhr, s] );
 
            // Handle the global AJAX counter
            if ( s.global && ! --jQuery.active )
                jQuery.event.trigger( "ajaxStop" );
        }
 
        // return XMLHttpRequest to allow aborting the request etc.
        return xhr;
    },
 
    handleError: function( s, xhr, status, e ) {
        // If a local callback was specified, fire it
        if ( s.error ) s.error( xhr, status, e );
 
        // Fire the global callback
        if ( s.global )
            jQuery.event.trigger( "ajaxError", [xhr, s, e] );
    },
 
    // Counter for holding the number of active queries
    active: 0,
 
    // Determines if an XMLHttpRequest was successful or not
    httpSuccess: function( xhr ) {
        try {
            // IE error sometimes returns 1223 when it should be 204 so treat it as success, see #1450
            return !xhr.status && location.protocol == "file:" ||
                ( xhr.status >= 200 && xhr.status < 300 ) || xhr.status == 304 || xhr.status == 1223 ||
                jQuery.browser.safari && xhr.status == undefined;
        } catch(e){}
        return false;
    },
 
    // Determines if an XMLHttpRequest returns NotModified
    httpNotModified: function( xhr, url ) {
        try {
            var xhrRes = xhr.getResponseHeader("Last-Modified");
 
            // Firefox always returns 200. check Last-Modified date
            return xhr.status == 304 || xhrRes == jQuery.lastModified[url] ||
                jQuery.browser.safari && xhr.status == undefined;
        } catch(e){}
        return false;
    },
 
    httpData: function( xhr, type, filter ) {
        var ct = xhr.getResponseHeader("content-type"),
            xml = type == "xml" || !type && ct && ct.indexOf("xml") >= 0,
            data = xml ? xhr.responseXML : xhr.responseText;
 
        if ( xml && data.documentElement.tagName == "parsererror" )
            throw "parsererror";
 
        // Allow a pre-filtering function to sanitize the response
        if( filter )
            data = filter( data, type );
 
        // If the type is "script", eval it in global context
        if ( type == "script" )
            jQuery.globalEval( data );
 
        // Get the JavaScript object, if JSON is used.
        if ( type == "json" )
            data = eval("(" + data + ")");
 
        return data;
    },
 
    // Serialize an array of form elements or a set of
    // key/values into a query string
    param: function( a ) {
        var s = [];
 
        // If an array was passed in, assume that it is an array
        // of form elements
        if ( a.constructor == Array || a.jquery )
            // Serialize the form elements
            jQuery.each( a, function(){
                s.push( encodeURIComponent(this.name) + "=" + encodeURIComponent( this.value ) );
            });
 
        // Otherwise, assume that it's an object of key/value pairs
        else
            // Serialize the key/values
            for ( var j in a )
                // If the value is an array then the key names need to be repeated
                if ( a[j] && a[j].constructor == Array )
                    jQuery.each( a[j], function(){
                        s.push( encodeURIComponent(j) + "=" + encodeURIComponent( this ) );
                    });
                else
                    s.push( encodeURIComponent(j) + "=" + encodeURIComponent( jQuery.isFunction(a[j]) ? a[j]() : a[j] ) );
 
        // Return the resulting serialization
        return s.join("&").replace(/%20/g, "+");
    }
 
});
jQuery.fn.extend({
    show: function(speed,callback){
        return speed ?
            this.animate({
                height: "show", width: "show", opacity: "show"
            }, speed, callback) :
 
            this.filter(":hidden").each(function(){
                this.style.display = this.oldblock || "";
                if ( jQuery.css(this,"display") == "none" ) {
                    var elem = jQuery("<" + this.tagName + " />").appendTo("body");
                    this.style.display = elem.css("display");
                    // handle an edge condition where css is - div { display:none; } or similar
                    if (this.style.display == "none")
                        this.style.display = "block";
                    elem.remove();
                }
            }).end();
    },
Saril est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/02/2011, 11h40   #15
Invité de passage
 
Inscription : février 2011
Messages : 9
Détails du profil
Informations forums :
Inscription : février 2011
Messages : 9
Points : 0
Points : 0
et enfin la 3ème, j'espère que ça feras tilt à un connaisseur:

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
hide: function(speed,callback){
        return speed ?
            this.animate({
                height: "hide", width: "hide", opacity: "hide"
            }, speed, callback) :
 
            this.filter(":visible").each(function(){
                this.oldblock = this.oldblock || jQuery.css(this,"display");
                this.style.display = "none";
            }).end();
    },
 
    // Save the old toggle function
    _toggle: jQuery.fn.toggle,
 
    toggle: function( fn, fn2 ){
        return jQuery.isFunction(fn) && jQuery.isFunction(fn2) ?
            this._toggle.apply( this, arguments ) :
            fn ?
                this.animate({
                    height: "toggle", width: "toggle", opacity: "toggle"
                }, fn, fn2) :
                this.each(function(){
                    jQuery(this)[ jQuery(this).is(":hidden") ? "show" : "hide" ]();
                });
    },
 
    slideDown: function(speed,callback){
        return this.animate({height: "show"}, speed, callback);
    },
 
    slideUp: function(speed,callback){
        return this.animate({height: "hide"}, speed, callback);
    },
 
    slideToggle: function(speed, callback){
        return this.animate({height: "toggle"}, speed, callback);
    },
 
    fadeIn: function(speed, callback){
        return this.animate({opacity: "show"}, speed, callback);
    },
 
    fadeOut: function(speed, callback){
        return this.animate({opacity: "hide"}, speed, callback);
    },
 
    fadeTo: function(speed,to,callback){
        return this.animate({opacity: to}, speed, callback);
    },
 
    animate: function( prop, speed, easing, callback ) {
        var optall = jQuery.speed(speed, easing, callback);
 
        return this[ optall.queue === false ? "each" : "queue" ](function(){
            if ( this.nodeType != 1)
                return false;
 
            var opt = jQuery.extend({}, optall), p,
                hidden = jQuery(this).is(":hidden"), self = this;
 
            for ( p in prop ) {
                if ( prop[p] == "hide" && hidden || prop[p] == "show" && !hidden )
                    return opt.complete.call(this);
 
                if ( p == "height" || p == "width" ) {
                    // Store display property
                    opt.display = jQuery.css(this, "display");
 
                    // Make sure that nothing sneaks out
                    opt.overflow = this.style.overflow;
                }
            }
 
            if ( opt.overflow != null )
                this.style.overflow = "hidden";
 
            opt.curAnim = jQuery.extend({}, prop);
 
            jQuery.each( prop, function(name, val){
                var e = new jQuery.fx( self, opt, name );
 
                if ( /toggle|show|hide/.test(val) )
                    e[ val == "toggle" ? hidden ? "show" : "hide" : val ]( prop );
                else {
                    var parts = val.toString().match(/^([+-]=)?([\d+-.]+)(.*)$/),
                        start = e.cur(true) || 0;
 
                    if ( parts ) {
                        var end = parseFloat(parts[2]),
                            unit = parts[3] || "px";
 
                        // We need to compute starting value
                        if ( unit != "px" ) {
                            self.style[ name ] = (end || 1) + unit;
                            start = ((end || 1) / e.cur(true)) * start;
                            self.style[ name ] = start + unit;
                        }
 
                        // If a +=/-= token was provided, we're doing a relative animation
                        if ( parts[1] )
                            end = ((parts[1] == "-=" ? -1 : 1) * end) + start;
 
                        e.custom( start, end, unit );
                    } else
                        e.custom( start, val, "" );
                }
            });
 
            // For JS strict compliance
            return true;
        });
    },
 
    queue: function(type, fn){
        if ( jQuery.isFunction(type) || ( type && type.constructor == Array )) {
            fn = type;
            type = "fx";
        }
 
        if ( !type || (typeof type == "string" && !fn) )
            return queue( this[0], type );
 
        return this.each(function(){
            if ( fn.constructor == Array )
                queue(this, type, fn);
            else {
                queue(this, type).push( fn );
 
                if ( queue(this, type).length == 1 )
                    fn.call(this);
            }
        });
    },
 
    stop: function(clearQueue, gotoEnd){
        var timers = jQuery.timers;
 
        if (clearQueue)
            this.queue([]);
 
        this.each(function(){
            // go in reverse order so anything added to the queue during the loop is ignored
            for ( var i = timers.length - 1; i >= 0; i-- )
                if ( timers[i].elem == this ) {
                    if (gotoEnd)
                        // force the next step to be the last
                        timers[i](true);
                    timers.splice(i, 1);
                }
        });
 
        // start the next in the queue if the last step wasn't forced
        if (!gotoEnd)
            this.dequeue();
 
        return this;
    }
 
});
 
var queue = function( elem, type, array ) {
    if ( elem ){
 
        type = type || "fx";
 
        var q = jQuery.data( elem, type + "queue" );
 
        if ( !q || array )
            q = jQuery.data( elem, type + "queue", jQuery.makeArray(array) );
 
    }
    return q;
};
 
jQuery.fn.dequeue = function(type){
    type = type || "fx";
 
    return this.each(function(){
        var q = queue(this, type);
 
        q.shift();
 
        if ( q.length )
            q[0].call( this );
    });
};
 
jQuery.extend({
 
    speed: function(speed, easing, fn) {
        var opt = speed && speed.constructor == Object ? speed : {
            complete: fn || !fn && easing ||
                jQuery.isFunction( speed ) && speed,
            duration: speed,
            easing: fn && easing || easing && easing.constructor != Function && easing
        };
 
        opt.duration = (opt.duration && opt.duration.constructor == Number ?
            opt.duration :
            jQuery.fx.speeds[opt.duration]) || jQuery.fx.speeds.def;
 
        // Queueing
        opt.old = opt.complete;
        opt.complete = function(){
            if ( opt.queue !== false )
                jQuery(this).dequeue();
            if ( jQuery.isFunction( opt.old ) )
                opt.old.call( this );
        };
 
        return opt;
    },
 
    easing: {
        linear: function( p, n, firstNum, diff ) {
            return firstNum + diff * p;
        },
        swing: function( p, n, firstNum, diff ) {
            return ((-Math.cos(p*Math.PI)/2) + 0.5) * diff + firstNum;
        }
    },
 
    timers: [],
    timerId: null,
 
    fx: function( elem, options, prop ){
        this.options = options;
        this.elem = elem;
        this.prop = prop;
 
        if ( !options.orig )
            options.orig = {};
    }
 
});
 
jQuery.fx.prototype = {
 
    // Simple function for setting a style value
    update: function(){
        if ( this.options.step )
            this.options.step.call( this.elem, this.now, this );
 
        (jQuery.fx.step[this.prop] || jQuery.fx.step._default)( this );
 
        // Set display property to block for height/width animations
        if ( this.prop == "height" || this.prop == "width" )
            this.elem.style.display = "block";
    },
 
    // Get the current size
    cur: function(force){
        if ( this.elem[this.prop] != null && this.elem.style[this.prop] == null )
            return this.elem[ this.prop ];
 
        var r = parseFloat(jQuery.css(this.elem, this.prop, force));
        return r && r > -10000 ? r : parseFloat(jQuery.curCSS(this.elem, this.prop)) || 0;
    },
 
    // Start an animation from one number to another
    custom: function(from, to, unit){
        this.startTime = now();
        this.start = from;
        this.end = to;
        this.unit = unit || this.unit || "px";
        this.now = this.start;
        this.pos = this.state = 0;
        this.update();
 
        var self = this;
        function t(gotoEnd){
            return self.step(gotoEnd);
        }
 
        t.elem = this.elem;
 
        jQuery.timers.push(t);
 
        if ( jQuery.timerId == null ) {
            jQuery.timerId = setInterval(function(){
                var timers = jQuery.timers;
 
                for ( var i = 0; i < timers.length; i++ )
                    if ( !timers[i]() )
                        timers.splice(i--, 1);
 
                if ( !timers.length ) {
                    clearInterval( jQuery.timerId );
                    jQuery.timerId = null;
                }
            }, 13);
        }
    },
 
    // Simple 'show' function
    show: function(){
        // Remember where we started, so that we can go back to it later
        this.options.orig[this.prop] = jQuery.attr( this.elem.style, this.prop );
        this.options.show = true;
 
        // Begin the animation
        this.custom(0, this.cur());
 
        // Make sure that we start at a small width/height to avoid any
        // flash of content
        if ( this.prop == "width" || this.prop == "height" )
            this.elem.style[this.prop] = "1px";
 
        // Start by showing the element
        jQuery(this.elem).show();
    },
 
    // Simple 'hide' function
    hide: function(){
        // Remember where we started, so that we can go back to it later
        this.options.orig[this.prop] = jQuery.attr( this.elem.style, this.prop );
        this.options.hide = true;
 
        // Begin the animation
        this.custom(this.cur(), 0);
    },
 
    // Each step of an animation
    step: function(gotoEnd){
        var t = now();
 
        if ( gotoEnd || t > this.options.duration + this.startTime ) {
            this.now = this.end;
            this.pos = this.state = 1;
            this.update();
 
            this.options.curAnim[ this.prop ] = true;
 
            var done = true;
            for ( var i in this.options.curAnim )
                if ( this.options.curAnim[i] !== true )
                    done = false;
 
            if ( done ) {
                if ( this.options.display != null ) {
                    // Reset the overflow
                    this.elem.style.overflow = this.options.overflow;
 
                    // Reset the display
                    this.elem.style.display = this.options.display;
                    if ( jQuery.css(this.elem, "display") == "none" )
                        this.elem.style.display = "block";
                }
 
                // Hide the element if the "hide" operation was done
                if ( this.options.hide )
                    this.elem.style.display = "none";
 
                // Reset the properties, if the item has been hidden or shown
                if ( this.options.hide || this.options.show )
                    for ( var p in this.options.curAnim )
                        jQuery.attr(this.elem.style, p, this.options.orig[p]);
            }
 
            if ( done )
                // Execute the complete function
                this.options.complete.call( this.elem );
 
            return false;
        } else {
            var n = t - this.startTime;
            this.state = n / this.options.duration;
 
            // Perform the easing function, defaults to swing
            this.pos = jQuery.easing[this.options.easing || (jQuery.easing.swing ? "swing" : "linear")](this.state, n, 0, 1, this.options.duration);
            this.now = this.start + ((this.end - this.start) * this.pos);
 
            // Perform the next step of the animation
            this.update();
        }
 
        return true;
    }
 
};
 
jQuery.extend( jQuery.fx, {
    speeds:{
        slow: 600,
         fast: 200,
         // Default speed
         def: 400
    },
    step: {
        scrollLeft: function(fx){
            fx.elem.scrollLeft = fx.now;
        },
 
        scrollTop: function(fx){
            fx.elem.scrollTop = fx.now;
        },
 
        opacity: function(fx){
            jQuery.attr(fx.elem.style, "opacity", fx.now);
        },
 
        _default: function(fx){
            fx.elem.style[ fx.prop ] = fx.now + fx.unit;
        }
    }
});
// The Offset Method
// Originally By Brandon Aaron, part of the Dimension Plugin
// http://jquery.com/plugins/project/dimensions
jQuery.fn.offset = function() {
    var left = 0, top = 0, elem = this[0], results;
 
    if ( elem ) with ( jQuery.browser ) {
        var parent       = elem.parentNode,
            offsetChild  = elem,
            offsetParent = elem.offsetParent,
            doc          = elem.ownerDocument,
            safari2      = safari && parseInt(version) < 522 && !/adobeair/i.test(userAgent),
            css          = jQuery.curCSS,
            fixed        = css(elem, "position") == "fixed";
 
        // Use getBoundingClientRect if available
        if ( elem.getBoundingClientRect ) {
            var box = elem.getBoundingClientRect();
 
            // Add the document scroll offsets
            add(box.left + Math.max(doc.documentElement.scrollLeft, doc.body.scrollLeft),
                box.top  + Math.max(doc.documentElement.scrollTop,  doc.body.scrollTop));
 
            // IE adds the HTML element's border, by default it is medium which is 2px
            // IE 6 and 7 quirks mode the border width is overwritable by the following css html { border: 0; }
            // IE 7 standards mode, the border is always 2px
            // This border/offset is typically represented by the clientLeft and clientTop properties
            // However, in IE6 and 7 quirks mode the clientLeft and clientTop properties are not updated when overwriting it via CSS
            // Therefore this method will be off by 2px in IE while in quirksmode
            add( -doc.documentElement.clientLeft, -doc.documentElement.clientTop );
 
        // Otherwise loop through the offsetParents and parentNodes
        } else {
 
            // Initial element offsets
            add( elem.offsetLeft, elem.offsetTop );
 
            // Get parent offsets
            while ( offsetParent ) {
                // Add offsetParent offsets
                add( offsetParent.offsetLeft, offsetParent.offsetTop );
 
                // Mozilla and Safari > 2 does not include the border on offset parents
                // However Mozilla adds the border for table or table cells
                if ( mozilla && !/^t(able|d|h)$/i.test(offsetParent.tagName) || safari && !safari2 )
                    border( offsetParent );
 
                // Add the document scroll offsets if position is fixed on any offsetParent
                if ( !fixed && css(offsetParent, "position") == "fixed" )
                    fixed = true;
 
                // Set offsetChild to previous offsetParent unless it is the body element
                offsetChild  = /^body$/i.test(offsetParent.tagName) ? offsetChild : offsetParent;
                // Get next offsetParent
                offsetParent = offsetParent.offsetParent;
            }
 
            // Get parent scroll offsets
            while ( parent && parent.tagName && !/^body|html$/i.test(parent.tagName) ) {
                // Remove parent scroll UNLESS that parent is inline or a table to work around Opera inline/table scrollLeft/Top bug
                if ( !/^inline|table.*$/i.test(css(parent, "display")) )
                    // Subtract parent scroll offsets
                    add( -parent.scrollLeft, -parent.scrollTop );
 
                // Mozilla does not add the border for a parent that has overflow != visible
                if ( mozilla && css(parent, "overflow") != "visible" )
                    border( parent );
 
                // Get next parent
                parent = parent.parentNode;
            }
 
            // Safari <= 2 doubles body offsets with a fixed position element/offsetParent or absolutely positioned offsetChild
            // Mozilla doubles body offsets with a non-absolutely positioned offsetChild
            if ( (safari2 && (fixed || css(offsetChild, "position") == "absolute")) ||
                (mozilla && css(offsetChild, "position") != "absolute") )
                    add( -doc.body.offsetLeft, -doc.body.offsetTop );
 
            // Add the document scroll offsets if position is fixed
            if ( fixed )
                add(Math.max(doc.documentElement.scrollLeft, doc.body.scrollLeft),
                    Math.max(doc.documentElement.scrollTop,  doc.body.scrollTop));
        }
 
        // Return an object with top and left properties
        results = { top: top, left: left };
    }
 
    function border(elem) {
        add( jQuery.curCSS(elem, "borderLeftWidth", true), jQuery.curCSS(elem, "borderTopWidth", true) );
    }
 
    function add(l, t) {
        left += parseInt(l, 10) || 0;
        top += parseInt(t, 10) || 0;
    }
 
    return results;
};
 
 
jQuery.fn.extend({
    position: function() {
        var left = 0, top = 0, results;
 
        if ( this[0] ) {
            // Get *real* offsetParent
            var offsetParent = this.offsetParent(),
 
            // Get correct offsets
            offset       = this.offset(),
            parentOffset = /^body|html$/i.test(offsetParent[0].tagName) ? { top: 0, left: 0 } : offsetParent.offset();
 
            // Subtract element margins
            // note: when an element has margin: auto the offsetLeft and marginLeft 
            // are the same in Safari causing offset.left to incorrectly be 0
            offset.top  -= num( this, 'marginTop' );
            offset.left -= num( this, 'marginLeft' );
 
            // Add offsetParent borders
            parentOffset.top  += num( offsetParent, 'borderTopWidth' );
            parentOffset.left += num( offsetParent, 'borderLeftWidth' );
 
            // Subtract the two offsets
            results = {
                top:  offset.top  - parentOffset.top,
                left: offset.left - parentOffset.left
            };
        }
 
        return results;
    },
 
    offsetParent: function() {
        var offsetParent = this[0].offsetParent;
        while ( offsetParent && (!/^body|html$/i.test(offsetParent.tagName) && jQuery.css(offsetParent, 'position') == 'static') )
            offsetParent = offsetParent.offsetParent;
        return jQuery(offsetParent);
    }
});
 
 
// Create scrollLeft and scrollTop methods
jQuery.each( ['Left', 'Top'], function(i, name) {
    var method = 'scroll' + name;
 
    jQuery.fn[ method ] = function(val) {
        if (!this[0]) return;
 
        return val != undefined ?
 
            // Set the scroll offset
            this.each(function() {
                this == window || this == document ?
                    window.scrollTo(
                        !i ? val : jQuery(window).scrollLeft(),
                         i ? val : jQuery(window).scrollTop()
                    ) :
                    this[ method ] = val;
            }) :
 
            // Return the scroll offset
            this[0] == window || this[0] == document ?
                self[ i ? 'pageYOffset' : 'pageXOffset' ] ||
                    jQuery.boxModel && document.documentElement[ method ] ||
                    document.body[ method ] :
                this[0][ method ];
    };
});
// Create innerHeight, innerWidth, outerHeight and outerWidth methods
jQuery.each([ "Height", "Width" ], function(i, name){
 
    var tl = i ? "Left"  : "Top",  // top or left
        br = i ? "Right" : "Bottom"; // bottom or right
 
    // innerHeight and innerWidth
    jQuery.fn["inner" + name] = function(){
        return this[ name.toLowerCase() ]() +
            num(this, "padding" + tl) +
            num(this, "padding" + br);
    };
 
    // outerHeight and outerWidth
    jQuery.fn["outer" + name] = function(margin) {
        return this["inner" + name]() +
            num(this, "border" + tl + "Width") +
            num(this, "border" + br + "Width") +
            (margin ?
                num(this, "margin" + tl) + num(this, "margin" + br) : 0);
    };
 
});})();
 
 
//]]>
</script>
 
 
<script type='text/javascript'>
//<![CDATA[
/* ------------------------------------------------------------------------
    s3Slider
 
    Developped By: Boban Karišik -> http://www.serie3.info/
        CSS Help: Mészáros Róbert -> http://www.perspectived.com/
    Version: 1.0
 
    Copyright: Feel free to redistribute the script/modify it, as
               long as you leave my infos at the top.
------------------------------------------------------------------------- */
 
 
(function($){  
 
    $.fn.s3Slider = function(vars) {       
 
        var element     = this;
        var timeOut     = (vars.timeOut != undefined) ? vars.timeOut : 4000;
        var current     = null;
        var timeOutFn   = null;
        var faderStat   = true;
        var mOver       = false;
        var items       = $("#" + element[0].id + "Content ." + element[0].id + "Image");
        var itemsSpan   = $("#" + element[0].id + "Content ." + element[0].id + "Image span");
 
        items.each(function(i) {
 
            $(items[i]).mouseover(function() {
               mOver = true;
            });
 
            $(items[i]).mouseout(function() {
                mOver   = false;
                fadeElement(true);
            });
 
        });
 
        var fadeElement = function(isMouseOut) {
            var thisTimeOut = (isMouseOut) ? (timeOut/2) : timeOut;
            thisTimeOut = (faderStat) ? 10 : thisTimeOut;
            if(items.length > 0) {
                timeOutFn = setTimeout(makeSlider, thisTimeOut);
            } else {
                console.log("Poof..");
            }
        }
 
        var makeSlider = function() {
            current = (current != null) ? current : items[(items.length-1)];
            var currNo      = jQuery.inArray(current, items) + 1
            currNo = (currNo == items.length) ? 0 : (currNo - 1);
            var newMargin   = $(element).width() * currNo;
            if(faderStat == true) {
                if(!mOver) {
                    $(items[currNo]).fadeIn((timeOut/6), function() {
                        if($(itemsSpan[currNo]).css('bottom') == 0) {
                            $(itemsSpan[currNo]).slideUp((timeOut/6), function() {
                                faderStat = false;
                                current = items[currNo];
                                if(!mOver) {
                                    fadeElement(false);
                                }
                            });
                        } else {
                            $(itemsSpan[currNo]).slideDown((timeOut/6), function() {
                                faderStat = false;
                                current = items[currNo];
                                if(!mOver) {
                                    fadeElement(false);
                                }
                            });
                        }
                    });
                }
            } else {
                if(!mOver) {
                    if($(itemsSpan[currNo]).css('bottom') == 0) {
                        $(itemsSpan[currNo]).slideDown((timeOut/6), function() {
                            $(items[currNo]).fadeOut((timeOut/6), function() {
                                faderStat = true;
                                current = items[(currNo+1)];
                                if(!mOver) {
                                    fadeElement(false);
                                }
                            });
                        });
                    } else {
                        $(itemsSpan[currNo]).slideUp((timeOut/6), function() {
                        $(items[currNo]).fadeOut((timeOut/6), function() {
                                faderStat = true;
                                current = items[(currNo+1)];
                                if(!mOver) {
                                    fadeElement(false);
                                }
                            });
                        });
                    }
                }
            }
        }
 
        makeSlider();
 
    };  
 
})(jQuery);  
 
//]]>
</script>
 
 
    <script type='text/javascript'>
    $(document).ready(function() {
    $(&#39;#s3slider&#39;).s3Slider({
    timeOut: 3000
    });
    });
    </script>
 
 
<!-- JavaScript Resumo do Post -->
 
<script type='text/javascript'>
 
var thumbnail_mode = "float" ;
summary_noimg = 280;
summary_img = 150;
img_thumb_height = 130;
img_thumb_width = 130;
</script>
 
<script type='text/javascript'>
//<![CDATA[
// <!-- Summary Posts with thumbnails for Blogger/Blogspot version 3.0 (C)2008 by Anhvo -->
// <!-- http://www.vietwebguide.com/ -->
// <!-- See the tutorial (in portuguese) to install on http://bloggersphera.blogspot.com -->
 
 
 
function removeHtmlTag(strx,chop){ 
    if(strx.indexOf("<")!=-1)
    {
        var s = strx.split("<"); 
        for(var i=0;i<s.length;i++){ 
            if(s[i].indexOf(">")!=-1){ 
                s[i] = s[i].substring(s[i].indexOf(">")+1,s[i].length); 
            } 
        } 
        strx =  s.join(""); 
    }
    chop = (chop < strx.length-1) ? chop : strx.length-2; 
    while(strx.charAt(chop-1)!=' ' && strx.indexOf(' ',chop)!=-1) chop++; 
    strx = strx.substring(0,chop-1); 
    return strx+'...'; 
}
 
function createSummaryAndThumb(pID){
    var div = document.getElementById(pID);
    var imgtag = "";
    var img = div.getElementsByTagName("img");
    var summ = summary_noimg;
    if(img.length>=1) {    
        if(thumbnail_mode == "float") {
            imgtag = '<span style="float:left; padding:0px 10px 5px 0px;"><img src="'+img[0].src+'" width="'+img_thumb_width+'px" height="'+img_thumb_height+'px"/></span>';
            summ = summary_img;
        } else {
            imgtag = '<div style="padding:5px" align="center"><img style="max-width:'+img_thumb_width+'px; max-height:'+img_thumb_height+'px;" src="'+img[0].src+'" /></div>';
            summ = summary_img;
        }
    }
 
    var summary = imgtag + '<div>' + removeHtmlTag(div.innerHTML,summ) + '</div>';
    div.innerHTML = summary;
}
 
 
 
//]]>
</script>
</head>
 
<body>
  <div id='outer-wrapper'><div id='wrap2'>
 
<div id='header-wrapper'>
<b:section class='header' id='header' maxwidgets='1' showaddelement='yes'>
<b:widget id='Header1' locked='false' title='Template Tester (en-tête)' type='Header'>
<b:includable id='title'>
  <b:if cond='data:blog.url == data:blog.homepageUrl'>
    <data:title/>
  <b:else/>
    <a expr:href='data:blog.homepageUrl'><data:title/></a>
  </b:if>
</b:includable>
<b:includable id='description'>
  <div class='descriptionwrapper'>
    <p class='description'><span><data:description/></span></p>
  </div>
</b:includable>
<b:includable id='main'>
 
  <b:if cond='data:useImage'>
    <b:if cond='data:imagePlacement == "REPLACE"'>
      <!--Show just the image, no text-->
      <div id='header-inner'>
        <a expr:href='data:blog.homepageUrl' style='display: block'>
          <img expr:alt='data:title' expr:height='data:height' expr:id='data:widget.instanceId + "_headerimg"' expr:src='data:sourceUrl' expr:width='data:width' style='display: block'/>
        </a>
      </div>
    <b:else/>
      <!--
      Show image as background to text. You can't really calculate the width
      reliably in JS because margins are not taken into account by any of
      clientWidth, offsetWidth or scrollWidth, so we don't force a minimum
      width if the user is using shrink to fit.
      This results in a margin-width's worth of pixels being cropped. If the
      user is not using shrink to fit then we expand the header.
      -->
      <div expr:style='"background-image: url(\"" + data:sourceUrl + "\"); "                      + "background-position: "                      + data:backgroundPositionStyleStr + "; "                      + data:widthStyleStr                      + "min-height: " + data:height + "px;"                      + "_height: " + data:height + "px;"                      + "background-repeat: no-repeat; "' id='header-inner'>
        <div class='titlewrapper' style='background: transparent'>
          <h1 class='title' style='background: transparent; border-width: 0px'>
            <b:include name='title'/>
          </h1>
        </div>
        <b:include name='description'/>
      </div>
    </b:if>
  <b:else/>
    <!--No header image -->
    <div id='header-inner'>
      <div class='titlewrapper'>
        <h1 class='title'>
          <b:include name='title'/>
        </h1>
      </div>
      <b:include name='description'/>
    </div>
  </b:if>
</b:includable>
</b:widget>
</b:section>
 
 
 
<div id='header-right'>
<b:section class='header-right' id='header-right' maxwidgets='1' showaddelement='yes'>
<b:widget id='AdSense2' locked='false' title='' type='AdSense'>
<b:includable id='main'>
  <div class='widget-content'>
    <data:adCode/>
    <b:include name='quickedit'/>
  </div>
</b:includable>
</b:widget>
</b:section></div>
 
 
</div>
 
<div id='content-wrapper'>
 
<div id='home'>
 
<b:if cond='data:blog.pageType != "item"'>
 
<div class='menu'>
<b:section class='menu' id='menu' showaddelement='yes'>
<b:widget id='LinkList10' locked='true' title='' type='LinkList'>
<b:includable id='main'>
 
<b:if cond='data:title'><h2><data:title/></h2></b:if>
 <div class='widget-content'>
   <ul>
     <b:loop values='data:links' var='link'>
       <li><a expr:href='data:link.target'><data:link.name/></a></li>
     </b:loop>
   </ul>
   <b:include name='quickedit'/>
 </div>
</b:includable>
</b:widget>
</b:section>
</div>
</b:if>
 
 
 
 
<div class='menu2'>
<b:section class='menu2' id='menu2' showaddelement='yes'>
<b:widget id='LinkList2' locked='true' title='' type='LinkList'>
<b:includable id='main'>
<b:if cond='data:blog.pageType == "item"'>
<b:if cond='data:title'><h2><data:title/></h2></b:if>
 <div class='widget-content'>
   <ul>
     <b:loop values='data:links' var='link'>
       <li><a expr:href='data:link.target'><data:link.name/></a></li>
     </b:loop>
   </ul>
   <b:include name='quickedit'/>
 </div></b:if>
</b:includable>
</b:widget>
</b:section>
</div>
 
 
 
<b:if cond='data:blog.pageType != "item"'>
<div id='s3slider'>
<b:section class='s3slider' id='s3slider' showaddelement='yes'>
<b:widget id='HTML1' locked='true' title='www.LeBlogger.com' type='HTML'>
<b:includable id='main'>
  <!-- only display title if it's non-empty -->
  <b:if cond='data:title != ""'>
    <h2 class='title'><data:title/></h2>
  </b:if>
  <div class='widget-content'>
    <data:content/>
  </div>
 
  <b:include name='quickedit'/>
</b:includable>
</b:widget>
</b:section>
</div>
</b:if>
 
<b:if cond='data:blog.pageType != "item"'>
<div id='destaque'>
<b:section class='destaque' id='destaque' showaddelement='yes'>
<b:widget id='Profile1' locked='false' title='Quem sou eu' type='Profile'>
<b:includable id='main'>
    <b:if cond='data:title != ""'>
      <h2><data:title/></h2>
    </b:if>
    <div class='widget-content'>
    <b:if cond='data:team == "true"'> <!-- team blog profile -->
      <ul>
        <b:loop values='data:authors' var='i'>
          <li><a expr:href='data:i.userUrl'><data:i.display-name/></a></li>
        </b:loop>
      </ul>
 
      <b:else/> <!-- normal blog profile -->
 
      <b:if cond='data:photo.url != ""'>
        <a expr:href='data:userUrl'><img class='profile-img' expr:alt='data:photo.alt' expr:height='data:photo.height' expr:src='data:photo.url' expr:width='data:photo.width'/></a>
      </b:if>
 
      <dl class='profile-datablock'>
        <dt class='profile-data'><data:displayname/></dt>
 
        <b:if cond='data:showlocation == "true"'>
          <dd class='profile-data'><data:location/></dd>
        </b:if>
 
        <b:if cond='data:aboutme != ""'><dd class='profile-textblock'><data:aboutme/></dd></b:if>
      </dl>
      <a class='profile-link' expr:href='data:userUrl'><data:viewProfileMsg/></a>
    </b:if>
 
     <b:include name='quickedit'/>
    </div>
  </b:includable>
</b:widget>
</b:section>
</div>
</b:if>
</div>
 
<div style='clear:both'/>
 
<div id='crosscol-wrapper' style='text-align:center'>
<b:section class='crosscol' id='crosscol' showaddelement='yes'>
<b:widget id='AdSense3' locked='false' title='' type='AdSense'>
<b:includable id='main'>
  <div class='widget-content'>
    <data:adCode/>
    <b:include name='quickedit'/>
  </div>
</b:includable>
</b:widget>
</b:section>
</div>
 
<div id='main-wrapper'>
<b:section class='main' id='main' showaddelement='no'>
<b:widget id='Blog1' locked='true' title='Messages du blog' type='Blog'>
<b:includable id='nextprev'>
  <div class='blog-pager' id='blog-pager'>
    <b:if cond='data:newerPageUrl'>
      <span id='blog-pager-newer-link'>
      <a class='blog-pager-newer-link' expr:href='data:newerPageUrl' expr:id='data:widget.instanceId + "_blog-pager-newer-link"' expr:title='data:newerPageTitle'><data:newerPageTitle/></a>
      </span>
    </b:if>
 
    <b:if cond='data:olderPageUrl'>
      <span id='blog-pager-older-link'>
      <a class='blog-pager-older-link' expr:href='data:olderPageUrl' expr:id='data:widget.instanceId + "_blog-pager-older-link"' expr:title='data:olderPageTitle'><data:olderPageTitle/></a>
      </span>
    </b:if>
 
    <b:if cond='data:blog.homepageUrl != data:blog.url'>
      <a class='home-link' expr:href='data:blog.homepageUrl'><data:homeMsg/></a>
      <b:else/>
      <b:if cond='data:newerPageUrl'>
        <a class='home-link' expr:href='data:blog.homepageUrl'><data:homeMsg/></a>
      </b:if>
    </b:if>
 
  </div>
  <div class='clear'/>
</b:includable>
<b:includable id='backlinks' var='post'>
  <a name='links'/><h4><data:post.backlinksLabel/></h4>
  <b:if cond='data:post.numBacklinks != 0'>
    <dl class='comments-block' id='comments-block'>
      <b:loop values='data:post.backlinks' var='backlink'>
        <div class='collapsed-backlink backlink-control'>
          <dt class='comment-title'>
            <span class='backlink-toggle-zippy'>&#160;</span>
            <a expr:href='data:backlink.url' rel='nofollow'><data:backlink.title/></a>
            <b:include data='backlink' name='backlinkDeleteIcon'/>
          </dt>
          <dd class='comment-body collapseable'>
            <data:backlink.snippet/>
          </dd>
          <dd class='comment-footer collapseable'>
            <span class='comment-author'><data:post.authorLabel/> <data:backlink.author/></span>
            <span class='comment-timestamp'><data:post.timestampLabel/> <data:backlink.timestamp/></span>
          </dd>
        </div>
      </b:loop>
    </dl>
  </b:if>
  <p class='comment-footer'>
    <a class='comment-link' expr:href='data:post.createLinkUrl' expr:id='data:widget.instanceId + "_backlinks-create-link"' target='_blank'><data:post.createLinkLabel/></a>
  </p>
</b:includable>
<b:includable id='post' var='post'>
  <div class='post hentry uncustomized-post-template'>
    <a expr:name='data:post.id'/>
    <b:if cond='data:post.title'>
      <h3 class='post-title entry-title'>
     <b:if cond='data:post.link'>
       <a expr:href='data:post.link'><data:post.title/></a>
     <b:else/>
        <b:if cond='data:post.url'>
          <a expr:href='data:post.url'><data:post.title/></a>
        <b:else/>
          <data:post.title/>
        </b:if>
     </b:if>
      </h3>
    </b:if>
 
    <div class='post-header-line-1'/>
 
    <div class='post-body entry-content'>
 <b:if cond='data:blog.pageType != "item"'>
<div expr:id='"summary" + data:post.id'><data:post.body/></div>
<script type='text/javascript'>createSummaryAndThumb("summary<data:post.id/>");</script>
<span id='showlink'><a expr:href='data:post.url'> [ ... ]</a></span>
</b:if>
<b:if cond='data:blog.pageType == "item"'><data:post.body/></b:if>
 <div style='clear: both;'/> <!-- clear for photos floats -->
</div>
 
    <b:if cond='data:post.hasJumpLink'>
      <div class='jump-link'>
        <a expr:href='data:post.url + "#more"'><data:post.jumpText/></a>  
      </div>
    </b:if>
 
<div class='post-footer'>
 
<div class='post-footer-line post-footer-line-1'>
 
<span class='post-author vcard'>
<b:if cond='data:top.showAuthor'>
<data:top.authorLabel/>
<span class='fn'><data:post.author/></span>
</b:if>
</span>
 
<span class='post-timestamp'>
<b:if cond='data:top.showTimestamp'>
<data:top.timestampLabel/>
<b:if cond='data:post.url'>
<a class='timestamp-link' expr:href='data:post.url' rel='bookmark' title='permanent link'><abbr class='published' expr:title='data:post.timestampISO8601'><data:post.timestamp/></abbr></a>
</b:if>
</b:if>
</span>  |  <span class='post-labels'>
<b:if cond='data:post.labels'>
<data:postLabelsLabel/>
<b:loop values='data:post.labels' var='label'>
<a expr:href='data:label.url' rel='tag'><data:label.name/></a><b:if cond='data:label.isLast != "true"'/>
<b:if cond='data:blog.pageType == "item"'>
<script expr:src='"/feeds/posts/default/-/" + data:label.name + "?alt=json-in-script&amp;callback=related_results_labels&amp;max-results=10"' type='text/javascript'/>
</b:if>
 
</b:loop>
</b:if>
</span>  |  <span class='post-comment-link'>
<b:if cond='data:blog.pageType != "item"'>
<b:if cond='data:post.allowComments'>
<a class='comment-link' expr:href='data:post.addCommentUrl' expr:onclick='data:post.addCommentOnclick'><b:if cond='data:post.numComments == 1'>1 <data:top.commentLabel/><b:else/><data:post.numComments/> <data:top.commentLabelPlural/></b:if></a>
</b:if>
</b:if>
</span>  
 
 
      </div>
 
      <div class='post-footer-line post-footer-line-2'>
      <span class='reaction-buttons'>
<b:if cond='data:top.showReactions'>
<table border='0' cellpadding='0' cellspacing='0' width='100%'><tr>
<td class='reactions-label-cell' nowrap='nowrap' valign='top' width='1%'>
<span class='reactions-label'>
<data:top.reactionsLabel/></span>&#160;</td>
<td><iframe allowtransparency='true' class='reactions-iframe' expr:src='data:post.reactionsUrl' frameborder='0' name='reactions' scrolling='no'/></td>
</tr></table>
</b:if>
</span>
 
      <span class='star-ratings'>
        <b:if cond='data:top.showStars'>
           <div expr:g:background-color='data:backgroundColor' expr:g:text-color='data:textColor' expr:g:url='data:post.absoluteUrl' g:height='42' g:type='RatingPanel' g:width='280'/>
        </b:if>
      </span>
 
 
 
       <!-- backlinks -->
       <span class='post-backlinks post-comment-link'>
         <b:if cond='data:blog.pageType != "item"'>
           <b:if cond='data:post.showBacklinks'>
             <a class='comment-link' expr:href='data:post.url + "#links"'><data:top.backlinkLabel/></a>
           </b:if>
         </b:if>
       </span>
 
      <span class='post-icons'>
        <!-- email post links -->
        <b:if cond='data:post.emailPostUrl'>
 
          <a expr:href='data:post.emailPostUrl' expr:title='data:top.emailPostMsg'>
              <img alt='' class='icon-action' height='13' src='http://www.blogger.com/img/icon18_email.gif' width='18'/>
          </a>
 
        </b:if>
 
        <!-- quickedit pencil -->
        <b:include data='post' name='postQuickEdit'/>
      </span>
      </div>
 
<div class='post-footer-line post-footer-line-3'>
<b:if cond='data:blog.pageType == "item"'>
<div class='related-posts'>
<h4>Posts Relacionados:</h4>
<script type='text/javascript'>
removeRelatedDuplicates();
printRelatedLabels();
</script>
</div>
</b:if>
 
 
 
 
 
      <span class='post-location'>
        <b:if cond='data:top.showLocation'>
          <b:if cond='data:post.location'>
            <data:postLocationLabel/>
            <a expr:href='data:post.location.mapsUrl' target='_blank'><data:post.location.name/></a>
          </b:if>
        </b:if>
      </span>
      </div>
    </div>
  </div>
</b:includable>
<b:includable id='commentDeleteIcon' var='comment'>
  <span expr:class='"item-control " + data:comment.adminClass'>
    <a expr:href='data:comment.deleteUrl' expr:title='data:top.deleteCommentMsg'>
      <img src='http://www.blogger.com/img/icon_delete13.gif'/>
    </a>
  </span>
</b:includable>
<b:includable id='feedLinks'>
  <b:if cond='data:blog.pageType != "item"'> <!-- Blog feed links -->
    <b:if cond='data:feedLinks'>
      <div class='blog-feeds'>
        <b:include data='feedLinks' name='feedLinksBody'/>
      </div>
    </b:if>
 
    <b:else/> <!--Post feed links -->
    <div class='post-feeds'>
      <b:loop values='data:posts' var='post'>
        <b:if cond='data:post.allowComments'>
          <b:if cond='data:post.feedLinks'>
            <b:include data='post.feedLinks' name='feedLinksBody'/>
          </b:if>
        </b:if>
      </b:loop>
    </div>
  </b:if>
</b:includable>
<b:includable id='status-message'>
  <b:if cond='data:navMessage'>
  <div class='status-msg-wrap'>
    <div class='status-msg-body'>
      <data:navMessage/>
    </div>
    <div class='status-msg-border'>
      <div class='status-msg-bg'>
        <div class='status-msg-hidden'><data:navMessage/></div>
      </div>
    </div>
  </div>
  <div style='clear: both;'/>
  </b:if>
</b:includable>
<b:includable id='comment-form' var='post'>
  <div class='comment-form'>
    <a name='comment-form'/>
    <h4 id='comment-post-message'><data:postCommentMsg/></h4>
    <p><data:blogCommentMessage/></p>
    <data:blogTeamBlogMessage/>
    <a expr:href='data:post.commentFormIframeSrc' id='comment-editor-src'/>
    <iframe allowtransparency='true' class='blogger-iframe-colorize blogger-comment-from-post' frameborder='0' height='410' id='comment-editor' name='comment-editor' src='' width='100%'/>
    <data:post.friendConnectJs/>
    <data:post.cmtfpIframe/>
    <script type='text/javascript'>
      BLOG_CMT_createIframe(&#39;<data:post.appRpcRelayPath/>&#39;, &#39;<data:post.communityId/>&#39;);
    </script>
  </div>
</b:includable>
<b:includable id='backlinkDeleteIcon' var='backlink'>
  <span expr:class='"item-control " + data:backlink.adminClass'>
    <a expr:href='data:backlink.deleteUrl' expr:title='data:top.deleteBacklinkMsg'>
      <img src='http://www.blogger.com/img/icon_delete13.gif'/>
    </a>
  </span>
</b:includable>
<b:includable id='feedLinksBody' var='links'>
  <div class='feed-links'>
  <data:feedLinksMsg/>
  <b:loop values='data:links' var='f'>
     <a class='feed-link' expr:href='data:f.url' expr:type='data:f.mimeType' target='_blank'><data:f.name/> (<data:f.feedType/>)</a>
  </b:loop>
  </div>
</b:includable>
<b:includable id='postQuickEdit' var='post'>
  <b:if cond='data:post.editUrl'>
    <span expr:class='"item-control " + data:post.adminClass'>
      <a expr:href='data:post.editUrl' expr:title='data:top.editPostMsg'>
        <img alt='' class='icon-action' height='18' src='http://www.blogger.com/img/icon18_edit_allbkg.gif' width='18'/>
      </a>
    </span>
  </b:if>
</b:includable>
<b:includable id='comments' var='post'>
  <div class='comments' id='comments'>
    <a name='comments'/>
    <b:if cond='data:post.allowComments'>
      <h4>
        <b:if cond='data:post.numComments == 1'>
          1 <data:commentLabel/>:
        <b:else/>
          <data:post.numComments/> <data:commentLabelPlural/>:
        </b:if>
      </h4>
 
      <b:if cond='data:post.commentPagingRequired'>
        <span class='paging-control-container'>
          <a expr:class='data:post.oldLinkClass' expr:href='data:post.oldestLinkUrl'><data:post.oldestLinkText/></a>
          &#160;
          <a expr:class='data:post.oldLinkClass' expr:href='data:post.olderLinkUrl'><data:post.olderLinkText/></a>
          &#160;
          <data:post.commentRangeText/>
          &#160;
          <a expr:class='data:post.newLinkClass' expr:href='data:post.newerLinkUrl'><data:post.newerLinkText/></a>
          &#160;
          <a expr:class='data:post.newLinkClass' expr:href='data:post.newestLinkUrl'><data:post.newestLinkText/></a>
        </span>
      </b:if>
 
      <dl expr:class='data:post.avatarIndentClass' id='comments-block'>
        <b:loop values='data:post.comments' var='comment'>
          <dt expr:class='"comment-author " + data:comment.authorClass' expr:id='data:comment.anchorName'>
            <b:if cond='data:comment.favicon'>
              <img expr:src='data:comment.favicon' height='16px' style='margin-bottom:-2px;' width='16px'/>
            </b:if>
            <a expr:name='data:comment.anchorName'/>
            <b:if cond='data:blog.enabledCommentProfileImages'>
              <data:comment.authorAvatarImage/>
            </b:if>
            <b:if cond='data:comment.authorUrl'>
              <a expr:href='data:comment.authorUrl' rel='nofollow'><data:comment.author/></a>
            <b:else/>
              <data:comment.author/>
            </b:if>
            <data:commentPostedByMsg/>
          </dt>
          <dd class='comment-body'>
            <b:if cond='data:comment.isDeleted'>
              <span class='deleted-comment'><data:comment.body/></span>
            <b:else/>
              <p><data:comment.body/></p>
            </b:if>
          </dd>
          <dd class='comment-footer'>
            <span class='comment-timestamp'>
              <a expr:href='data:comment.url' title='comment permalink'>
                <data:comment.timestamp/>
              </a>
              <b:include data='comment' name='commentDeleteIcon'/>
            </span>
          </dd>
        </b:loop>
      </dl>
 
      <b:if cond='data:post.commentPagingRequired'>
        <span class='paging-control-container'>
          <a expr:class='data:post.oldLinkClass' expr:href='data:post.oldestLinkUrl'>
            <data:post.oldestLinkText/>
          </a>
          <a expr:class='data:post.oldLinkClass' expr:href='data:post.olderLinkUrl'>
            <data:post.olderLinkText/>
          </a>
          &#160;
          <data:post.commentRangeText/>
          &#160;
          <a expr:class='data:post.newLinkClass' expr:href='data:post.newerLinkUrl'>
            <data:post.newerLinkText/>
          </a>
          <a expr:class='data:post.newLinkClass' expr:href='data:post.newestLinkUrl'>
            <data:post.newestLinkText/>
          </a>
        </span>
      </b:if>
 
      <p class='comment-footer'>
        <b:if cond='data:post.embedCommentForm'>
          <b:if cond='data:post.allowNewComments'>
            <b:include data='post' name='comment-form'/>
          <b:else/>
            <data:post.noNewCommentsText/>
          </b:if>
        <b:else/>
          <b:if cond='data:post.allowComments'>
            <a expr:href='data:post.addCommentUrl' expr:onclick='data:post.addCommentOnclick'><data:postCommentMsg/></a>
          </b:if>
        </b:if>
 
      </p>
    </b:if>
 
    <div id='backlinks-container'>
    <div expr:id='data:widget.instanceId + "_backlinks-container"'>
       <b:if cond='data:post.showBacklinks'>
         <b:include data='post' name='backlinks'/>
       </b:if>
    </div>
    </div>
  </div>
</b:includable>
<b:includable id='main' var='top'>
  <!-- posts -->
  <div class='blog-posts hfeed'>
 
    <b:include data='top' name='status-message'/>
 
    <data:adStart/>
    <b:loop values='data:posts' var='post'>
      <b:if cond='data:post.dateHeader'>
        <h2 class='date-header'><data:post.dateHeader/></h2>
      </b:if>
      <b:include data='post' name='post'/>
      <b:if cond='data:blog.pageType == "item"'>
        <b:include data='post' name='comments'/>
      </b:if>
      <b:if cond='data:post.includeAd'>
        <data:adEnd/>
        <data:adCode/>
        <data:adStart/>
      </b:if>
      <b:if cond='data:post.trackLatency'>
        <data:post.latencyJs/>
      </b:if>
    </b:loop>
    <data:adEnd/>
  </div>
 
  <!-- navigation -->
  <b:include name='nextprev'/>
 
  <!-- feed links -->
  <b:include name='feedLinks'/>
 
  <b:if cond='data:top.showStars'>
    <script src='http://www.google.com/jsapi' type='text/javascript'/>
    <script type='text/javascript'>
      google.load("annotations", "1", {"locale": "<data:top.languageCode/>"});
      function initialize() {
        google.annotations.setApplicationId(<data:top.blogspotReviews/>);
        google.annotations.createAll();
        google.annotations.fetch();
      }
      google.setOnLoadCallback(initialize);
    </script>
  </b:if>
 
</b:includable>
</b:widget>
</b:section>
</div>
 
<div id='sidebar-wrapper'>
 
<div id='sidebar-top'>
<b:section class='sidebar' id='sidebar-top' preferred='yes'>
<b:widget id='CustomSearch1' locked='false' title='Pesquisar este blog' type='CustomSearch'>
<b:includable id='main'>
    <!-- only display title if it's non-empty -->
    <b:if cond='data:title != ""'>
      <h2 class='title'><data:title/></h2>
    </b:if>
 
    <div class='widget-content' style='width:95%'>
      <div expr:id='data:widget.instanceId + "_form"'>
        <span class='cse-status'><data:loadingMsg/></span>
      </div>
    </div>
 
    <!-- override gsearch.css -->
    <style type='text/css'>
      #uds-searchControl .gs-result .gs-title,
      #uds-searchControl .gs-result .gs-title *,
      #uds-searchControl .gsc-results .gsc-trailing-more-results,
      #uds-searchControl .gsc-results .gsc-trailing-more-results * {
        color:<data:linkColor/>;
      }
 
      #uds-searchControl .gs-result .gs-title a:visited,
      #uds-searchControl .gs-result .gs-title a:visited * {
        color:<data:visitedLinkColor/>;
      }
 
      #uds-searchControl .gs-relativePublishedDate,
      #uds-searchControl .gs-publishedDate {
        color: <data:dateColor/>;
      }
 
      #uds-searchControl .gs-result a.gs-visibleUrl,
      #uds-searchControl .gs-result .gs-visibleUrl {
        color: <data:urlColor/>;
      }
 
      #uds-searchControl .gsc-results {
        border-color: <data:borderColor/>;
        background-color: <data:backgroundColor/>;
      }
 
      #uds-searchControl .gsc-tabhActive {
        border-color: <data:borderColor/>;
        border-top-color: <data:activeBorderColor/>;
        background-color: <data:backgroundColor/>;
        color: <data:textColor/>;
      }
 
      #uds-searchControl .gsc-tabhInactive {
        border-color: <data:borderColor/>;
        background-color: transparent;
        color: <data:linkColor/>;
      }
 
      #uds-searchClearResults {
        border-color: <data:borderColor/>;
      }
 
      #uds-searchClearResults:hover {
        border-color: <data:activeBorderColor/>;
      }
 
      #uds-searchControl .gsc-cursor-page {
        color: <data:linkColor/>;
      }
 
      #uds-searchControl .gsc-cursor-current-page {
        color: <data:textColor/>;
      }
    </style>
 
    <b:include name='quickedit'/>
  </b:includable>
</b:widget>
</b:section>
</div>
 
 
<div id='sidebar-top-left'>
<b:section class='sidebar' id='sidebar-top-left' preferred='yes'>
<b:widget id='Label3' locked='false' title='Marcadores' type='Label'>
<b:includable id='main'>
  <b:if cond='data:title'>
    <h2><data:title/></h2>
  </b:if>
  <div expr:class='"widget-content " + data:display + "-label-widget-content"'>
    <b:if cond='data:display == "list"'>
      <ul>
      <b:loop values='data:labels' var='label'>
        <li>
          <b:if cond='data:blog.url == data:label.url'>
            <span expr:dir='data:blog.languageDirection'><data:label.name/></span>
          <b:else/>
            <a expr:dir='data:blog.languageDirection' expr:href='data:label.url'><data:label.name/></a>
          </b:if>
          <b:if cond='data:showFreqNumbers'>
            <span dir='ltr'>(<data:label.count/>)</span>
          </b:if>
        </li>
      </b:loop>
      </ul>
    <b:else/>
      <b:loop values='data:labels' var='label'>
        <span expr:class='"label-size label-size-" + data:label.cssSize'>
          <b:if cond='data:blog.url == data:label.url'>
            <span expr:dir='data:blog.languageDirection'><data:label.name/></span>
          <b:else/>
            <a expr:dir='data:blog.languageDirection' expr:href='data:label.url'><data:label.name/></a>
          </b:if>
          <b:if cond='data:showFreqNumbers'>
            <span class='label-count' dir='ltr'>(<data:label.count/>)</span>
          </b:if>
        </span>
      </b:loop>
    </b:if>
    <b:include name='quickedit'/>
  </div>
</b:includable>
</b:widget>
</b:section>
</div>
 
<div id='sidebar-top-right'>
<b:section class='sidebar' id='sidebar-top-right' preferred='yes'>
<b:widget id='LinkList1' locked='false' title='Links' type='LinkList'>
<b:includable id='main'>
 
<b:if cond='data:title'><h2><data:title/></h2></b:if>
 <div class='widget-content'>
   <ul>
     <b:loop values='data:links' var='link'>
       <li><a expr:href='data:link.target'><data:link.name/></a></li>
     </b:loop>
   </ul>
   <b:include name='quickedit'/>
 </div>
</b:includable>
</b:widget>
</b:section>
</div>
 
 
 
<div style='clear:both'/>
 
 
<div id='sidebar-bottom-left'>
<b:section class='sidebar' id='sidebar-bottom-left' preferred='yes'>
<b:widget id='LinkList3' locked='false' title='Lorem Ipsum Dolor' type='LinkList'>
<b:includable id='main'>
 
<b:if cond='data:title'><h2><data:title/></h2></b:if>
 <div class='widget-content'>
   <ul>
     <b:loop values='data:links' var='link'>
       <li><a expr:href='data:link.target'><data:link.name/></a></li>
     </b:loop>
   </ul>
   <b:include name='quickedit'/>
 </div>
</b:includable>
</b:widget>
</b:section>
</div>
<div id='sidebar-bottom-right'>
<b:section class='sidebar' id='sidebar-bottom-right' preferred='yes'>
<b:widget id='LinkList4' locked='false' title='Lorem' type='LinkList'>
<b:includable id='main'>
 
<b:if cond='data:title'><h2><data:title/></h2></b:if>
 <div class='widget-content'>
   <ul>
     <b:loop values='data:links' var='link'>
       <li><a expr:href='data:link.target'><data:link.name/></a></li>
     </b:loop>
   </ul>
   <b:include name='quickedit'/>
 </div>
</b:includable>
</b:widget>
</b:section>
</div>
<div class='clear'/>
<div id='sidebar-bottom'>
<b:section class='sidebar' id='sidebar-bottom' preferred='yes'>
<b:widget id='AdSense1' locked='false' title='' type='AdSense'>
<b:includable id='main'>
  <div class='widget-content'>
    <data:adCode/>
    <b:include name='quickedit'/>
  </div>
</b:includable>
</b:widget>
</b:section>
</div>
</div>
 
 
 
 
<!-- spacer for skins that want sidebar and main to be the same height-->
<div class='clear'>&#160;</div>
 
</div> <!-- end content-wrapper -->
 
<div id='footer-wrapper'>
<b:section class='footer' id='footer'/>
</div>
<div id='creditos' style='margin:0px;padding:5px 0px; color:#2f2f30'><p>&#169;2009 
<a expr:href='data:blog.homepageUrl'><data:blog.title/></a> | by <a href='http://templatesparanovoblogger.blogspot.com/'>TNB</a> via <a href='http://www.leblogger.com/'>Le Blogger</a></p></div>
</div></div> <!-- end outer-wrapper -->
</body>
</html>

Merci d'avance pour qui pourras m'aider
Saril est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 12h32.


 
 
 
 
Partenaires

Hébergement Web