Shortlinks by Pretty Links – Best WordPress Link Tracking Plugin - Version 1.3.23

Version Description

Download this release

Release Info

Developer supercleanse
Plugin Icon 128x128 Shortlinks by Pretty Links – Best WordPress Link Tracking Plugin
Version 1.3.23
Comparing to
See all releases

Version 1.3.23

Files changed (233) hide show
  1. classes/models/PrliClick.php +239 -0
  2. classes/models/PrliGroup.php +114 -0
  3. classes/models/PrliLink.php +235 -0
  4. classes/models/PrliUtils.php +409 -0
  5. classes/models/models.inc.php +11 -0
  6. classes/views/prli-clicks/csv.php +24 -0
  7. classes/views/prli-clicks/head.php +105 -0
  8. classes/views/prli-clicks/list.php +149 -0
  9. classes/views/prli-groups/edit.php +58 -0
  10. classes/views/prli-groups/head.php +44 -0
  11. classes/views/prli-groups/list.php +86 -0
  12. classes/views/prli-groups/new.php +59 -0
  13. classes/views/prli-links/bar.php +12 -0
  14. classes/views/prli-links/edit.php +22 -0
  15. classes/views/prli-links/form.php +111 -0
  16. classes/views/prli-links/head.php +93 -0
  17. classes/views/prli-links/list.php +154 -0
  18. classes/views/prli-links/new.php +22 -0
  19. classes/views/prli-links/ultra-cloak.php +11 -0
  20. classes/views/shared/errors.php +19 -0
  21. classes/views/shared/table-nav.php +93 -0
  22. images/arrow_down.png +0 -0
  23. images/arrow_up.png +0 -0
  24. images/bar_background.png +0 -0
  25. images/bar_map.png +0 -0
  26. images/bookmark.png +0 -0
  27. images/browser/abilon.png +0 -0
  28. images/browser/adobe.png +0 -0
  29. images/browser/akregator.png +0 -0
  30. images/browser/alcatel.png +0 -0
  31. images/browser/amaya.png +0 -0
  32. images/browser/amigavoyager.png +0 -0
  33. images/browser/analogx.png +0 -0
  34. images/browser/apt.png +0 -0
  35. images/browser/avant.png +0 -0
  36. images/browser/aweb.png +0 -0
  37. images/browser/bpftp.png +0 -0
  38. images/browser/bytel.png +0 -0
  39. images/browser/chimera.png +0 -0
  40. images/browser/chrome.png +0 -0
  41. images/browser/cyberdog.png +0 -0
  42. images/browser/da.png +0 -0
  43. images/browser/dillo.png +0 -0
  44. images/browser/doris.png +0 -0
  45. images/browser/dreamcast.png +0 -0
  46. images/browser/ecatch.png +0 -0
  47. images/browser/encompass.png +0 -0
  48. images/browser/epiphany.png +0 -0
  49. images/browser/ericsson.png +0 -0
  50. images/browser/feeddemon.png +0 -0
  51. images/browser/feedreader.png +0 -0
  52. images/browser/firefox.png +0 -0
  53. images/browser/flashget.png +0 -0
  54. images/browser/fpexpress.png +0 -0
  55. images/browser/fresco.png +0 -0
  56. images/browser/freshdownload.png +0 -0
  57. images/browser/frontpage.png +0 -0
  58. images/browser/galeon.png +0 -0
  59. images/browser/getright.png +0 -0
  60. images/browser/gnome.png +0 -0
  61. images/browser/gnus.png +0 -0
  62. images/browser/gozilla.png +0 -0
  63. images/browser/hotjava.png +0 -0
  64. images/browser/httrack.png +0 -0
  65. images/browser/ibrowse.png +0 -0
  66. images/browser/icab.png +0 -0
  67. images/browser/java.png +0 -0
  68. images/browser/jetbrains_omea.png +0 -0
  69. images/browser/kmeleon.png +0 -0
  70. images/browser/konqueror.png +0 -0
  71. images/browser/leechget.png +0 -0
  72. images/browser/lg.png +0 -0
  73. images/browser/lotusnotes.png +0 -0
  74. images/browser/lynx.png +0 -0
  75. images/browser/macweb.png +0 -0
  76. images/browser/mediaplayer.png +0 -0
  77. images/browser/motorola.png +0 -0
  78. images/browser/mozilla.png +0 -0
  79. images/browser/mplayer.png +0 -0
  80. images/browser/msie.png +0 -0
  81. images/browser/msie_large.png +0 -0
  82. images/browser/multizilla.png +0 -0
  83. images/browser/ncsa_mosaic.png +0 -0
  84. images/browser/neon.png +0 -0
  85. images/browser/netnewswire.png +0 -0
  86. images/browser/netpositive.png +0 -0
  87. images/browser/netscape.png +0 -0
  88. images/browser/netscape_large.png +0 -0
  89. images/browser/netshow.png +0 -0
  90. images/browser/newsfire.png +0 -0
  91. images/browser/newsgator.png +0 -0
  92. images/browser/newzcrawler.png +0 -0
  93. images/browser/nokia.png +0 -0
  94. images/browser/notavailable.png +0 -0
  95. images/browser/omniweb.png +0 -0
  96. images/browser/opera.png +0 -0
  97. images/browser/panasonic.png +0 -0
  98. images/browser/pdaphone.png +0 -0
  99. images/browser/philips.png +0 -0
  100. images/browser/phoenix.png +0 -0
  101. images/browser/pluck.png +0 -0
  102. images/browser/pulpfiction.png +0 -0
  103. images/browser/real.png +0 -0
  104. images/browser/rss.png +0 -0
  105. images/browser/rssbandit.png +0 -0
  106. images/browser/rssowl.png +0 -0
  107. images/browser/rssreader.png +0 -0
  108. images/browser/rssxpress.png +0 -0
  109. images/browser/safari.png +0 -0
  110. images/browser/sagem.png +0 -0
  111. images/browser/samsung.png +0 -0
  112. images/browser/sharp.png +0 -0
  113. images/browser/sharpreader.png +0 -0
  114. images/browser/shrook.png +0 -0
  115. images/browser/siemens.png +0 -0
  116. images/browser/sony.png +0 -0
  117. images/browser/staroffice.png +0 -0
  118. images/browser/subversion.png +0 -0
  119. images/browser/teleport.png +0 -0
  120. images/browser/trium.png +0 -0
  121. images/browser/unknown.png +0 -0
  122. images/browser/w3c.png +0 -0
  123. images/browser/webcopier.png +0 -0
  124. images/browser/webreaper.png +0 -0
  125. images/browser/webtv.png +0 -0
  126. images/browser/webzip.png +0 -0
  127. images/browser/winxbox.png +0 -0
  128. images/browser/wizz.png +0 -0
  129. images/forward_params.png +0 -0
  130. images/os/aix.png +0 -0
  131. images/os/amigaos.png +0 -0
  132. images/os/apple.png +0 -0
  133. images/os/atari.png +0 -0
  134. images/os/beos.png +0 -0
  135. images/os/bsd.png +0 -0
  136. images/os/bsdfreebsd.png +0 -0
  137. images/os/bsdi.png +0 -0
  138. images/os/bsdnetbsd.png +0 -0
  139. images/os/bsdopenbsd.png +0 -0
  140. images/os/commodore.png +0 -0
  141. images/os/cpm.png +0 -0
  142. images/os/debian.png +0 -0
  143. images/os/digital.png +0 -0
  144. images/os/dos.png +0 -0
  145. images/os/dreamcast.png +0 -0
  146. images/os/freebsd.png +0 -0
  147. images/os/gnu.png +0 -0
  148. images/os/hpux.png +0 -0
  149. images/os/ibm.png +0 -0
  150. images/os/imode.png +0 -0
  151. images/os/irix.png +0 -0
  152. images/os/java.png +0 -0
  153. images/os/kfreebsd.png +0 -0
  154. images/os/linux.png +0 -0
  155. images/os/linuxcentos.png +0 -0
  156. images/os/linuxdebian.png +0 -0
  157. images/os/linuxfedora.png +0 -0
  158. images/os/linuxgentoo.png +0 -0
  159. images/os/linuxmandr.png +0 -0
  160. images/os/linuxredhat.png +0 -0
  161. images/os/linuxsuse.png +0 -0
  162. images/os/linuxubuntu.png +0 -0
  163. images/os/mac.png +0 -0
  164. images/os/macintosh.png +0 -0
  165. images/os/macosx.png +0 -0
  166. images/os/netbsd.png +0 -0
  167. images/os/netware.png +0 -0
  168. images/os/next.png +0 -0
  169. images/os/openbsd.png +0 -0
  170. images/os/os2.png +0 -0
  171. images/os/osf.png +0 -0
  172. images/os/psp.png +0 -0
  173. images/os/qnx.png +0 -0
  174. images/os/riscos.png +0 -0
  175. images/os/sco.png +0 -0
  176. images/os/sunos.png +0 -0
  177. images/os/symbian.png +0 -0
  178. images/os/unix.png +0 -0
  179. images/os/unknown.png +0 -0
  180. images/os/vms.png +0 -0
  181. images/os/webtv.png +0 -0
  182. images/os/win.png +0 -0
  183. images/os/win16.png +0 -0
  184. images/os/win2000.png +0 -0
  185. images/os/win2003.png +0 -0
  186. images/os/win95.png +0 -0
  187. images/os/win98.png +0 -0
  188. images/os/wince.png +0 -0
  189. images/os/winlong.png +0 -0
  190. images/os/winme.png +0 -0
  191. images/os/winnt.png +0 -0
  192. images/os/winunknown.png +0 -0
  193. images/os/winxbox.png +0 -0
  194. images/os/winxp.png +0 -0
  195. images/pixel_track.png +0 -0
  196. images/pretty-link-48x48.png +0 -0
  197. images/pretty-link-add.png +0 -0
  198. images/pretty-link-med.png +0 -0
  199. images/pretty-link-small.png +0 -0
  200. images/url_icon.gif +0 -0
  201. includes/jquery/css/ui-lightness/images/ui-bg_diagonals-thick_18_b81900_40x40.png +0 -0
  202. includes/jquery/css/ui-lightness/images/ui-bg_diagonals-thick_20_666666_40x40.png +0 -0
  203. includes/jquery/css/ui-lightness/images/ui-bg_flat_10_000000_40x100.png +0 -0
  204. includes/jquery/css/ui-lightness/images/ui-bg_glass_100_f6f6f6_1x400.png +0 -0
  205. includes/jquery/css/ui-lightness/images/ui-bg_glass_100_fdf5ce_1x400.png +0 -0
  206. includes/jquery/css/ui-lightness/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
  207. includes/jquery/css/ui-lightness/images/ui-bg_gloss-wave_35_f6a828_500x100.png +0 -0
  208. includes/jquery/css/ui-lightness/images/ui-bg_highlight-soft_100_eeeeee_1x100.png +0 -0
  209. includes/jquery/css/ui-lightness/images/ui-bg_highlight-soft_75_ffe45c_1x100.png +0 -0
  210. includes/jquery/css/ui-lightness/images/ui-icons_222222_256x240.png +0 -0
  211. includes/jquery/css/ui-lightness/images/ui-icons_228ef1_256x240.png +0 -0
  212. includes/jquery/css/ui-lightness/images/ui-icons_ef8c08_256x240.png +0 -0
  213. includes/jquery/css/ui-lightness/images/ui-icons_ffd27a_256x240.png +0 -0
  214. includes/jquery/css/ui-lightness/images/ui-icons_ffffff_256x240.png +0 -0
  215. includes/jquery/css/ui-lightness/jquery-ui-1.7.1.custom.css +404 -0
  216. includes/jquery/js/jquery-1.3.2.min.js +19 -0
  217. includes/jquery/js/jquery-ui-1.7.1.custom.min.js +273 -0
  218. includes/php/php_browsecap.ini +16810 -0
  219. includes/version-2-ichor/README.txt +8 -0
  220. includes/version-2-ichor/js/README.txt +12 -0
  221. includes/version-2-ichor/js/json/json2.js +461 -0
  222. includes/version-2-ichor/js/swfobject.js +5 -0
  223. includes/version-2-ichor/open-flash-chart.swf +0 -0
  224. pretty-bar.php +208 -0
  225. pretty-link.php +307 -0
  226. prli-add-link.php +9 -0
  227. prli-clicks.php +231 -0
  228. prli-config.php +89 -0
  229. prli-groups.php +175 -0
  230. prli-image-lookups.php +136 -0
  231. prli-links.php +182 -0
  232. prli-options.php +232 -0
  233. readme.txt +74 -0
classes/models/PrliClick.php ADDED
@@ -0,0 +1,239 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ class PrliClick
3
+ {
4
+ function table_name()
5
+ {
6
+ global $wpdb;
7
+ return $wpdb->prefix . 'prli_clicks';
8
+ }
9
+
10
+ function get_ip_exclude_list()
11
+ {
12
+ $exclude_list = get_option('prli_exclude_ips');
13
+ $exclude_list = preg_replace('#[ \t]#','',$exclude_list);
14
+
15
+ if($exclude_list)
16
+ return "'" . implode("','", explode(',',$exclude_list)) . "'";
17
+ else
18
+ return '';
19
+ }
20
+
21
+ function get_exclude_where_clause( $where = '')
22
+ {
23
+ $exclude_list = $this->get_ip_exclude_list();
24
+
25
+ if($where == '')
26
+ $starts_with = '';
27
+ else
28
+ $starts_with = ' AND';
29
+
30
+ if( $exclude_list != '')
31
+ return $starts_with . ' cl.ip NOT IN (' . $exclude_list . ')';
32
+ else
33
+ return '';
34
+ }
35
+
36
+ function getOne( $id )
37
+ {
38
+ global $wpdb, $prli_link, $prli_utils;
39
+ $click_table = $wpdb->prefix . "prli_clicks";
40
+ $query = 'SELECT cl.*, (SELECT count(*) FROM '. $this->table_name() .' cl2 WHERE cl2.ip = cl.ip) as ip_count, (SELECT count(*) FROM '. $this->table_name() .' cl3 WHERE cl3.vuid = cl.vuid) as vuid_count, li.name as link_name FROM ' . $this->table_name() . ' cl, ' . $prli_link->table_name() . ' li WHERE li.id = cl.link_id AND id=' . $id . $prli_utils->prepend_and_or_where(' AND',$this->get_exclude_where_clause());
41
+
42
+ return $wpdb->get_row($query);
43
+ }
44
+
45
+ // SELECT cl.*,li.name as link_name FROM wp_prli_clicks cl, wp_prli_links li WHERE li.id = cl.link_id ORDER BY created_at DESC
46
+ function getAll($where = '', $order = '')
47
+ {
48
+ global $wpdb, $prli_link, $prli_utils;
49
+ $click_table = $wpdb->prefix . "prli_clicks";
50
+ $where .= $this->get_exclude_where_clause( $where );
51
+ $where = $prli_utils->prepend_and_or_where(' AND', $where);
52
+ $query = 'SELECT cl.*, (SELECT count(*) FROM '. $this->table_name() .' cl2 WHERE cl2.ip = cl.ip) as ip_count, (SELECT count(*) FROM '. $this->table_name() .' cl3 WHERE cl3.vuid = cl.vuid) as vuid_count, li.name as link_name FROM ' . $this->table_name() . ' cl, ' . $prli_link->table_name() . ' li WHERE li.id = cl.link_id' . $where . $order;
53
+ return $wpdb->get_results($query);
54
+ }
55
+
56
+ // Delete all of the clicks from the database.
57
+ function clearAllClicks()
58
+ {
59
+ global $wpdb;
60
+ $query = "TRUNCATE TABLE " . $this->table_name();
61
+ return $wpdb->query($query);
62
+ }
63
+
64
+ // Pagination Methods
65
+ function getRecordCount($where='')
66
+ {
67
+ global $wpdb, $prli_link, $prli_utils;
68
+ $where .= $this->get_exclude_where_clause( $where );
69
+ $where = $prli_utils->prepend_and_or_where(' WHERE', $where);
70
+ $query = 'SELECT COUNT(*) FROM ' . $this->table_name() . ' cl'. $where;
71
+ return $wpdb->get_var($query);
72
+ }
73
+
74
+ function getPageCount($p_size, $where='')
75
+ {
76
+ return ceil((int)$this->getRecordCount($where) / (int)$p_size);
77
+ }
78
+
79
+ function getPage($current_p,$p_size, $where = '', $order = '')
80
+ {
81
+ global $wpdb, $prli_link, $prli_utils;
82
+ $click_table = $wpdb->prefix . "prli_clicks";
83
+ $end_index = $current_p * $p_size;
84
+ $start_index = $end_index - $p_size;
85
+ $where .= $this->get_exclude_where_clause( $where );
86
+ $where = $prli_utils->prepend_and_or_where(' AND', $where);
87
+ $query = 'SELECT cl.*, (SELECT count(*) FROM '. $this->table_name() .' cl2 WHERE cl2.ip = cl.ip) as ip_count, (SELECT count(*) FROM '. $this->table_name() .' cl3 WHERE cl3.vuid = cl.vuid) as vuid_count, li.name as link_name FROM ' . $this->table_name() . ' cl, ' . $prli_link->table_name() . ' li WHERE li.id = cl.link_id' . $where . $order . ' LIMIT ' . $start_index . ',' . $p_size . ';';
88
+ $results = $wpdb->get_results($query);
89
+ return $results;
90
+ }
91
+
92
+ function generateUniqueVisitorId($num_chars = 6)
93
+ {
94
+ global $wpdb, $prli_utils;
95
+
96
+ // We're doing a base 36 hash which is why we're always doing everything by 36
97
+ $max_vuid_value = pow(36,$num_chars);
98
+ $min_vuid_value = 37;
99
+ $vuid = base_convert( mt_rand($min_vuid_value,$max_vuid_value), 10, 36 );
100
+
101
+ $query = "SELECT DISTINCT vuid FROM ".$this->table_name();
102
+ $vuids = $wpdb->get_col($query,0);
103
+
104
+ // It is highly unlikely that we'll ever see 2 identical random vuids
105
+ // but just in case, here's some code to prevent collisions
106
+ while( in_array($vuid,$vuids) )
107
+ $vuid = base_convert( mt_rand($min_vuid_value,$max_vuid_value), 10, 36 );
108
+
109
+ return $vuid;
110
+ }
111
+
112
+ function get_counts_by_days($start_timestamp, $end_timestamp, $link_id = "all", $type = "all", $group = '')
113
+ {
114
+ global $wpdb, $prli_link;
115
+
116
+ $query = "SELECT DATE(cl.created_at) as cldate,COUNT(*) as clcount FROM ".$this->table_name()." cl WHERE cl.created_at BETWEEN '".date("Y-n-j",$start_timestamp)." 00:00:00' AND '".date("Y-n-j",$end_timestamp)." 23:59:59'".$search_where.$this->get_exclude_where_clause( ' AND' );
117
+
118
+ if($link_id != "all")
119
+ $query .= " AND link_id=$link_id";
120
+
121
+ if(!empty($group))
122
+ $query .= " AND link_id IN (SELECT id FROM " . $prli_link->table_name() . " WHERE group_id=$group)";
123
+
124
+ if($type == "unique")
125
+ $query .= " AND first_click=1";
126
+
127
+ $query .= ' GROUP BY DATE(cl.created_at)';
128
+
129
+ $clicks_array = $wpdb->get_results($query);
130
+
131
+ $temp_array = array();
132
+ $counts_array = array();
133
+ $dates_array = array();
134
+
135
+ // Refactor Array for use later on
136
+ foreach($clicks_array as $c)
137
+ $temp_array[$c->cldate] = $c->clcount;
138
+
139
+ // Get the dates array
140
+ for($c = $start_timestamp; $c <= $end_timestamp; $c += 60*60*24)
141
+ $dates_array[] = date("Y-m-d",$c);
142
+
143
+ // Make sure counts array is in order and includes zero click days
144
+ foreach($dates_array as $date_str)
145
+ {
146
+ if(isset($temp_array[$date_str]))
147
+ $counts_array[$date_str] = $temp_array[$date_str];
148
+ else
149
+ $counts_array[$date_str] = 0;
150
+ }
151
+
152
+ return $counts_array;
153
+ }
154
+
155
+
156
+ function setupClickLineGraph($start_timestamp,$end_timestamp, $link_id = "all", $type = "all", $group = '')
157
+ {
158
+ global $wpdb, $prli_utils, $prli_link, $prli_group;
159
+
160
+ $dates_array = $this->get_counts_by_days($start_timestamp,$end_timestamp,$link_id,$type,$group);
161
+
162
+ $top_click_count = $prli_utils->getTopValue(array_values($dates_array));
163
+
164
+ if(!empty($group))
165
+ $link_slug = "group: '" . $wpdb->get_var("SELECT name FROM ".$prli_group->table_name()." WHERE id=$group") . "'";
166
+ else if($link_id == "all")
167
+ $link_slug = "all links";
168
+ else
169
+ $link_slug = "'/".$wpdb->get_var("SELECT slug FROM ".$prli_link->table_name()." WHERE id=$link_id") . "'";
170
+
171
+ if($type == "all")
172
+ $type_string = "All hits";
173
+ else
174
+ $type_string = "Unique hits";
175
+
176
+ $json_array = array(
177
+ "elements" => array( array(
178
+ "type" => "line",
179
+ "values" => array_values($dates_array),
180
+ "dot-style" => array(
181
+ "type" => "dot",
182
+ "dot-size" => 4,
183
+ "colour" => "#ffc94e",
184
+ "halo-size" => 1,
185
+ "tip" => "#val# hits"
186
+ ),
187
+ "width" => 2
188
+ ) ),
189
+ "title" => array(
190
+ "text" => 'Pretty Link: '.$type_string.' on '.$link_slug. ' between ' . date("Y-n-j",$start_timestamp) . ' and ' . date("Y-n-j",$end_timestamp),
191
+ "style" => "font-size: 16px; font-weight: bold; color: #3030d0; text-align: center; padding-bottom: 5px;"
192
+ ),
193
+ "bg_colour" => "-1",
194
+ "y_axis" => array(
195
+ "min" => 0,
196
+ "max" => $top_click_count,
197
+ "steps" => (int)(($top_click_count>=10)?$top_click_count/10:1),
198
+ "colour" => "#A2ACBA"
199
+ ),
200
+ "x_axis" => array(
201
+ "colour" => "#A2ACBA",
202
+ "grid-colour" => "#ffefa7",
203
+ "offset" => false,
204
+ "steps" => 4,
205
+ "labels" => array(
206
+ "steps" => 2,
207
+ "rotate" => 45,
208
+ "colour" => "#000000",
209
+ "labels" => array_keys($dates_array)
210
+ )
211
+ )
212
+ );
213
+
214
+ return $prli_utils->prli_json_encode($json_array);
215
+ }
216
+
217
+
218
+ // Set defaults and grab get or post of each possible param
219
+ function get_params_array()
220
+ {
221
+ $values = array(
222
+ 'paged' => (isset($_GET['paged'])?$_GET['paged']:(isset($_POST['paged'])?$_POST['paged']:1)),
223
+ 'l' => (isset($_GET['l'])?$_GET['l']:(isset($_POST['l'])?$_POST['l']:'all')),
224
+ 'group' => (isset($_GET['group'])?$_GET['group']:(isset($_POST['group'])?$_POST['group']:'')),
225
+ 'ip' => (isset($_GET['ip'])?$_GET['ip']:(isset($_POST['ip'])?$_POST['ip']:'')),
226
+ 'vuid' => (isset($_GET['vuid'])?$_GET['vuid']:(isset($_POST['vuid'])?$_POST['vuid']:'')),
227
+ 'sdate' => (isset($_GET['sdate'])?$_GET['sdate']:(isset($_POST['sdate'])?$_POST['sdate']:'')),
228
+ 'edate' => (isset($_GET['edate'])?$_GET['edate']:(isset($_POST['edate'])?$_POST['edate']:'')),
229
+ 'type' => (isset($_GET['type'])?$_GET['type']:(isset($_POST['type'])?$_POST['type']:'all')),
230
+ 'search' => (isset($_GET['search'])?$_GET['search']:(isset($_POST['search'])?$_POST['search']:'')),
231
+ 'sort' => (isset($_GET['sort'])?$_GET['sort']:(isset($_POST['sort'])?$_POST['sort']:'')),
232
+ 'sdir' => (isset($_GET['sdir'])?$_GET['sdir']:(isset($_POST['sdir'])?$_POST['sdir']:''))
233
+ );
234
+
235
+ return $values;
236
+ }
237
+
238
+ }
239
+ ?>
classes/models/PrliGroup.php ADDED
@@ -0,0 +1,114 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ class PrliGroup
3
+ {
4
+ function table_name()
5
+ {
6
+ global $wpdb;
7
+ return $wpdb->prefix . 'prli_groups';
8
+ }
9
+
10
+ function create( $values )
11
+ {
12
+ global $wpdb, $wp_rewrite;
13
+
14
+ $query = 'INSERT INTO ' . $this->table_name() .
15
+ ' (name,description,created_at) VALUES (\'' .
16
+ $values['name'] . '\',\'' .
17
+ $values['description'] . '\',' .
18
+ 'NOW())';
19
+ $query_results = $wpdb->query($query);
20
+ return $wpdb->insert_id;
21
+ }
22
+
23
+ function update( $id, $values )
24
+ {
25
+ global $wpdb, $wp_rewrite;
26
+
27
+ $query = 'UPDATE ' . $this->table_name() .
28
+ ' SET name=\'' . $values['name'] . '\', ' .
29
+ ' description=\'' . $values['description'] . '\' ' .
30
+ ' WHERE id='.$id;
31
+ $query_results = $wpdb->query($query);
32
+ return $query_results;
33
+ }
34
+
35
+ function destroy( $id )
36
+ {
37
+ require_once(PRLI_MODELS_PATH.'/models.inc.php');
38
+ global $wpdb, $prli_link, $wp_rewrite;
39
+
40
+ // Disconnect the links from this group
41
+ $query = 'UPDATE ' . $prli_link->table_name() .
42
+ ' SET group_id = NULL ' .
43
+ ' WHERE group_id='.$id;
44
+ $query_results = $wpdb->query($query);
45
+
46
+ $destroy = 'DELETE FROM ' . $this->table_name() . ' WHERE id=' . $id;
47
+ return $wpdb->query($destroy);
48
+ }
49
+
50
+ function getOne( $id )
51
+ {
52
+ global $wpdb, $prli_link, $prli_click;
53
+ $query = 'SELECT gr.*, (SELECT COUNT(*) FROM ' . $prli_link->table_name() . ' li WHERE li.group_id = gr.id) as link_count, (SELECT COUNT(*) FROM ' . $prli_click->table_name() . ' cl WHERE link_id IN (SELECT li2.id FROM ' . $prli_link->table_name() . ' li2 WHERE li2.group_id=gr.id)) as click_count FROM ' . $this->table_name() . ' gr WHERE id=' . $id . ';';
54
+ return $wpdb->get_row($query);
55
+ }
56
+
57
+ function getAll( $where = '', $order_by = '' )
58
+ {
59
+ global $wpdb, $prli_utils, $prli_link, $prli_click;
60
+ $query = 'SELECT gr.*, (SELECT COUNT(*) FROM ' . $prli_link->table_name() . ' li WHERE li.group_id = gr.id) as link_count, (SELECT COUNT(*) FROM ' . $prli_click->table_name() . ' cl WHERE link_id IN (SELECT li2.id FROM ' . $prli_link->table_name() . ' li2 WHERE li2.group_id=gr.id)) as click_count FROM ' . $this->table_name() . ' gr' . $prli_utils->prepend_and_or_where(' WHERE', $where) . $order_by;
61
+ return $wpdb->get_results($query);
62
+ }
63
+
64
+ // Pagination Methods
65
+ function getRecordCount($where="")
66
+ {
67
+ global $wpdb, $prli_utils;
68
+ $query = 'SELECT COUNT(*) FROM ' . $this->table_name() . $prli_utils->prepend_and_or_where(' WHERE', $where);
69
+ return $wpdb->get_var($query);
70
+ }
71
+
72
+ function getPageCount($p_size, $where="")
73
+ {
74
+ return ceil((int)$this->getRecordCount($where) / (int)$p_size);
75
+ }
76
+
77
+ function getPage($current_p,$p_size, $where = "", $order_by = '')
78
+ {
79
+ global $wpdb, $prli_link, $prli_utils, $prli_click;
80
+ $end_index = $current_p * $p_size;
81
+ $start_index = $end_index - $p_size;
82
+ $query = 'SELECT gr.*, (SELECT COUNT(*) FROM ' . $prli_link->table_name() . ' li WHERE li.group_id = gr.id) as link_count, (SELECT COUNT(*) FROM ' . $prli_click->table_name() . ' cl WHERE link_id IN (SELECT li2.id FROM ' . $prli_link->table_name() . ' li2 WHERE li2.group_id=gr.id)) as click_count FROM ' . $this->table_name() . ' gr' . $prli_utils->prepend_and_or_where(' WHERE', $where) . $order_by .' LIMIT ' . $start_index . ',' . $p_size;
83
+ $results = $wpdb->get_results($query);
84
+ return $results;
85
+ }
86
+
87
+ // Set defaults and grab get or post of each possible param
88
+ function get_params_array()
89
+ {
90
+ $values = array(
91
+ 'action' => (isset($_GET['action'])?$_GET['action']:(isset($_POST['action'])?$_POST['action']:'list')),
92
+ 'id' => (isset($_GET['id'])?$_GET['id']:(isset($_POST['id'])?$_POST['id']:'')),
93
+ 'paged' => (isset($_GET['paged'])?$_GET['paged']:(isset($_POST['paged'])?$_POST['paged']:1)),
94
+ 'group' => (isset($_GET['group'])?$_GET['group']:(isset($_POST['group'])?$_POST['group']:'')),
95
+ 'search' => (isset($_GET['search'])?$_GET['search']:(isset($_POST['search'])?$_POST['search']:'')),
96
+ 'sort' => (isset($_GET['sort'])?$_GET['sort']:(isset($_POST['sort'])?$_POST['sort']:'')),
97
+ 'sdir' => (isset($_GET['sdir'])?$_GET['sdir']:(isset($_POST['sdir'])?$_POST['sdir']:''))
98
+ );
99
+
100
+ return $values;
101
+ }
102
+
103
+ function validate( $values )
104
+ {
105
+ global $wpdb, $prli_utils;
106
+
107
+ $errors = array();
108
+ if( empty($values['name']) )
109
+ $errors[] = "Group must have a name.";
110
+
111
+ return $errors;
112
+ }
113
+ }
114
+ ?>
classes/models/PrliLink.php ADDED
@@ -0,0 +1,235 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ class PrliLink
3
+ {
4
+ function table_name()
5
+ {
6
+ global $wpdb;
7
+ return $wpdb->prefix . 'prli_links';
8
+ }
9
+
10
+ function create( $values )
11
+ {
12
+ global $wpdb;
13
+
14
+ $values['name'] = (!empty($values['name'])?$values['name']:$values['slug']);
15
+ $query = 'INSERT INTO ' . $this->table_name() .
16
+ ' (url,slug,name,param_forwarding,param_struct,redirect_type,description,gorder,track_me,nofollow,use_prettybar,use_ultra_cloak,track_as_img,group_id,created_at) VALUES (\'' .
17
+ $values['url'] . '\',\'' .
18
+ $values['slug'] . '\',\'' .
19
+ $values['name'] . '\',\'' .
20
+ $values['param_forwarding'] . '\',\'' .
21
+ $values['param_struct'] . '\',\'' .
22
+ $values['redirect_type'] . '\',\'' .
23
+ $values['description'] . '\',' .
24
+ $values['gorder'] . ',' .
25
+ (int)isset($values['track_me']) . ',' .
26
+ (int)isset($values['nofollow']) . ',' .
27
+ (int)isset($values['use_prettybar']) . ',' .
28
+ (int)isset($values['use_ultra_cloak']) . ',' .
29
+ (int)isset($values['track_as_img']) . ',' .
30
+ (isset($values['group_id'])?(int)$values['group_id']:'NULL') . ',' .
31
+ 'NOW())';
32
+ $query_results = $wpdb->query($query);
33
+ return $query_results;
34
+ }
35
+
36
+ function update( $id, $values )
37
+ {
38
+ global $wpdb;
39
+
40
+ $values['name'] = (!empty($values['name'])?$values['name']:$values['slug']);
41
+ $query = 'UPDATE ' . $this->table_name() .
42
+ ' SET url=\'' . $values['url'] . '\', ' .
43
+ ' slug=\'' . $values['slug'] . '\', ' .
44
+ ' name=\'' . $values['name'] . '\', ' .
45
+ ' param_forwarding=\'' . $values['param_forwarding'] . '\', ' .
46
+ ' param_struct=\'' . $values['param_struct'] . '\', ' .
47
+ ' redirect_type=\'' . $values['redirect_type'] . '\', ' .
48
+ ' description=\'' . $values['description'] . '\', ' .
49
+ ' gorder=' . $values['gorder'] . ', ' .
50
+ ' track_me=' . (int)isset($values['track_me']) . ',' .
51
+ ' nofollow=' . (int)isset($values['nofollow']) . ',' .
52
+ ' use_prettybar=' . (int)isset($values['use_prettybar']) . ',' .
53
+ ' use_ultra_cloak=' . (int)isset($values['use_ultra_cloak']) . ',' .
54
+ ' track_as_img=' . (int)isset($values['track_as_img']) . ',' .
55
+ ' group_id=' . (isset($values['group_id'])?(int)$values['group_id']:'NULL') .
56
+ ' WHERE id='.$id;
57
+ $query_results = $wpdb->query($query);
58
+ return $query_results;
59
+ }
60
+
61
+ function update_group( $id, $value, $group_id )
62
+ {
63
+ global $wpdb;
64
+ $query = 'UPDATE ' . $this->table_name() .
65
+ ' SET group_id=' . (isset($value)?$group_id:'NULL') .
66
+ ' WHERE id='.$id;
67
+ $query_results = $wpdb->query($query);
68
+ return $query_results;
69
+ }
70
+
71
+ function destroy( $id )
72
+ {
73
+ require_once(PRLI_MODELS_PATH.'/models.inc.php');
74
+ global $wpdb, $prli_click;
75
+
76
+ $reset = 'DELETE FROM ' . $prli_click->table_name() . ' WHERE link_id=' . $id;
77
+ $destroy = 'DELETE FROM ' . $this->table_name() . ' WHERE id=' . $id;
78
+
79
+ $wpdb->query($reset);
80
+ return $wpdb->query($destroy);
81
+ }
82
+
83
+ function reset( $id )
84
+ {
85
+ require_once(PRLI_MODELS_PATH.'/models.inc.php');
86
+ global $wpdb, $prli_click;
87
+
88
+ $reset = 'DELETE FROM ' . $prli_click->table_name() . ' WHERE link_id=' . $id;
89
+ return $wpdb->query($reset);
90
+ }
91
+
92
+ function getOneFromSlug( $slug )
93
+ {
94
+ global $wpdb;
95
+ $query = 'SELECT * FROM ' . $this->table_name() . ' WHERE slug=\'' . $slug . '\'';
96
+ return $wpdb->get_row($query);
97
+ }
98
+
99
+ function getOne( $id )
100
+ {
101
+ global $wpdb, $prli_click;
102
+ $query = 'SELECT li.*, (SELECT COUNT(*) FROM ' . $prli_click->table_name() . ' cl WHERE cl.link_id = li.id' . $prli_click->get_exclude_where_clause( ' AND' ) . ') as clicks FROM ' . $this->table_name() . ' li WHERE id=' . $id;
103
+ return $wpdb->get_row($query);
104
+ }
105
+
106
+ function getAll($where = '', $order_by = '')
107
+ {
108
+ global $wpdb, $prli_click, $prli_group, $prli_utils;
109
+ $query = 'SELECT li.*, (SELECT COUNT(*) FROM ' . $prli_click->table_name() . ' cl WHERE cl.link_id = li.id' . $prli_click->get_exclude_where_clause( ' AND' ) . ') as clicks, gr.name as group_name FROM '. $this->table_name() . ' li LEFT OUTER JOIN ' . $prli_group->table_name() . ' gr ON li.group_id=gr.id' . $prli_utils->prepend_and_or_where(' WHERE', $where) . $order_by;
110
+ return $wpdb->get_results($query);
111
+ }
112
+
113
+ // Pagination Methods
114
+ function getRecordCount($where="")
115
+ {
116
+ global $wpdb, $prli_utils;
117
+ $query = 'SELECT COUNT(*) FROM ' . $this->table_name() . $prli_utils->prepend_and_or_where(' WHERE', $where);
118
+ return $wpdb->get_var($query);
119
+ }
120
+
121
+ function getPageCount($p_size, $where="")
122
+ {
123
+ return ceil((int)$this->getRecordCount($where) / (int)$p_size);
124
+ }
125
+
126
+ function getPage($current_p,$p_size, $where = "", $order_by = '')
127
+ {
128
+ global $wpdb, $prli_click, $prli_utils, $prli_group;
129
+ $end_index = $current_p * $p_size;
130
+ $start_index = $end_index - $p_size;
131
+ $query = 'SELECT li.*, (SELECT COUNT(*) FROM ' . $prli_click->table_name() . ' cl WHERE cl.link_id = li.id' . $prli_click->get_exclude_where_clause( ' AND' ) . ') as clicks, gr.name as group_name FROM ' . $this->table_name() . ' li LEFT OUTER JOIN ' . $prli_group->table_name() . ' gr ON li.group_id=gr.id' . $prli_utils->prepend_and_or_where(' WHERE', $where) . $order_by .' LIMIT ' . $start_index . ',' . $p_size . ';';
132
+ $results = $wpdb->get_results($query);
133
+ return $results;
134
+ }
135
+
136
+ /** I'm generating a slug that is by default 2-3 characters long.
137
+ * This gives us a possibility of 36^3 - 37 = 46,619 possible
138
+ * random slugs. That should be *more* than enough slugs for
139
+ * any website -- if I get any feedback that we need more then
140
+ * I can always make a config option to raise the # of chars.
141
+ */
142
+ function generateValidSlug($num_chars = 3)
143
+ {
144
+ global $wpdb, $prli_utils;
145
+
146
+ // We're doing a base 36 hash which is why we're always doing everything by 36
147
+ $max_slug_value = pow(36,$num_chars);
148
+ $min_slug_value = 37; // we want to have at least 2 characters in the slug
149
+ $slug = base_convert( rand($min_slug_value,$max_slug_value), 10, 36 );
150
+
151
+ $query = "SELECT slug FROM " . $this->table_name(); // . " WHERE slug='" . $slug . "'";
152
+ $slugs = $wpdb->get_col($query,0);
153
+
154
+ // It is highly unlikely that we'll ever see 2 identical random slugs
155
+ // but just in case, here's some code to prevent collisions
156
+ while( in_array($slug,$slugs) or !$prli_utils->slugIsAvailable($slug) )
157
+ $slug = base_convert( rand($min_slug_value,$max_slug_value), 10, 36 );
158
+
159
+ return $slug;
160
+ }
161
+
162
+ function get_pretty_link_url($slug)
163
+ {
164
+ global $prli_blogurl;
165
+
166
+ $link = $this->getOneFromSlug($slug);
167
+
168
+ if((isset($link->param_forwarding) and $link->param_forwarding == 'custom') and
169
+ (isset($link->track_as_img) and $link->track_as_img == 1))
170
+ return "&lt;img src=\"".$prli_blogurl . '/' . $link->slug . $link->param_struct . "\" width=\"1\" height=\"1\" style=\"display: none\" /&gt;";
171
+ else if((!isset($link->param_forwarding) or $link->param_forwarding != 'custom') and
172
+ (isset($link->track_as_img) and $link->track_as_img == 1))
173
+ return "&lt;img src=\"".$prli_blogurl . '/' . $link->slug . "\" width=\"1\" height=\"1\" style=\"display: none\" /&gt;";
174
+ else if((isset($link->param_forwarding) and $link->param_forwarding == 'custom') and
175
+ (!isset($link->track_as_img) or $link->track_as_img == 0))
176
+ return $prli_blogurl . '/' . $link->slug . $link->param_struct;
177
+ else
178
+ return $prli_blogurl . '/' . $link->slug;
179
+ }
180
+
181
+ // Set defaults and grab get or post of each possible param
182
+ function get_params_array()
183
+ {
184
+ $values = array(
185
+ 'action' => (isset($_GET['action'])?$_GET['action']:(isset($_POST['action'])?$_POST['action']:'list')),
186
+ 'regenerate' => (isset($_GET['regenerate'])?$_GET['regenerate']:(isset($_POST['regenerate'])?$_POST['regenerate']:'false')),
187
+ 'id' => (isset($_GET['id'])?$_GET['id']:(isset($_POST['id'])?$_POST['id']:'')),
188
+ 'group_name' => (isset($_GET['group_name'])?$_GET['group_name']:(isset($_POST['group_name'])?$_POST['group_name']:'')),
189
+ 'paged' => (isset($_GET['paged'])?$_GET['paged']:(isset($_POST['paged'])?$_POST['paged']:1)),
190
+ 'group' => (isset($_GET['group'])?$_GET['group']:(isset($_POST['group'])?$_POST['group']:'')),
191
+ 'search' => (isset($_GET['search'])?$_GET['search']:(isset($_POST['search'])?$_POST['search']:'')),
192
+ 'sort' => (isset($_GET['sort'])?$_GET['sort']:(isset($_POST['sort'])?$_POST['sort']:'')),
193
+ 'sdir' => (isset($_GET['sdir'])?$_GET['sdir']:(isset($_POST['sdir'])?$_POST['sdir']:''))
194
+ );
195
+
196
+ return $values;
197
+ }
198
+
199
+ function validate( $values )
200
+ {
201
+ global $wpdb, $prli_utils;
202
+
203
+ $errors = array();
204
+ if( ( $values['url'] == null or $values['url'] == '') and $values['track_as_img'] != 'on' )
205
+ $errors[] = "Target URL can't be blank -- unless this Pretty Link is being used as a tracking pixel (see Advanced Options on this page)";
206
+
207
+ if( $values['slug'] == null or $values['slug'] == '' )
208
+ $errors[] = "Pretty Link can't be blank";
209
+
210
+ if( !empty($values['url']) and !preg_match('/^http.?:\/\/.*\..*$/', $values['url'] ) )
211
+ $errors[] = "Link URL must be a correctly formatted url";
212
+
213
+ if( !preg_match('/^[a-zA-Z0-9\.\-_]+$/', $values['slug'] ) )
214
+ $errors[] = "Pretty Link must not contain spaces or special characters";
215
+
216
+ if($values['id'] != null and $values['id'] != '')
217
+ $query = "SELECT slug FROM " . $this->table_name() . " WHERE slug='" . $values['slug'] . "' AND id <> " . $values['id'];
218
+ else
219
+ $query = "SELECT slug FROM " . $this->table_name() . " WHERE slug='" . $values['slug'] . "'";
220
+
221
+ $slug_already_exists = $wpdb->get_var($query);
222
+
223
+ if( $slug_already_exists or !$prli_utils->slugIsAvailable($values['slug']) )
224
+ $errors[] = "This pretty link slug is already taken, please choose a different one";
225
+
226
+ if( isset($values['param_forwarding']) and $values['param_forwarding'] == 'custom' and empty($values['param_struct']) )
227
+ $errors[] = "If Custom Parameter Forwarding has been selected then you must specify a forwarding format.";
228
+
229
+ if( isset($values['param_forwarding']) and $values['param_forwarding'] == 'custom' and !preg_match('#%.*?%#', $values['param_struct']) )
230
+ $errors[] = "Your parameter forwarding must have at least one parameter specified in the format ex: <code>/%var1%/%var_two%/%varname3% ...</code>";
231
+
232
+ return $errors;
233
+ }
234
+ }
235
+ ?>
classes/models/PrliUtils.php ADDED
@@ -0,0 +1,409 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ require_once 'models.inc.php';
3
+
4
+ class PrliUtils
5
+ {
6
+
7
+ /** Okay I realize that Percentagize isn't really a word but
8
+ * this is so that the values we have will work with google
9
+ * charts.
10
+ */
11
+ function percentagizeArray($data,$max_value)
12
+ {
13
+ $new_data = array();
14
+ foreach($data as $point)
15
+ {
16
+ if( $max_value > 0 )
17
+ {
18
+ $new_data[] = $point / $max_value * 100;
19
+ }
20
+ else
21
+ {
22
+ $new_data[] = 0;
23
+ }
24
+ }
25
+ return $new_data;
26
+ }
27
+
28
+ function getTopValue($values_array)
29
+ {
30
+ rsort($values_array);
31
+ return $values_array[0];
32
+ }
33
+
34
+ function getFirstClickDate()
35
+ {
36
+ global $wpdb;
37
+
38
+ $clicks_table = $wpdb->prefix . "prli_clicks";
39
+ $query = "SELECT created_at FROM $clicks_table ORDER BY created_at LIMIT 1";
40
+ $first_click = $wpdb->get_var($query);
41
+
42
+ if(isset($first_click))
43
+ {
44
+ return strtotime($first_click);
45
+ }
46
+ else
47
+ return null;
48
+ }
49
+
50
+ function getMonthsArray()
51
+ {
52
+ global $wpdb;
53
+ global $prli_click;
54
+
55
+ $months = array();
56
+ $year = date("Y");
57
+ $month = date("m");
58
+ $current_timestamp = time();
59
+ $current_month_timestamp = mktime(0, 0, 0, date("m", $current_timestamp), 1, date("Y", $current_timestamp));
60
+
61
+ $clicks_table = $prli_click->tableName();
62
+ $first_click = $wpdb->get_var("SELECT created_at FROM $clicks_table ORDER BY created_at LIMIT 1;");
63
+ $first_timestamp = ((empty($first_click))?$current_timestamp:strtotime($first_click));
64
+ $first_date = mktime(0, 0, 0, date("m", $first_timestamp), 1, date("Y", $first_timestamp));
65
+
66
+ while($current_month_timestamp >= $first_date)
67
+ {
68
+ $months[] = $current_month_timestamp;
69
+ if(date("m") == 1)
70
+ {
71
+ $current_month_timestamp = mktime(0, 0, 0, 12, 1, date("Y", $current_month_timestamp)-1);
72
+ }
73
+ else
74
+ {
75
+ $current_month_timestamp = mktime(0, 0, 0, date("m", $current_month_timestamp)-1, 1, date("Y", $current_month_timestamp));
76
+ }
77
+ }
78
+ return $months;
79
+ }
80
+
81
+ // For Pagination
82
+ function getLastRecordNum($r_count,$current_p,$p_size)
83
+ {
84
+ return (($r_count < ($current_p * $p_size))?$r_count:($current_p * $p_size));
85
+ }
86
+
87
+ // For Pagination
88
+ function getFirstRecordNum($r_count,$current_p,$p_size)
89
+ {
90
+ if($current_p == 1)
91
+ {
92
+ return 1;
93
+ }
94
+ else
95
+ {
96
+ return ($this->getLastRecordNum($r_count,($current_p - 1),$p_size) + 1);
97
+ }
98
+ }
99
+
100
+ function slugIsAvailable($slug)
101
+ {
102
+ global $wpdb;
103
+
104
+ $posts_table = $wpdb->prefix . "posts";
105
+ $terms_table = $wpdb->prefix . "terms";
106
+
107
+ $post_slug = $wpdb->get_var("SELECT post_name FROM $posts_table WHERE post_name='$slug'");
108
+ $term_slug = $wpdb->get_col("SELECT slug FROM $terms_table WHERE slug='$slug'");
109
+
110
+ return ( $post_slug != $slug and $term_slug != $slug );
111
+ }
112
+
113
+ /* Needed because we don't know if the target uesr will have a browsercap file installed
114
+ on their server ... particularly in a shared hosting environment this is difficult
115
+ */
116
+ function php_get_browser($agent = NULL)
117
+ {
118
+ $agent=$agent?$agent:$_SERVER['HTTP_USER_AGENT'];
119
+ $yu=array();
120
+ $q_s=array("#\.#","#\*#","#\?#");
121
+ $q_r=array("\.",".*",".?");
122
+ $brows=parse_ini_file(PRLI_PATH."/includes/php/php_browsecap.ini",true);
123
+ foreach($brows as $k=>$t)
124
+ {
125
+ if(fnmatch($k,$agent))
126
+ {
127
+ $yu['browser_name_pattern']=$k;
128
+ $pat=preg_replace($q_s,$q_r,$k);
129
+ $yu['browser_name_regex']=strtolower("^$pat$");
130
+ foreach($brows as $g=>$r)
131
+ {
132
+ if($t['Parent']==$g)
133
+ {
134
+ foreach($brows as $a=>$b)
135
+ {
136
+ if($r['Parent']==$a)
137
+ {
138
+ $yu=array_merge($yu,$b,$r,$t);
139
+ foreach($yu as $d=>$z)
140
+ {
141
+ $l=strtolower($d);
142
+ $hu[$l]=$z;
143
+ }
144
+ }
145
+ }
146
+ }
147
+ }
148
+
149
+ break;
150
+ }
151
+ }
152
+
153
+ return $hu;
154
+ }
155
+
156
+ // This is where the magic happens!
157
+ function track_link($slug,$values)
158
+ {
159
+ global $wpdb, $prli_click, $prli_link;
160
+
161
+ $query = "SELECT * FROM ".$prli_link->table_name()." WHERE slug='$slug' LIMIT 1";
162
+ $pretty_link = $wpdb->get_row($query);
163
+
164
+ if(isset($pretty_link->track_me) and $pretty_link->track_me)
165
+ {
166
+ $first_click = false;
167
+
168
+ $click_ip = $_SERVER['REMOTE_ADDR'];
169
+ $click_referer = $_SERVER['HTTP_REFERER'];
170
+ $click_host = gethostbyaddr($click_ip);
171
+
172
+ $click_uri = $_SERVER['REQUEST_URI'];
173
+ $click_user_agent = $_SERVER['HTTP_USER_AGENT'];
174
+ $click_browser = $this->php_get_browser();
175
+
176
+ //Set Cookie if it doesn't exist
177
+ $cookie_name = 'prli_click_' . $pretty_link->id;
178
+ //Used for unique click tracking
179
+ $cookie_expire_time = time()+60*60*24*30; // Expire in 30 days
180
+
181
+ $visitor_cookie = 'prli_visitor';
182
+ //Used for visitor activity
183
+ $visitor_cookie_expire_time = time()+60*60*24*365; // Expire in 1 year
184
+
185
+
186
+ if($_COOKIE[$cookie_name] == null)
187
+ {
188
+ setcookie($cookie_name,$slug,$cookie_expire_time);
189
+ $first_click = true;
190
+ }
191
+
192
+ // Retrieve / Generate visitor id
193
+ if($_COOKIE[$visitor_cookie] == null)
194
+ {
195
+ $visitor_uid = $prli_click->generateUniqueVisitorId();
196
+ setcookie($visitor_cookie,$visitor_uid,$visitor_cookie_expire_time);
197
+ }
198
+ else
199
+ $visitor_uid = $_COOKIE[$visitor_cookie];
200
+
201
+ //Record Click in DB
202
+ $insert = "INSERT INTO ".$prli_click->table_name()." (link_id,vuid,ip,browser,btype,bversion,os,referer,uri,host,first_click,created_at) VALUES ($pretty_link->id,'$visitor_uid','$click_ip','$click_user_agent','".$click_browser['browser']."','".$click_browser['version']."','".$click_browser['platform']."','$click_referer','$click_uri','$click_host','$first_click',NOW())";
203
+
204
+ $results = $wpdb->query( $insert );
205
+
206
+ }
207
+
208
+ // Reformat Parameters
209
+ $param_string = '';
210
+
211
+ if(isset($pretty_link->param_forwarding) and $pretty_link->param_forwarding and isset($values) and count($values) > 1)
212
+ {
213
+ $first_param = true;
214
+ foreach($values as $key => $value)
215
+ {
216
+ if($first_param)
217
+ {
218
+ $param_string = (preg_match("#\?#", $pretty_link->url)?"&":"?");
219
+ $first_param = false;
220
+ }
221
+ else
222
+ $param_string .= "&";
223
+
224
+ $param_string .= "$key=$value";
225
+ }
226
+ }
227
+
228
+ //Redirect to Product URL
229
+ if(!isset($pretty_link->track_as_img) or $pretty_link->track_as_img == 0)
230
+ {
231
+ if(isset($pretty_link->nofollow) and $pretty_link->nofollow)
232
+ header('X-Robots-Tag: noindex, nofollow');
233
+
234
+ // If we're using the pretty bar then don't redirect -- load the pretty bar view
235
+ if( isset($pretty_link->use_prettybar) and $pretty_link->use_prettybar )
236
+ {
237
+ global $prli_blogurl;
238
+ require_once PRLI_VIEWS_PATH . '/prli-links/bar.php';
239
+ }
240
+ else if( isset($pretty_link->use_ultra_cloak) and $pretty_link->use_ultra_cloak )
241
+ require_once PRLI_VIEWS_PATH . '/prli-links/ultra-cloak.php';
242
+ else
243
+ wp_redirect($pretty_link->url.$param_string, (int)$pretty_link->redirect_type);
244
+ }
245
+ }
246
+
247
+ function get_custom_forwarding_rule($param_struct)
248
+ {
249
+ $param_struct = preg_replace('#%.*?%#','(.*?)',$param_struct);
250
+ return preg_replace('#\(\.\*\?\)$#','(.*)',$param_struct); // replace the last one with a greedy operator
251
+ }
252
+
253
+ function get_custom_forwarding_params($param_struct, $start_index = 1)
254
+ {
255
+ preg_match_all('#%(.*?)%#', $param_struct, $matches);
256
+
257
+ $param_string = '';
258
+ $match_index = $start_index;
259
+ for($i = 0; $i < count($matches[1]); $i++)
260
+ {
261
+ if($i == 0 and $start_index == 1)
262
+ $param_string .= "?";
263
+ else
264
+ $param_string .= "&";
265
+
266
+ $param_string .= $matches[1][$i] . "=$$match_index";
267
+ $match_index++;
268
+ }
269
+
270
+ return $param_string;
271
+ }
272
+
273
+ function decode_custom_param_str($param_struct, $uri_string)
274
+ {
275
+ // Get the structure matches (param names)
276
+ preg_match_all('#%(.*?)%#', $param_struct, $struct_matches);
277
+
278
+ // Get the uri matches (param values)
279
+ $match_str = '#'.$this->get_custom_forwarding_rule($param_struct).'#';
280
+ preg_match($match_str, $uri_string, $uri_matches);
281
+
282
+ $param_array = array();
283
+ for($i = 0; $i < count($struct_matches[1]); $i++)
284
+ $param_array[$struct_matches[1][$i]] = $uri_matches[$i+1];
285
+
286
+ return $param_array;
287
+ }
288
+
289
+ // Detects whether an array is a true numerical array or an
290
+ // associative array (or hash).
291
+ function prli_array_type($item)
292
+ {
293
+ $array_type = 'unknown';
294
+
295
+ if(is_array($item))
296
+ {
297
+ $array_type = 'array';
298
+
299
+ foreach($item as $key => $value)
300
+ {
301
+ if(!is_numeric($key))
302
+ {
303
+ $array_type = 'hash';
304
+ break;
305
+ }
306
+ }
307
+ }
308
+
309
+ return $array_type;
310
+ }
311
+
312
+ // This eliminates the need to use php's built in json_encoder
313
+ // which only works with PHP 5.2 and above.
314
+ function prli_json_encode($json_array)
315
+ {
316
+ $json_str = '';
317
+
318
+ if(is_array($json_array))
319
+ {
320
+ if($this->prli_array_type($json_array) == 'array')
321
+ {
322
+ $first = true;
323
+ $json_str .= "[";
324
+ foreach($json_array as $item)
325
+ {
326
+ if(!$first)
327
+ $json_str .= ",";
328
+
329
+ if(is_numeric($item))
330
+ $json_str .= (($item < 0)?"\"$item\"":$item);
331
+ else if(is_array($item))
332
+ $json_str .= $this->prli_json_encode($item);
333
+ else if(is_string($item))
334
+ $json_str .= '"'.$item.'"';
335
+ else if(is_bool($item))
336
+ $json_str .= (($item)?"true":"false");
337
+
338
+ $first = false;
339
+ }
340
+ $json_str .= "]";
341
+ }
342
+ else if($this->prli_array_type($json_array) == 'hash')
343
+ {
344
+ $first = true;
345
+ $json_str .= "{";
346
+ foreach($json_array as $key => $item)
347
+ {
348
+ if(!$first)
349
+ $json_str .= ",";
350
+
351
+ $json_str .= "\"$key\":";
352
+
353
+ if(is_numeric($item))
354
+ $json_str .= (($item < 0)?"\"$item\"":$item);
355
+ else if(is_array($item))
356
+ $json_str .= $this->prli_json_encode($item);
357
+ else if(is_string($item))
358
+ $json_str .= "\"$item\"";
359
+ else if(is_bool($item))
360
+ $json_str .= (($item)?"true":"false");
361
+
362
+ $first = false;
363
+ }
364
+ $json_str .= "}";
365
+ }
366
+ }
367
+
368
+ return $json_str;
369
+ }
370
+
371
+ // Get the timestamp of the start date
372
+ function get_start_date($values,$min_date = '')
373
+ {
374
+ // set default to 30 days ago
375
+ if(empty($min_date))
376
+ $min_date = 30;
377
+
378
+ if(!empty($values['sdate']))
379
+ {
380
+ $sdate = explode("-",$values['sdate']);
381
+ $start_timestamp = mktime(0,0,0,$sdate[1],$sdate[2],$sdate[0]);
382
+ }
383
+ else
384
+ $start_timestamp = time()-60*60*24*(int)$min_date;
385
+
386
+ return $start_timestamp;
387
+ }
388
+
389
+ // Get the timestamp of the end date
390
+ function get_end_date($values)
391
+ {
392
+ if(!empty($values['edate']))
393
+ {
394
+ $edate = explode("-",$values['edate']);
395
+ $end_timestamp = mktime(0,0,0,$edate[1],$edate[2],$edate[0]);
396
+ }
397
+ else
398
+ $end_timestamp = time();
399
+
400
+ return $end_timestamp;
401
+ }
402
+
403
+ function prepend_and_or_where( $starts_with = ' WHERE', $where = '' )
404
+ {
405
+ return (( $where == '' )?'':$starts_with . $where);
406
+ }
407
+
408
+ }
409
+ ?>
classes/models/models.inc.php ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ require_once(PRLI_MODELS_PATH.'/PrliLink.php');
3
+ require_once(PRLI_MODELS_PATH.'/PrliClick.php');
4
+ require_once(PRLI_MODELS_PATH.'/PrliGroup.php');
5
+ require_once(PRLI_MODELS_PATH.'/PrliUtils.php');
6
+
7
+ $prli_link = new PrliLink();
8
+ $prli_click = new PrliClick();
9
+ $prli_group = new PrliGroup();
10
+ $prli_utils = new PrliUtils();
11
+ ?>
classes/views/prli-clicks/csv.php ADDED
@@ -0,0 +1,24 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ require_once('prli-config.php');
3
+
4
+ if(is_user_logged_in() and $current_user->user_level >= 8)
5
+ {
6
+ $filename = date("ymdHis",time()) . '_' . $link_name . '_pretty_link_clicks.csv';
7
+ header("Content-Type: text/x-csv");
8
+ header("Content-Disposition: attachment; filename=\"$filename\"");
9
+ header("Expires: ".gmdate("D, d M Y H:i:s", mktime(date("H")+2, date("i"), date("s"), date("m"), date("d"), date("Y")))." GMT");
10
+ header("Last-Modified: ".gmdate("D, d M Y H:i:s")." GMT");
11
+ header("Cache-Control: no-cache, must-revalidate");
12
+ header("Pragma: no-cache");
13
+
14
+ echo '"Browser","Browser Version","Platform","IP","Visitor ID","Timestamp","Host","URI","Referrer","Link"' . "\n";
15
+ foreach($clicks as $click)
16
+ {
17
+ $link = $prli_link->getOne($click->link_id);
18
+
19
+ echo "\"$click->btype\",\"$click->bversion\",\"$click->os\",\"$click->ip\",\"$click->vuid\",\"$click->created_at\",\"$click->host\",\"$click->uri\",\"$click->referer\",\"" . ((empty($link->name))?$link->slug:$link->name) . "\"\n";
20
+ }
21
+ }
22
+ else
23
+ header("Location: " . $prli_blogurl);
24
+ ?>
classes/views/prli-clicks/head.php ADDED
@@ -0,0 +1,105 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!-- JQuery UI Includes -->
2
+ <link type="text/css" href="<?php echo $prli_siteurl; ?>/wp-content/plugins/<?php echo PRLI_PLUGIN_NAME; ?>/includes/jquery/css/ui-lightness/jquery-ui-1.7.1.custom.css" rel="stylesheet" />
3
+ <script type="text/javascript" src="<?php echo $prli_siteurl; ?>/wp-content/plugins/<?php echo PRLI_PLUGIN_NAME; ?>/includes/jquery/js/jquery-1.3.2.min.js"></script>
4
+ <script type="text/javascript" src="<?php echo $prli_siteurl; ?>/wp-content/plugins/<?php echo PRLI_PLUGIN_NAME; ?>/includes/jquery/js/jquery-ui-1.7.1.custom.min.js"></script>
5
+
6
+ <script type="text/javascript">
7
+ $(document).ready(function(){
8
+ $("#sdate").datepicker({ dateFormat: 'yy-mm-dd', defaultDate: -30, minDate: -<?php echo $min_date; ?>, maxDate: 0 });
9
+ $("#edate").datepicker({ dateFormat: 'yy-mm-dd', minDate: -<?php echo $min_date; ?>, maxDate: 0 });
10
+ });
11
+ </script>
12
+
13
+ <script type="text/javascript">
14
+ $(document).ready(function(){
15
+ $(".filter_pane").hide();
16
+ $(".filter_toggle").click( function () {
17
+ $(".filter_pane").slideToggle("slow");
18
+ });
19
+ });
20
+ </script>
21
+
22
+ <style type="text/css">
23
+ .filter_toggle {
24
+ line-height: 34px;
25
+ font-size: 14px;
26
+ font-weight: bold;
27
+ padding-bottom: 10px;
28
+ }
29
+
30
+ .filter_pane {
31
+ background-color: white;
32
+ border: 2px solid #777777;
33
+ height: 275px;
34
+ width: 600px;
35
+ padding-left: 20px;
36
+ padding-top: 10px;
37
+ }
38
+
39
+ </style>
40
+
41
+ <!-- Open Flash Chart Includes -->
42
+ <script type="text/javascript" src="<?php echo $prli_siteurl; ?>/wp-content/plugins/<?php echo PRLI_PLUGIN_NAME; ?>/includes/version-2-ichor/js/json/json2.js"></script>
43
+ <script type="text/javascript" src="<?php echo $prli_siteurl; ?>/wp-content/plugins/<?php echo PRLI_PLUGIN_NAME; ?>/includes/version-2-ichor/js/swfobject.js"></script>
44
+ <script type="text/javascript">
45
+ swfobject.embedSWF("<?php echo $prli_siteurl; ?>/wp-content/plugins/<?php echo PRLI_PLUGIN_NAME; ?>/includes/version-2-ichor/open-flash-chart.swf", "my_chart", "100%", "250", "9.0.0");
46
+ </script>
47
+
48
+ <script type="text/javascript">
49
+
50
+ function ofc_ready()
51
+ {
52
+ //alert('ofc_ready');
53
+ }
54
+
55
+ function open_flash_chart_data()
56
+ {
57
+ //alert( 'reading data' );
58
+ return JSON.stringify(data);
59
+ }
60
+
61
+ function findSWF(movieName) {
62
+ if (navigator.appName.indexOf("Microsoft")!= -1) {
63
+ return window[movieName];
64
+ } else {
65
+ return document[movieName];
66
+ }
67
+ }
68
+
69
+ OFC = {};
70
+
71
+ OFC.jquery = {
72
+ name: "jQuery",
73
+ version: function(src) { return $('#'+ src)[0].get_version() },
74
+ rasterize: function (src, dst) { $('#'+ dst).replaceWith(OFC.jquery.image(src)) },
75
+ image: function(src) { return "<img src='data:image/png;base64," + $('#'+src)[0].get_img_binary() + "' />"},
76
+ popup: function(src) {
77
+ var img_win = window.open('', 'Charts: Export as Image')
78
+ with(img_win.document) {
79
+ write('<html><head><title>Charts: Export as Image<\/title><\/head><body>' + OFC.jquery.image(src) + '<div>Right-Click on the above Image to Save<\/div><\/body><\/html>') }
80
+ // stop the 'loading...' message
81
+ img_win.document.close();
82
+ }
83
+ }
84
+
85
+ // Using an object as namespaces is JS Best Practice. I like the Control.XXX style.
86
+ //if (!Control) {var Control = {}}
87
+ //if (typeof(Control == "undefined")) {var Control = {}}
88
+ if (typeof(Control == "undefined")) {var Control = {OFC: OFC.jquery}}
89
+
90
+
91
+ // By default, right-clicking on OFC and choosing "save image locally" calls this function.
92
+ // You are free to change the code in OFC and call my wrapper (Control.OFC.your_favorite_save_method)
93
+ // function save_image() { alert(1); Control.OFC.popup('my_chart') }
94
+ function save_image() {
95
+ //alert(1);
96
+ OFC.jquery.popup('my_chart')
97
+ }
98
+
99
+ function moo() {
100
+ //alert(99);
101
+ };
102
+
103
+ var data = <?php echo $prli_click->setupClickLineGraph($start_timestamp,$end_timestamp,$link_id,$type,$group); ?>;
104
+
105
+ </script>
classes/views/prli-clicks/list.php ADDED
@@ -0,0 +1,149 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <div class="wrap">
2
+ <p style="font-size: 14px; font-weight: bold; float: right; padding-top: 25px;"><a href="http://blairwilliams.com/faq" target="_blank">Get Help</a>&nbsp;|&nbsp;<a href="http://blairwilliams.com/blog" target="_blank">Blog</a>&nbsp;|&nbsp;<a href="http://blairwilliams.com/don" target="_blank">Donate</a></p>
3
+ <h2><img src="<?php echo PRLI_URL.'/images/pretty-link-med.png'; ?>"/>&nbsp;Pretty Link: Hits</h2>
4
+ <span style="font-size: 14px; font-weight: bold;">For <?php echo $link_name; ?>: </span>
5
+ <?php
6
+ // Don't show this sheesh if we're displaying the vuid or ip grouping
7
+ if(empty($params['ip']) and empty($params['vuid']))
8
+ {
9
+ ?>
10
+ <a href="#" style="display:inline;" class="filter_toggle">Customize Report</a>
11
+ <?php
12
+ }
13
+ ?>
14
+ <?php
15
+ if(!empty($params['l']) and $params['l'] != 'all')
16
+ echo '<br/><a href="?page='. PRLI_PLUGIN_NAME .'/prli-links.php">&laquo Back to Links</a>';
17
+ else if(!empty($params['ip']) or !empty($params['vuid']))
18
+ echo '<br/><a href="?page='. PRLI_PLUGIN_NAME .'/prli-clicks.php">&laquo Back to Hits</a>';
19
+
20
+ if(empty($params['ip']) and empty($params['vuid']))
21
+ {
22
+ ?>
23
+
24
+
25
+ <div class="filter_pane">
26
+ <form class="form-fields" name="form2" method="post" action="<?php echo str_replace( '%7E', '~', $_SERVER['REQUEST_URI']); ?>">
27
+ <?php wp_nonce_field('prli-reports'); ?>
28
+ <span>Type:</span>&nbsp;
29
+ <select id="type" name="type" style="display: inline;">
30
+ <option value="all"<?php print ((empty($params['type']) or $params['type'] == "all")?" selected=\"true\"":""); ?>>All Hits&nbsp;</option>
31
+ <option value="unique"<?php print (($params['type'] == "unique")?" selected=\"true\"":""); ?>>Unique Hits&nbsp;</option>
32
+ </select>
33
+ <br/>
34
+ <br/>
35
+ <span>Date Range:</span>
36
+ <div id="dateselectors" style="display: inline;">
37
+ <input type="text" name="sdate" id="sdate" value="<?php echo $params['sdate']; ?>" style="display:inline;"/>&nbsp;to&nbsp;<input type="text" name="edate" id="edate" value="<?php echo $params['edate']; ?>" style="display:inline;"/>
38
+ </div>
39
+ <br/>
40
+ <br/>
41
+ <div class="submit" style="display: inline;"><input type="submit" name="Submit" value="Customize"/> or <a href="#" class="filter_toggle">Cancel</a></div>
42
+ </form>
43
+ </div>
44
+
45
+ <div id="my_chart"></div>
46
+
47
+ <?php
48
+ }
49
+ $navstyle = "float: right;";
50
+ require(PRLI_VIEWS_PATH.'/shared/table-nav.php');
51
+ ?>
52
+
53
+ <div id="search_pane" style="padding-top: 5px;">
54
+ <form class="form-fields" name="click_form" method="post" action="<?php echo str_replace( '%7E', '~', $_SERVER['REQUEST_URI']); ?>">
55
+ <?php wp_nonce_field('prli-clicks'); ?>
56
+
57
+ <input type="hidden" name="sort" id="sort" value="<?php echo $sort_str; ?>" />
58
+ <input type="hidden" name="sdir" id="sort" value="<?php echo $sdir_str; ?>" />
59
+ <input type="text" name="search" id="search" value="<?php echo $search_str; ?>" style="display:inline;"/>
60
+ <div class="submit" style="display: inline;"><input type="submit" name="Submit" value="Search Hits"/>
61
+ <?php
62
+ if(!empty($search_str))
63
+ {
64
+ ?>
65
+ or <a href="?page=<?php echo PRLI_PLUGIN_NAME; ?>/prli-clicks.php<?php echo (!empty($params['l'])?'&l='.$params['l']:''); ?>">Reset</a>
66
+ <?php
67
+ }
68
+ ?>
69
+ </div>
70
+ </form>
71
+ </div>
72
+ <table class="widefat post fixed" cellspacing="0">
73
+ <thead>
74
+ <tr>
75
+ <th class="manage-column" width="5%"><a href="?page=<?php echo PRLI_PLUGIN_NAME; ?>/prli-clicks.php<?php echo $sort_params; ?>&sort=btype<?php echo (($sort_str == 'btype' and $sdir_str == 'asc')?'&sdir=desc':''); ?>">Browser<?php echo (($sort_str == 'btype')?'&nbsp;&nbsp;&nbsp;<img src="'.$prli_siteurl.'/wp-content/plugins/'.PRLI_PLUGIN_NAME.'/images/'.(($sdir_str == 'desc')?'arrow_down.png':'arrow_up.png').'"/>':'') ?></a>
76
+ </th>
77
+ <th class="manage-column" width="12%">
78
+ <a href="?page=<?php echo PRLI_PLUGIN_NAME; ?>/prli-clicks.php<?php echo $sort_params; ?>&sort=ip<?php echo (($sort_str == 'ip' and $sdir_str == 'asc')?'&sdir=desc':''); ?>">IP<?php echo (($sort_str == 'ip')?'&nbsp;&nbsp;&nbsp;<img src="'.$prli_siteurl.'/wp-content/plugins/'.PRLI_PLUGIN_NAME.'/images/'.(($sdir_str == 'desc')?'arrow_down.png':'arrow_up.png').'"/>':'') ?></a>
79
+ </th>
80
+ <th class="manage-column" width="12%">
81
+ <a href="?page=<?php echo PRLI_PLUGIN_NAME; ?>/prli-clicks.php<?php echo $sort_params; ?>&sort=vuid<?php echo (($sort_str == 'vuid' and $sdir_str == 'asc')?'&sdir=desc':''); ?>">Visitor<?php echo (($sort_str == 'vuid')?'&nbsp;&nbsp;&nbsp;<img src="'.$prli_siteurl.'/wp-content/plugins/'.PRLI_PLUGIN_NAME.'/images/'.(($sdir_str == 'desc')?'arrow_down.png':'arrow_up.png').'"/>':'') ?></a>
82
+ </th>
83
+ <th class="manage-column" width="13%">
84
+ <a href="?page=<?php echo PRLI_PLUGIN_NAME; ?>/prli-clicks.php<?php echo $sort_params; ?>&sort=created_at<?php echo (($sort_str == 'created_at' and $sdir_str == 'asc')?'&sdir=desc':''); ?>">Timestamp<?php echo ((empty($sort_str) or $sort_str == 'created_at')?'&nbsp;&nbsp;&nbsp;<img src="'.$prli_siteurl.'/wp-content/plugins/'.PRLI_PLUGIN_NAME.'/images/'.((empty($sort_str) or $sdir_str == 'desc')?'arrow_down.png':'arrow_up.png').'"/>':'') ?></a>
85
+ </th>
86
+ <th class="manage-column" width="16%">
87
+ <a href="?page=<?php echo PRLI_PLUGIN_NAME; ?>/prli-clicks.php<?php echo $sort_params; ?>&sort=host<?php echo (($sort_str == 'host' and $sdir_str == 'asc')?'&sdir=desc':''); ?>">Host<?php echo (($sort_str == 'host')?'&nbsp;&nbsp;&nbsp;<img src="'.$prli_siteurl.'/wp-content/plugins/'.PRLI_PLUGIN_NAME.'/images/'.(($sdir_str == 'desc')?'arrow_down.png':'arrow_up.png').'"/>':'') ?></a>
88
+ </th>
89
+ <th class="manage-column" width="16%">
90
+ <a href="?page=<?php echo PRLI_PLUGIN_NAME; ?>/prli-clicks.php<?php echo $sort_params; ?>&sort=uri<?php echo (($sort_str == 'uri' and $sdir_str == 'asc')?'&sdir=desc':''); ?>">URI<?php echo (($sort_str == 'uri')?'&nbsp;&nbsp;&nbsp;<img src="'.$prli_siteurl.'/wp-content/plugins/'.PRLI_PLUGIN_NAME.'/images/'.(($sdir_str == 'desc')?'arrow_down.png':'arrow_up.png').'"/>':'') ?></a>
91
+ </th>
92
+ <th class="manage-column" width="16%">
93
+ <a href="?page=<?php echo PRLI_PLUGIN_NAME; ?>/prli-clicks.php<?php echo $sort_params; ?>&sort=referer<?php echo (($sort_str == 'referer' and $sdir_str == 'asc')?'&sdir=desc':''); ?>">Referrer<?php echo (($sort_str == 'referer')?'&nbsp;&nbsp;&nbsp;<img src="'.$prli_siteurl.'/wp-content/plugins/'.PRLI_PLUGIN_NAME.'/images/'.(($sdir_str == 'desc')?'arrow_down.png':'arrow_up.png').'"/>':'') ?></a>
94
+ </th>
95
+ <th class="manage-column" width="13%">
96
+ <a href="?page=<?php echo PRLI_PLUGIN_NAME; ?>/prli-clicks.php<?php echo $sort_params; ?>&sort=link<?php echo (($sort_str == 'link' and $sdir_str == 'asc')?'&sdir=desc':''); ?>">Link<?php echo (($sort_str == 'link')?'&nbsp;&nbsp;&nbsp;<img src="'.$prli_siteurl.'/wp-content/plugins/'.PRLI_PLUGIN_NAME.'/images/'.(($sdir_str == 'desc')?'arrow_down.png':'arrow_up.png').'"/>':'') ?></a>
97
+ </th>
98
+ </tr>
99
+ </thead>
100
+ <?php
101
+
102
+ if(count($clicks) <= 0)
103
+ {
104
+ ?>
105
+ <tr>
106
+ <td colspan="7">No Hits have been recorded yet</td>
107
+ </tr>
108
+ <?php
109
+ }
110
+ else
111
+ {
112
+ foreach($clicks as $click)
113
+ {
114
+ ?>
115
+ <tr>
116
+ <td><img src="<?php echo $prli_siteurl; ?>/wp-content/plugins/<?php echo PRLI_PLUGIN_NAME; ?>/images/browser/<?php echo prli_browser_image($click->btype); ?>" alt="<?php echo $click->btype . " v" . $click->bversion; ?>" title="<?php echo $click->btype . " v" . $click->bversion; ?>"/>&nbsp;<img src="<?php echo $prli_siteurl; ?>/wp-content/plugins/<?php echo PRLI_PLUGIN_NAME; ?>/images/os/<?php echo prli_os_image($click->os); ?>" alt="<?php echo $click->os; ?>" title="<?php echo $click->os; ?>"/></td>
117
+ <td><a href="?page=<?php echo PRLI_PLUGIN_NAME; ?>/prli-clicks.php&ip=<?php echo $click->ip; ?>" title="View All Activity for IP Address: <?php echo $click->ip; ?>"><?php echo $click->ip; ?> (<?php echo $click->ip_count; ?>)</a></td>
118
+ <td><a href="?page=<?php echo PRLI_PLUGIN_NAME; ?>/prli-clicks.php&vuid=<?php echo $click->vuid; ?>" title="View All Activity for Visitor: <?php echo $click->vuid; ?>"><?php echo $click->vuid; ?><?php echo (($click->vuid != null)?" ($click->vuid_count)":''); ?></a></td>
119
+ <td><?php echo $click->created_at; ?></td>
120
+ <td><?php echo $click->host; ?></td>
121
+ <td><?php echo $click->uri; ?></td>
122
+ <td><?php echo $click->referer; ?></td>
123
+ <td><a href="?page=<?php print PRLI_PLUGIN_NAME; ?>/prli-clicks.php&l=<?php echo $click->link_id; ?>" title="View clicks for <?php echo $click->link_name; ?>"><?php echo $click->link_name; ?></a></td>
124
+ </tr>
125
+ <?php
126
+ }
127
+ }
128
+ ?>
129
+ <tfoot>
130
+ <tr>
131
+ <th class="manage-column">Browser</th>
132
+ <th class="manage-column">IP</th>
133
+ <th class="manage-column">Visitor</th>
134
+ <th class="manage-column">Timestamp</th>
135
+ <th class="manage-column">Host</th>
136
+ <th class="manage-column">URI</th>
137
+ <th class="manage-column">Referrer</th>
138
+ <th class="manage-column">Link</th>
139
+ </tr>
140
+ </tfoot>
141
+ </table>
142
+
143
+ <a href="<?php echo $prli_siteurl; ?>/wp-content/plugins/<?php echo PRLI_PLUGIN_NAME; ?>/prli-clicks.php?action=csv<?php echo $page_params; ?>">Download CSV (<?php echo $link_name; ?>)</a>
144
+
145
+ <?php
146
+ require(PRLI_VIEWS_PATH.'/shared/table-nav.php');
147
+ ?>
148
+
149
+ </div>
classes/views/prli-groups/edit.php ADDED
@@ -0,0 +1,58 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <div class="wrap">
2
+ <h2><img src="<?php echo PRLI_URL.'/images/pretty-link-med.png'; ?>"/>&nbsp;Pretty Link: Edit Group</h2>
3
+
4
+ <?php
5
+ require(PRLI_VIEWS_PATH.'/shared/errors.php');
6
+ ?>
7
+
8
+ <form name="form1" method="post" action="?page=<?php echo PRLI_PLUGIN_NAME ?>/prli-groups.php">
9
+ <input type="hidden" name="action" value="update">
10
+ <input type="hidden" name="id" value="<?php echo $id; ?>">
11
+ <?php wp_nonce_field('update-options'); ?>
12
+
13
+ <table class="form-table">
14
+ <tr class="form-field">
15
+ <td width="75px" valign="top">Name: </td>
16
+ <td><input type="text" name="name" value="<?php echo (($_POST['name'] != null and $record == null)?$_POST['name']:$record->name); ?>" size="75">
17
+ <br/><span class="setting-description">This is how you'll identify your Group.</span></td>
18
+ </tr>
19
+ <tr class="form-field">
20
+ <td valign="top">Description: </td>
21
+ <td><textarea style="height: 100px;" name="description"><?php echo (($_POST['description'] != null and $record == null)?$_POST['description']:$record->description); ?></textarea>
22
+ <br/><span class="setting-description">A Description of this group.</span></td>
23
+ </tr>
24
+ <tr class="form-field" valign="top">
25
+ <td valign="top">Links: </td>
26
+ <td valign="top">
27
+ <div style="height: 150px; width: 95%; border: 1px solid #8cbdd5; overflow: auto;">
28
+ <table width="100%" cellspacing="0">
29
+ <thead style="background-color: #dedede; padding: 0px; margin: 0px; line-height: 8px; font-size: 14px;">
30
+ <th width="50%" style="padding-left: 5px; margin: 0px;"><strong>Name</strong></th>
31
+ <th width="50%" style="padding-left: 5px; margin: 0px;"><strong>Current Group</strong></th>
32
+ </thead>
33
+ <?php
34
+ for($i = 0; $i < count($links); $i++)
35
+ {
36
+ $link = $links[$i];
37
+ ?>
38
+ <tr <?php echo (($i%2)?' style="background-color: #efefef;"':''); ?>>
39
+ <td style="padding: 5px; margin: 0px; line-height: 5px;" width="50%"><input type="checkbox" name="link[<?php echo $link->id; ?>]" <?php echo (((isset($_POST['link'][$link->id]) and $_POST['link'][$link->id] == 'on') or (empty($_POST) and $link->group_id == $record->id))?'checked="true"':''); ?>/>&nbsp;<?php echo $link->name . " <strong>(" . $link->slug . ")</strong>"; ?></td>
40
+ <td style="padding: 0px; margin: 0px; line-height: 5px;" width="50%"><?php echo $link->group_name; ?></td>
41
+ </tr>
42
+ <?php
43
+
44
+ }
45
+ ?>
46
+ </table>
47
+ </div>
48
+ <span class="setting-description">Select some links for this group. <strong>Note: each link can only be in one group at a time.</strong></span></td>
49
+ </td>
50
+ </tr>
51
+ </table>
52
+
53
+ <p class="submit">
54
+ <input type="submit" name="Submit" value="Update" />&nbsp;or&nbsp;<a href="?page=<?php echo PRLI_PLUGIN_NAME ?>/prli-groups.php">Cancel</a>
55
+ </p>
56
+
57
+ </form>
58
+ </div>
classes/views/prli-groups/head.php ADDED
@@ -0,0 +1,44 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <script type="text/javascript" src="<?php echo $prli_siteurl; ?>/wp-content/plugins/<?php echo PRLI_PLUGIN_NAME; ?>/includes/jquery/js/jquery-1.3.2.min.js"></script>
2
+ <script type="text/javascript">
3
+ $(document).ready(function(){
4
+ $(".group_actions").hide();
5
+ $(".edit_group").hover(
6
+ function () {
7
+ $(this).find(".group_actions").fadeIn(500);
8
+ },
9
+ function () {
10
+ $(this).find(".group_actions").fadeOut(300);
11
+ }
12
+ );
13
+ });
14
+ </script>
15
+
16
+ <script type="text/javascript">
17
+ $(document).ready(function(){
18
+ $(".advanced_pane").hide();
19
+ $(".advanced_toggle").click( function () {
20
+ $(".advanced_pane").slideToggle("slow");
21
+ });
22
+ });
23
+ </script>
24
+
25
+ <style type="text/css">
26
+
27
+ .advanced_toggle {
28
+ line-height: 34px;
29
+ font-size: 12px;
30
+ font-weight: bold;
31
+ padding-bottom: 10px;
32
+ }
33
+
34
+ .edit_group {
35
+ height: 50px;
36
+ }
37
+ .group_name {
38
+ font-size: 12px;
39
+ font-weight: bold;
40
+ }
41
+ .group_actions {
42
+ padding-top: 5px;
43
+ }
44
+ </style>
classes/views/prli-groups/list.php ADDED
@@ -0,0 +1,86 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <div class="wrap">
2
+ <p style="font-size: 14px; font-weight: bold; float: right; padding-top: 25px;"><a href="http://blairwilliams.com/faq" target="_blank">Get Help</a>&nbsp;|&nbsp;<a href="http://blairwilliams.com/blog" target="_blank">Blog</a>&nbsp;|&nbsp;<a href="http://blairwilliams.com/don" target="_blank">Donate</a></p>
3
+ <h2><img src="<?php echo PRLI_URL.'/images/pretty-link-med.png'; ?>"/>&nbsp;Pretty Link: Groups</h2>
4
+ <div id="message" class="updated fade" style="padding:5px;"><?php echo $prli_message; ?></div>
5
+ <div id="search_pane" style="float: right;">
6
+ <form class="form-fields" name="group_form" method="post" action="<?php echo str_replace( '%7E', '~', $_SERVER['REQUEST_URI']); ?>">
7
+ <?php wp_nonce_field('prli-groups'); ?>
8
+ <input type="hidden" name="sort" id="sort" value="<?php echo $sort_str; ?>" />
9
+ <input type="hidden" name="sdir" id="sort" value="<?php echo $sdir_str; ?>" />
10
+ <input type="text" name="search" id="search" value="<?php echo $search_str; ?>" style="display:inline;"/>
11
+ <div class="submit" style="display: inline;"><input type="submit" name="Submit" value="Search"/>
12
+ <?php
13
+ if(!empty($search_str))
14
+ {
15
+ ?>
16
+ or <a href="?page=<?php echo PRLI_PLUGIN_NAME; ?>/prli-groups.php">Reset</a>
17
+ <?php
18
+ }
19
+ ?>
20
+ </div>
21
+ </form>
22
+ </div>
23
+ <div id="button_bar">
24
+ <p><a href="?page=<?php echo PRLI_PLUGIN_NAME; ?>/prli-groups.php&action=new">Add a Pretty Link Group</a></p>
25
+ </div>
26
+
27
+ <?php
28
+ require(PRLI_VIEWS_PATH.'/shared/table-nav.php');
29
+ ?>
30
+ <table class="widefat post fixed" cellspacing="0">
31
+ <thead>
32
+ <tr>
33
+ <th class="manage-column" width="50%"><a href="?page=<?php echo PRLI_PLUGIN_NAME; ?>/prli-groups.php&sort=name<?php echo (($sort_str == 'name' and $sdir_str == 'asc')?'&sdir=desc':''); ?>">Name<?php echo (($sort_str == 'name')?'&nbsp;&nbsp;&nbsp;<img src="'.$prli_siteurl.'/wp-content/plugins/'.PRLI_PLUGIN_NAME.'/images/'.(($sdir_str == 'desc')?'arrow_down.png':'arrow_up.png').'"/>':'') ?></a></th>
34
+ <th class="manage-column" width="10%"><a href="?page=<?php echo PRLI_PLUGIN_NAME; ?>/prli-groups.php&sort=click_count<?php echo (($sort_str == 'click_count' and $sdir_str == 'asc')?'&sdir=desc':''); ?>">Hits<?php echo (($sort_str == 'click_count')?'&nbsp;&nbsp;&nbsp;<img src="'.$prli_siteurl.'/wp-content/plugins/'.PRLI_PLUGIN_NAME.'/images/'.(($sdir_str == 'desc')?'arrow_down.png':'arrow_up.png').'"/>':'') ?></a></th>
35
+ <th class="manage-column" width="10%"><a href="?page=<?php echo PRLI_PLUGIN_NAME; ?>/prli-groups.php&sort=link_count<?php echo (($sort_str == 'link_count' and $sdir_str == 'asc')?'&sdir=desc':''); ?>">Links<?php echo (($sort_str == 'link_count')?'&nbsp;&nbsp;&nbsp;<img src="'.$prli_siteurl.'/wp-content/plugins/'.PRLI_PLUGIN_NAME.'/images/'.(($sdir_str == 'desc')?'arrow_down.png':'arrow_up.png').'"/>':'') ?></a></th>
36
+ <th class="manage-column" width="30%"><a href="?page=<?php echo PRLI_PLUGIN_NAME; ?>/prli-groups.php&sort=created_at<?php echo (($sort_str == 'created_at' and $sdir_str == 'asc')?'&sdir=desc':''); ?>">Created<?php echo ((empty($sort_str) or $sort_str == 'created_at')?'&nbsp;&nbsp;&nbsp;<img src="'.$prli_siteurl.'/wp-content/plugins/'.PRLI_PLUGIN_NAME.'/images/'.((empty($sort_str) or $sdir_str == 'desc')?'arrow_down.png':'arrow_up.png').'"/>':'') ?></a></th>
37
+ </tr>
38
+ </thead>
39
+ <?php
40
+
41
+ if($record_count <= 0)
42
+ {
43
+ ?>
44
+ <tr>
45
+ <td colspan="5">No Pretty Link Groups were found</td>
46
+ </tr>
47
+ <?php
48
+ }
49
+ else
50
+ {
51
+ foreach($groups as $group)
52
+ {
53
+ ?>
54
+ <tr>
55
+ <td class="edit_group">
56
+ <a class="group_name" href="?page=<?php echo PRLI_PLUGIN_NAME; ?>/prli-groups.php&action=edit&id=<?php echo $group->id; ?>" title="Edit <?php echo $group->name; ?>"><?php echo "$group->name"; ?></a>
57
+ <br/>
58
+ <div class="group_actions">
59
+ <a href="?page=<?php echo PRLI_PLUGIN_NAME; ?>/prli-groups.php&action=edit&id=<?php echo $group->id; ?>" title="Edit <?php echo $group->name; ?>">Edit</a>&nbsp;|
60
+ <a href="?page=<?php echo PRLI_PLUGIN_NAME; ?>/prli-groups.php&action=destroy&id=<?php echo $group->id; ?>" onclick="return confirm('Are you sure you want to delete your <?php echo $group->name; ?> Pretty Link Group?');" title="Delete <?php echo $group->name; ?>">Delete</a>&nbsp;|
61
+ <a href="?page=<?php echo PRLI_PLUGIN_NAME; ?>/prli-links.php&group=<?php echo $group->id; ?>" title="View links in <?php echo $group->name; ?>">Links</a>&nbsp;|
62
+ <a href="?page=<?php echo PRLI_PLUGIN_NAME; ?>/prli-clicks.php&group=<?php echo $group->id; ?>" title="View hits in <?php echo $group->name; ?>">Hits</a>
63
+ </div>
64
+ </td>
65
+ <td><a href="?page=<?php echo PRLI_PLUGIN_NAME; ?>/prli-clicks.php&group=<?php echo $group->id; ?>" title="View hits in <?php echo $group->name; ?>"><?php echo $group->click_count; ?></a></td>
66
+ <td><a href="?page=<?php echo PRLI_PLUGIN_NAME; ?>/prli-links.php&group=<?php echo $group->id; ?>" title="View links in <?php echo $group->name; ?>"><?php echo $group->link_count; ?></a></td>
67
+ <td><?php echo $group->created_at; ?></td>
68
+ </tr>
69
+ <?php
70
+ }
71
+ }
72
+ ?>
73
+ <tfoot>
74
+ <tr>
75
+ <th class="manage-column">Name</th>
76
+ <th class="manage-column">Hits</th>
77
+ <th class="manage-column">Links</th>
78
+ <th class="manage-column">Created</th>
79
+ </tr>
80
+ </tfoot>
81
+ </table>
82
+ <?php
83
+ require(PRLI_VIEWS_PATH.'/shared/table-nav.php');
84
+ ?>
85
+
86
+ </div>
classes/views/prli-groups/new.php ADDED
@@ -0,0 +1,59 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <div class="wrap">
2
+ <h2><img src="<?php echo PRLI_URL.'/images/pretty-link-med.png'; ?>"/>&nbsp;Pretty Link: Add Group</h2>
3
+
4
+ <?php
5
+ require(PRLI_VIEWS_PATH.'/shared/errors.php');
6
+ ?>
7
+
8
+ <form name="form1" method="post" action="?page=<?php echo PRLI_PLUGIN_NAME ?>/prli-groups.php">
9
+ <input type="hidden" name="action" value="create">
10
+ <?php wp_nonce_field('update-options'); ?>
11
+ <input type="hidden" name="id" value="<?php echo $id; ?>">
12
+
13
+ <table class="form-table">
14
+ <tr class="form-field">
15
+ <td width="75px" valign="top">Name*: </td>
16
+ <td><input type="text" name="name" value="<?php echo (($_POST['name'] != null)?$_POST['name']:''); ?>" size="75">
17
+ <br/><span class="setting-description">This is how you'll identify your Group.</span></td>
18
+ </tr>
19
+ <tr class="form-field">
20
+ <td valign="top">Description: </td>
21
+ <td><textarea style="height: 100px;" name="description"><?php echo (($_POST['description'] != null)?$_POST['description']:''); ?></textarea>
22
+ <br/><span class="setting-description">A Description of this group.</span></td>
23
+ </tr>
24
+ <tr class="form-field" valign="top">
25
+ <td valign="top">Links: </td>
26
+ <td valign="top">
27
+ <div style="height: 150px; width: 95%; border: 1px solid #8cbdd5; overflow: auto;">
28
+ <table width="100%" cellspacing="0">
29
+ <thead style="background-color: #dedede; padding: 0px; margin: 0px; line-height: 8px; font-size: 14px;">
30
+ <th width="50%" style="padding-left: 5px; margin: 0px;"><strong>Name</strong></th>
31
+ <th width="50%" style="padding-left: 5px; margin: 0px;"><strong>Current Group</strong></th>
32
+ </thead>
33
+ <?php
34
+ for($i = 0; $i < count($links); $i++)
35
+ {
36
+ $link = $links[$i];
37
+ ?>
38
+ <tr <?php echo (($i%2)?' style="background-color: #efefef;"':''); ?>>
39
+ <td style="padding: 5px; margin: 0px; line-height: 5px;" width="50%"><input type="checkbox" name="link[<?php echo $link->id; ?>]" <?php echo ((isset($_POST['link'][$link->id]) and $_POST['link'][$link->id] == 'on')?'checked="true"':''); ?>/>&nbsp;<?php echo $link->name . " <strong>(" . $link->slug . ")</strong>"; ?></td>
40
+ <td style="padding: 0px; margin: 0px; line-height: 5px;" width="50%"><?php echo $link->group_name; ?></td>
41
+ </tr>
42
+ <?php
43
+
44
+ }
45
+ ?>
46
+ </table>
47
+ </div>
48
+ <span class="setting-description">Select some links for this group. <strong>Note: each link can only be in one group at a time.</strong></span></td>
49
+ </td>
50
+ </tr>
51
+ </table>
52
+ </div>
53
+
54
+ <p class="submit">
55
+ <input type="submit" name="Submit" value="Create" />&nbsp;or&nbsp;<a href="?page=<?php echo PRLI_PLUGIN_NAME ?>/prli-groups.php">Cancel</a>
56
+ </p>
57
+
58
+ </form>
59
+ </div>
classes/views/prli-links/bar.php ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2
+ <html>
3
+ <head>
4
+ <meta http-equiv="content-type" content="text/html; charset=UTF-8">
5
+ <title><?php echo $pretty_link->name; ?></title>
6
+ </head>
7
+ <frameset rows="66,*" framespacing=0 frameborder=0>
8
+ <frame src="<?php echo PRLI_URL . "/pretty-bar.php?slug=".$pretty_link->slug . "&url=".$pretty_link->url.$param_string; ?>" noresize frameborder=0 scrolling=no marginwidth=0 marginheight=0 style="">
9
+ <frame src="<?php echo $pretty_link->url.$param_string; ?>" frameborder=0 marginwidth=0 marginheight=0>
10
+ <noframes>Your browser does not support frames. Click <a href="<?php echo $pretty_link->url.$param_string; ?>">here</a> to view the page.</noframes>
11
+ </frameset>
12
+ </html>
classes/views/prli-links/edit.php ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <div class="wrap">
2
+ <h2><img src="<?php echo PRLI_URL.'/images/pretty-link-med.png'; ?>"/>&nbsp;Pretty Link: Edit Link</h2>
3
+
4
+ <?php
5
+ require(PRLI_VIEWS_PATH.'/shared/errors.php');
6
+ ?>
7
+
8
+ <form name="form1" method="post" action="?page=<?php echo PRLI_PLUGIN_NAME ?>/prli-links.php">
9
+ <input type="hidden" name="action" value="update">
10
+ <input type="hidden" name="id" value="<?php echo $id; ?>">
11
+ <?php wp_nonce_field('update-options'); ?>
12
+
13
+ <?php
14
+ require(PRLI_VIEWS_PATH.'/prli-links/form.php');
15
+ ?>
16
+
17
+ <p class="submit">
18
+ <input type="submit" name="Submit" value="Update" />&nbsp;or&nbsp;<a href="?page=<?php echo PRLI_PLUGIN_NAME ?>/prli-links.php">Cancel</a>
19
+ </p>
20
+
21
+ </form>
22
+ </div>
classes/views/prli-links/form.php ADDED
@@ -0,0 +1,111 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <table class="form-table">
2
+ <tr class="form-field">
3
+ <td width="75px" valign="top">Target URL*: </td>
4
+ <td><input type="text" name="url" value="<?php echo $values['url']; ?>" size="75">
5
+ <br/><span class="setting-description">Enter the URL you want to mask and track. Don't forget to start your url with <code>http://</code> or <code>https://</code>. Example: <code>http://www.yoururl.com</code></span></td>
6
+ </tr>
7
+ <tr>
8
+ <td valign="top">Pretty Link*: </td>
9
+ <td><strong><?php echo $prli_blogurl; ?></strong>/<input type="text" name="slug" value="<?php echo $values['slug']; ?>" size="25">
10
+ <br/><span class="setting-description">Enter the slug (word trailing your main URL) that will form your pretty link and redirect to the URL above.</span></td>
11
+ </tr>
12
+ <tr class="form-field">
13
+ <td width="75px" valign="top">Title: </td>
14
+ <td><input type="text" name="name" size="75" value="<?php echo $values['name']; ?>" />
15
+ <br/><span class="setting-description">This will act as the title of your Pretty Link. If a name is not entered here then the slug name will be used.</span></td>
16
+ </tr>
17
+ <tr class="form-field">
18
+ <td valign="top">Description: </td>
19
+ <td><textarea style="height: 100px;" name="description"><?php echo $values['description']; ?></textarea>
20
+ <br/><span class="setting-description">A Description of this link.</span></td>
21
+ </tr>
22
+ <tr class="form-field">
23
+ <td colspan="2">
24
+ <span>Group:&nbsp;</span>
25
+ <select name="group_id">
26
+ <option>None</option>
27
+ <?php
28
+ foreach($values['groups'] as $group)
29
+ {
30
+ ?>
31
+ <option value="<?php echo $group['id']; ?>"<?php echo $group['val']; ?>><?php echo $group['name']; ?></option>
32
+ <?php
33
+ }
34
+ ?>
35
+ </select>
36
+ <br/><span class="setting-description">Select a group for this link.</span>
37
+ </td>
38
+ </tr>
39
+ </table>
40
+ <a name="options_pos" height="0"></a>
41
+ <h3><a href="#options_pos" class="options_toggle">All Options</a></h3>
42
+ <table class="options-table">
43
+ <tr>
44
+ <td valign="top" width="50%">
45
+ <a name="cloaking_pos" height="0"></a>
46
+ <h3><a href="#cloaking_pos" class="cloaking_toggle toggle">Display Options</a></h3>
47
+ <div class="cloaking_pane pane">
48
+ <input type="checkbox" name="use_prettybar" <?php echo $values['use_prettybar']; ?>/>&nbsp; Show Pretty Bar
49
+ <br/><span class="setting-description">Select this option if you want to show the Pretty Bar at the top of the page when redirecting to the Target URL.</span><br/>
50
+ <br/>
51
+ <input type="checkbox" name="use_ultra_cloak" <?php echo $values['use_ultra_cloak']; ?>/>&nbsp; Ultra Cloak this Link
52
+ <br/><span class="setting-description">When checked, the Target URL will be not be visible even after the redirection. This way, if a Target URL doesn't redirect to a URL you want to show then this will mask it.</span>
53
+ </div>
54
+ <br/>
55
+ <a name="tracking_pos" height="0"></a>
56
+ <h3><a href="#tracking_pos" class="tracking_toggle toggle">Tracking Options</a></h3>
57
+ <div class="tracking_pane pane">
58
+ <input type="checkbox" name="track_me" <?php echo $values['track_me']; ?>/>&nbsp; Track this Link
59
+ <br/><span class="setting-description">De-select this option if you don't want this link tracked. If de-selected, this link will still redirect to the target URL but hits on it won't be recorded in the database.</span>
60
+ <br/>
61
+ <br/>
62
+ <input type="checkbox" name="track_as_img" <?php echo $values['track_as_img']; ?>/>&nbsp; Track as a Pixel
63
+ <br/><span class="setting-description">Select this option if you want this link to behave as a tracking pixel instead of as a link. This option is useful if you want to track the number of times a page or email is opened. If you place your Pretty Link inside an img tag on the page (Example: <code>&lt;img src="<?php echo $prli_blogurl . "/yourslug"; ?>" /&gt;</code>) then the page load will be tracked as a click and then displayed. Note: If this option is selected your Target URL will simply be ignored if there's a value in it.</span>
64
+ </div>
65
+ <br/>
66
+ <a name="seo_pos" height="0"></a>
67
+ <h3><a href="#seo_pos" class="seo_toggle toggle">SEO Options</a></h3>
68
+ <div class="seo_pane pane">
69
+ <input type="checkbox" name="nofollow" <?php echo $values['nofollow']; ?>/>&nbsp; 'Nofollow' this Link
70
+ <br/><span class="setting-description">Select this if you want to add a nofollow code to this link. A nofollow will prevent reputable spiders and robots from following or indexing this link.</span>
71
+ <br/>
72
+ <h4>Redirect Type</h4>
73
+ <ul style="list-style-type: none">
74
+ <li>
75
+ <input type="radio" name="redirect_type" value="307" <?php echo $values['redirect_type']['307']; ?>/>&nbsp;Temporary Redirect (307)
76
+ <br/><span class="setting-description">This is the best option if you're planning on changing your Target URL and want accurate reporting for this link.</span>
77
+ </li>
78
+ <li>
79
+ <input type="radio" name="redirect_type" value="301" <?php echo $values['redirect_type']['301']; ?> />&nbsp;Permanent Redirect (301)
80
+ <br/><span class="setting-description">This is the best option if you're <strong>NOT</strong> planning on changing your Target URL. Traditionally this option is considered to be the best approach to use for your SEO/SEM efforts but since Pretty Link uses your domain name either way this notion isn't necessarily true for Pretty Links. Also, this option may not give you accurate reporting since proxy and caching servers may go directly to your Target URL once it's cached.</span>
81
+ </li>
82
+ </ul>
83
+ </div>
84
+ </td>
85
+ <td valign="top" width="50%">
86
+ <a name="group_pos" height="0"></a>
87
+ <h3><a href="#group_pos" class="group_toggle toggle">Group Options</a></h3>
88
+ <div class="group_pane pane">
89
+ <span>Group Listing Order:&nbsp;</span><input type="text" name="gorder" value="<?php echo $values['gorder']; ?>" size="10">
90
+ <br/><span class="setting-description">You can use this to determine the order that your link show up in the group it's in. The group will default to alphabetic order -- but this will override that default behavior. I also realize this isn't the easiest way for you to re-order links but we'll get a better way in the future.</span>
91
+ </div>
92
+ <br/>
93
+ <a name="param_forwarding_pos" height="0"></a>
94
+ <h3><a href="#param_forwarding_pos" class="param_forwarding_toggle toggle">Parameter Forwarding</a></h3>
95
+ <ul style="list-style-type: none" class="param_forwarding_pane pane">
96
+ <li>
97
+ <input type="radio" name="param_forwarding" value="off" <?php echo $values['param_forwarding']['off']; ?>/>&nbsp; Forward Parameters Off
98
+ <br/><span class="setting-description">You may want to leave this option off if you don't need to forward any parameters on to your Target URL.</span>
99
+ </li>
100
+ <li>
101
+ <input type="radio" name="param_forwarding" value="on" <?php echo $values['param_forwarding']['on']; ?> />&nbsp;Standard Parameter Forwarding
102
+ <br/><span class="setting-description">Select this option if you want to forward parameters through your pretty link to your Target URL. This will allow you to pass parameters in the standard syntax for example the pretty link <code>http://yoururl.com/coollink?product_id=4&sku=5441</code> will forward to the target URL and append the same parameters like so: <code>http://anotherurl.com?product_id=4&sku=5441</code>.</span>
103
+ </li>
104
+ <li>
105
+ <input type="radio" name="param_forwarding" value="custom" <?php echo $values['param_forwarding']['custom']; ?> />&nbsp;Custom Parameter Forwarding&nbsp;&nbsp;<input type="text" name="param_struct" value="<?php echo $values['param_struct']; ?>" size="25"/>
106
+ <br/><span class="setting-description">Select this option if you want to forward parameters through your Pretty Link to your Target URL and write the parameters in a custom format. For example, say I wanted to to have my links look like this: <code>http://yourdomain.com/products/14/4</code> and I wanted this to forward to <code>http://anotherurl.com?product_id=14&dock=4</code> you'd just select this option and enter the following string into the text field <code>/products/%product_id%/%dock%</code>. This will tell Pretty Link where each variable will be located in the URL and what each variable name is.</span>
107
+ </li>
108
+ </ul>
109
+ </td>
110
+ </tr>
111
+ </table>
classes/views/prli-links/head.php ADDED
@@ -0,0 +1,93 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <script type="text/javascript" src="<?php echo $prli_siteurl; ?>/wp-content/plugins/<?php echo PRLI_PLUGIN_NAME; ?>/includes/jquery/js/jquery-1.3.2.min.js"></script>
2
+ <script type="text/javascript">
3
+ $(document).ready(function(){
4
+ $(".link_actions").hide();
5
+ $(".edit_link").hover(
6
+ function () {
7
+ $(this).find(".link_actions").fadeIn(500);
8
+ },
9
+ function () {
10
+ $(this).find(".link_actions").fadeOut(300);
11
+ }
12
+ );
13
+ });
14
+ </script>
15
+
16
+ <script type="text/javascript">
17
+ $(document).ready(function(){
18
+ $(".options_toggle").click( function () {
19
+ $(".cloaking_pane").slideDown("fast");
20
+ $(".tracking_pane").slideDown("fast");
21
+ $(".seo_pane").slideDown("fast");
22
+ $(".group_pane").slideDown("fast");
23
+ $(".param_forwarding_pane").slideDown("fast");
24
+ });
25
+
26
+ $(".cloaking_pane").hide();
27
+ $(".cloaking_toggle").click( function () {
28
+ $(".cloaking_pane").slideToggle("fast");
29
+ });
30
+
31
+ $(".tracking_pane").hide();
32
+ $(".tracking_toggle").click( function () {
33
+ $(".tracking_pane").slideToggle("fast");
34
+ });
35
+
36
+ $(".seo_pane").hide();
37
+ $(".seo_toggle").click( function () {
38
+ $(".seo_pane").slideToggle("fast");
39
+ });
40
+
41
+ $(".group_pane").hide();
42
+ $(".group_toggle").click( function () {
43
+ $(".group_pane").slideToggle("fast");
44
+ });
45
+
46
+ $(".param_forwarding_pane").hide();
47
+ $(".param_forwarding_toggle").click( function () {
48
+ $(".param_forwarding_pane").slideToggle("fast");
49
+ });
50
+ });
51
+ </script>
52
+
53
+ <style type="text/css">
54
+
55
+ .options-table {
56
+ width: 67%;
57
+ }
58
+
59
+ .options-table td {
60
+ margin-left: 5px;
61
+ margin-right: 5px;
62
+ background-color: #f4f0db;
63
+ }
64
+
65
+ .options-table h3 {
66
+ padding: 0px;
67
+ margin: 0px;
68
+ padding-left: 10px;
69
+ }
70
+
71
+ .toggle {
72
+ line-height: 34px;
73
+ font-size: 12px;
74
+ font-weight: bold;
75
+ padding-bottom: 10px;
76
+ }
77
+
78
+ .pane {
79
+ background-color: #f4f0db;
80
+ padding: 10px;
81
+ }
82
+
83
+ .edit_link {
84
+ height: 50px;
85
+ }
86
+ .slug_name {
87
+ font-size: 12px;
88
+ font-weight: bold;
89
+ }
90
+ .link_actions {
91
+ padding-top: 5px;
92
+ }
93
+ </style>
classes/views/prli-links/list.php ADDED
@@ -0,0 +1,154 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <div class="wrap">
2
+ <p style="font-size: 14px; font-weight: bold; float: right; padding-top: 25px;"><a href="http://blairwilliams.com/faq" target="_blank">Get Help</a>&nbsp;|&nbsp;<a href="http://blairwilliams.com/blog" target="_blank">Blog</a>&nbsp;|&nbsp;<a href="http://blairwilliams.com/don" target="_blank">Donate</a></p>
3
+ <h2><img src="<?php echo PRLI_URL.'/images/pretty-link-med.png'; ?>"/>&nbsp;Pretty Link: Links</h2>
4
+ <?php
5
+ if(empty($params['group']))
6
+ {
7
+ ?>
8
+ <div id="message" class="updated fade" style="padding:5px;"><?php echo $prli_message; ?></div>
9
+ <div id="search_pane" style="float: right;">
10
+ <form class="form-fields" name="link_form" method="post" action="<?php echo str_replace( '%7E', '~', $_SERVER['REQUEST_URI']); ?>">
11
+ <?php wp_nonce_field('prli-links'); ?>
12
+ <input type="hidden" name="sort" id="sort" value="<?php echo $sort_str; ?>" />
13
+ <input type="hidden" name="sdir" id="sort" value="<?php echo $sdir_str; ?>" />
14
+ <input type="text" name="search" id="search" value="<?php echo $search_str; ?>" style="display:inline;"/>
15
+ <div class="submit" style="display: inline;"><input type="submit" name="Submit" value="Search"/>
16
+ <?php
17
+ if(!empty($search_str))
18
+ {
19
+ ?>
20
+ or <a href="?page=<?php echo PRLI_PLUGIN_NAME; ?>/prli-links.php">Reset</a>
21
+ <?php
22
+ }
23
+ ?>
24
+ </div>
25
+ </form>
26
+ </div>
27
+ <div id="button_bar">
28
+ <p><a href="?page=<?php echo PRLI_PLUGIN_NAME; ?>/prli-add-link.php"><img src="<?php echo PRLI_URL.'/images/pretty-link-add.png'; ?>"/> Add a Pretty Link</a>
29
+ &nbsp;|&nbsp;<a href="options-general.php?page=<?php echo PRLI_PLUGIN_NAME; ?>/prli-options.php">Options</a>
30
+ </p>
31
+ </div>
32
+ <?php
33
+ }
34
+ else
35
+ {
36
+ ?>
37
+ <h3><?php echo $prli_message; ?></h3>
38
+ <a href="?page=<?php echo PRLI_PLUGIN_NAME; ?>/prli-groups.php">&laquo Back to Groups</a>
39
+ <br/><br/>
40
+ <?php
41
+ }
42
+ ?>
43
+
44
+ <?php
45
+ require(PRLI_VIEWS_PATH.'/shared/table-nav.php');
46
+ ?>
47
+ <table class="widefat post fixed" cellspacing="0">
48
+ <thead>
49
+ <tr>
50
+ <th class="manage-column" width="45%"><a href="?page=<?php echo PRLI_PLUGIN_NAME; ?>/prli-links.php&sort=name<?php echo (($sort_str == 'name' and $sdir_str == 'asc')?'&sdir=desc':''); ?>">Name<?php echo (($sort_str == 'name')?'&nbsp;&nbsp;&nbsp;<img src="'.$prli_siteurl.'/wp-content/plugins/'.PRLI_PLUGIN_NAME.'/images/'.(($sdir_str == 'desc')?'arrow_down.png':'arrow_up.png').'"/>':'') ?></a></th>
51
+ <th class="manage-column" width="5%"><a href="?page=<?php echo PRLI_PLUGIN_NAME; ?>/prli-links.php&sort=clicks<?php echo (($sort_str == 'clicks' and $sdir_str == 'asc')?'&sdir=desc':''); ?>">Hits<?php echo (($sort_str == 'clicks')?'&nbsp;&nbsp;&nbsp;<img src="'.$prli_siteurl.'/wp-content/plugins/'.PRLI_PLUGIN_NAME.'/images/'.(($sdir_str == 'desc')?'arrow_down.png':'arrow_up.png').'"/>':'') ?></a></th>
52
+ <th class="manage-column" width="5%"><a href="?page=<?php echo PRLI_PLUGIN_NAME; ?>/prli-links.php&sort=group_name<?php echo (($sort_str == 'group_name' and $sdir_str == 'asc')?'&sdir=desc':''); ?>">Group<?php echo (($sort_str == 'group_name')?'&nbsp;&nbsp;&nbsp;<img src="'.$prli_siteurl.'/wp-content/plugins/'.PRLI_PLUGIN_NAME.'/images/'.(($sdir_str == 'desc')?'arrow_down.png':'arrow_up.png').'"/>':'') ?></a></th>
53
+ <th class="manage-column" width="3%"><span title="Redirect">Re</span></th>
54
+ <th class="manage-column" width="12%"><a href="?page=<?php echo PRLI_PLUGIN_NAME; ?>/prli-links.php&sort=created_at<?php echo (($sort_str == 'created_at' and $sdir_str == 'asc')?'&sdir=desc':''); ?>">Created<?php echo ((empty($sort_str) or $sort_str == 'created_at')?'&nbsp;&nbsp;&nbsp;<img src="'.$prli_siteurl.'/wp-content/plugins/'.PRLI_PLUGIN_NAME.'/images/'.((empty($sort_str) or $sdir_str == 'desc')?'arrow_down.png':'arrow_up.png').'"/>':'') ?></a></th>
55
+ <th class="manage-column" width="30%"><a href="?page=<?php echo PRLI_PLUGIN_NAME; ?>/prli-links.php&sort=slug<?php echo (($sort_str == 'slug' and $sdir_str == 'asc')?'&sdir=desc':''); ?>">Links<?php echo (($sort_str == 'slug')?'&nbsp;&nbsp;&nbsp;<img src="'.$prli_siteurl.'/wp-content/plugins/'.PRLI_PLUGIN_NAME.'/images/'.(($sdir_str == 'desc')?'arrow_down.png':'arrow_up.png').'"/>':'') ?></a></th>
56
+ </tr>
57
+ </thead>
58
+ <?php
59
+
60
+ if($record_count <= 0)
61
+ {
62
+ ?>
63
+ <tr>
64
+ <td colspan="5">No Pretty Links were found</td>
65
+ </tr>
66
+ <?php
67
+ }
68
+ else
69
+ {
70
+ foreach($links as $link)
71
+ {
72
+ $pretty_link_url = $prli_link->get_pretty_link_url($link->slug);//$prli_blogurl . '/' . $link->slug;
73
+ ?>
74
+ <tr>
75
+ <td class="edit_link">
76
+ <?php if( !$link->track_as_img )
77
+ {
78
+ ?>
79
+ <a href="<? echo $link->url; ?>" target="_blank" title="Visit Target URL: <?php echo $link->url; ?> in a New Window"><img src="<?php echo PRLI_URL.'/images/url_icon.gif'; ?>" width="13px" height="13px" name="Visit" alt="Visit"/></a>&nbsp;
80
+ <a href="<? echo $pretty_link_url; ?>" target="_blank" title="Visit Pretty Link: <?php echo $pretty_link_url; ?> in a New Window"><img src="<?php echo PRLI_URL.'/images/url_icon.gif'; ?>" width="13px" height="13px" name="Visit" alt="Visit"/></a>&nbsp;
81
+ <?php
82
+ }
83
+ else
84
+ {
85
+ ?>
86
+ <img src="<?php echo PRLI_URL.'/images/pixel_track.png'; ?>" width="13px" height="13px" name="Pixel Tracking Enabled" alt="Pixel Tracking Enabled" title="Pixel Tracking Enabled"/>&nbsp;
87
+ <?php
88
+ }
89
+
90
+ if($link->param_forwarding == 'on')
91
+ {
92
+ ?>
93
+ <img src="<?php echo PRLI_URL.'/images/forward_params.png'; ?>" width="13px" height="13px" name="Standard Parameter Forwarding Enabled" alt="Standard Parameter Forwarding Enabled" title="Standard Parameter Forwarding Enabled"/>&nbsp;
94
+ <?php
95
+ }
96
+ else if($link->param_forwarding == 'custom')
97
+ {
98
+ ?>
99
+ <img src="<?php echo PRLI_URL.'/images/forward_params.png'; ?>" width="13px" height="13px" name="Custom Parameter Forwarding Enabled" alt="Custom Parameter Forwarding Enabled" title="Custom Parameter Forwarding Enabled"/>&nbsp;
100
+ <?php
101
+ }
102
+ ?>
103
+
104
+ <a class="slug_name" href="?page=<?php echo PRLI_PLUGIN_NAME; ?>/prli-links.php&action=edit&id=<?php echo $link->id; ?>" title="Edit <?php echo $link->name; ?>"><?php echo "$link->name"; ?></a>
105
+ <br/>
106
+ <div class="link_actions">
107
+ <a href="?page=<?php echo PRLI_PLUGIN_NAME; ?>/prli-links.php&action=edit&id=<?php echo $link->id; ?>" title="Edit <?php echo $link->slug; ?>">Edit</a>&nbsp;|
108
+ <a href="?page=<?php echo PRLI_PLUGIN_NAME; ?>/prli-links.php&action=destroy&id=<?php echo $link->id; ?>" onclick="return confirm('Are you sure you want to delete your <?php echo $link->name; ?> Pretty Link? This will delete the Pretty Link and all of the statistical data about it in your database.');" title="Delete <?php echo $link->slug; ?>">Delete</a>&nbsp;|
109
+ <a href="?page=<?php echo PRLI_PLUGIN_NAME; ?>/prli-links.php&action=reset&id=<?php echo $link->id; ?>" onclick="return confirm('Are you sure you want to reset your <?php echo $link->name; ?> Pretty Link? This will delete all of the statistical data about this Pretty Link in your database.');" title="Reset <?php echo $link->name; ?>">Reset</a>&nbsp;|
110
+ <a href="?page=<?php echo PRLI_PLUGIN_NAME; ?>/prli-clicks.php&l=<?php echo $link->id; ?>" title="View clicks for <?php echo $link->slug; ?>">Hits</a>
111
+ <?php if( !$link->track_as_img )
112
+ {
113
+ ?>
114
+ |&nbsp;<a href="http://twitter.com/home?status=<?php echo $pretty_link_url; ?>" target="_blank" title="Post <?php echo $pretty_link_url; ?> to Twitter">Tweet</a>&nbsp;|
115
+ <a href="mailto:?subject=Pretty Link&body=<?php echo $pretty_link_url; ?>" target="_blank" title="Send <?php echo $pretty_link_url; ?> in an Email">Email</a>
116
+ <?php
117
+ }
118
+ ?>
119
+ </div>
120
+ </td>
121
+ <td><?php echo $link->clicks; ?></td>
122
+ <td><a href="?page=<?php echo PRLI_PLUGIN_NAME; ?>/prli-links.php&group=<?php echo $link->group_id; ?>"><?php echo $link->group_name; ?></a></td>
123
+ <td><span title="<?php echo ($link->track_as_img?'':(($link->redirect_type == '307')?"Temporary Redirection (307)":"Permanent Redirection (301)")); ?>"><?php echo ($link->track_as_img?'':(($link->redirect_type == '307')?"T":"P")); ?></span></td>
124
+ <td><?php echo $link->created_at; ?></td>
125
+ </td>
126
+ <td><input type='text' style="font-size: 10px; width: 100%;" readonly="true" onclick='this.select();' onfocus='this.select();' value='<?php echo $pretty_link_url; ?>' /><br/>
127
+ <?php if( !$link->track_as_img )
128
+ {
129
+ ?>
130
+ <span style="font-size: 8px;"><strong>Target URL:</strong> <? echo $link->url; ?></span></td>
131
+ <?php
132
+ }
133
+ ?>
134
+ </tr>
135
+ <?php
136
+ }
137
+ }
138
+ ?>
139
+ <tfoot>
140
+ <tr>
141
+ <th class="manage-column">Name</th>
142
+ <th class="manage-column">Hits</th>
143
+ <th class="manage-column">Group</th>
144
+ <th class="manage-column" title="Redirect">Re</th>
145
+ <th class="manage-column">Created</th>
146
+ <th class="manage-column">Links</th>
147
+ </tr>
148
+ </tfoot>
149
+ </table>
150
+ <?php
151
+ require(PRLI_VIEWS_PATH.'/shared/table-nav.php');
152
+ ?>
153
+
154
+ </div>
classes/views/prli-links/new.php ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <div class="wrap">
2
+ <h2><img src="<?php echo PRLI_URL.'/images/pretty-link-med.png'; ?>"/>&nbsp;Pretty Link: Add Link</h2>
3
+
4
+ <?php
5
+ require(PRLI_VIEWS_PATH.'/shared/errors.php');
6
+ ?>
7
+
8
+ <form name="form1" method="post" action="?page=<?php echo PRLI_PLUGIN_NAME ?>/prli-links.php">
9
+ <input type="hidden" name="action" value="create">
10
+ <?php wp_nonce_field('update-options'); ?>
11
+ <input type="hidden" name="id" value="<?php echo $id; ?>">
12
+
13
+ <?php
14
+ require(PRLI_VIEWS_PATH.'/prli-links/form.php');
15
+ ?>
16
+
17
+ <p class="submit">
18
+ <input type="submit" name="Submit" value="Create" />&nbsp;or&nbsp;<a href="?page=<?php echo PRLI_PLUGIN_NAME ?>/prli-links.php">Cancel</a>
19
+ </p>
20
+
21
+ </form>
22
+ </div>
classes/views/prli-links/ultra-cloak.php ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2
+ <html>
3
+ <head>
4
+ <meta http-equiv="content-type" content="text/html; charset=UTF-8">
5
+ <title><?php echo $pretty_link->name; ?></title>
6
+ </head>
7
+ <frameset rows="*" framespacing=0 frameborder=0>
8
+ <frame src="<?php echo $pretty_link->url.$param_string; ?>" frameborder=0 marginwidth=0 marginheight=0>
9
+ <noframes>Your browser does not support frames. Click <a href="<?php echo $pretty_link->url.$param_string; ?>">here</a> to view the page.</noframes>
10
+ </frameset>
11
+ </html>
classes/views/shared/errors.php ADDED
@@ -0,0 +1,19 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ if( $errors != null and count($errors) > 0 )
3
+ {
4
+ ?>
5
+ <div class="error">
6
+ <ul>
7
+ <?php
8
+ foreach( $errors as $error )
9
+ {
10
+ ?>
11
+ <li><strong>ERROR</strong>: <?php print $error; ?></li>
12
+ <?php
13
+ }
14
+ ?>
15
+ </ul>
16
+ </div>
17
+ <?php
18
+ }
19
+ ?>
classes/views/shared/table-nav.php ADDED
@@ -0,0 +1,93 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ // Only show the pager bar if there is more than 1 page
3
+ if($page_count > 1)
4
+ {
5
+ ?>
6
+ <div class="tablenav"<?php echo (isset($navstyle)?" style=\"$navstyle\"":''); ?>>
7
+ <div class='tablenav-pages'><span class="displaying-num">Displaying <?php print "$page_first_record&#8211;$page_last_record of $record_count"; ?></span>
8
+
9
+ <?php
10
+ // Only show the prev page button if the current page is not the first page
11
+ if($current_page > 1)
12
+ {
13
+ ?>
14
+ <a class='prev page-numbers' href='?page=<?php print PRLI_PLUGIN_NAME; ?>/<?php print $controller_file . $page_params; ?>&paged=<?php print($current_page-1); ?>'>&laquo;</a>
15
+ <?php
16
+ }
17
+
18
+ // First page is always displayed
19
+ if($current_page==1)
20
+ {
21
+ ?>
22
+ <span class='page-numbers current'>1</span>
23
+ <?php
24
+ }
25
+ else
26
+ {
27
+ ?>
28
+ <a class='page-numbers' href='?page=<?php print PRLI_PLUGIN_NAME; ?>/<?php print $controller_file . $page_params; ?>&paged=1'>1</a>
29
+ <?php
30
+ }
31
+
32
+ // If the current page is more than 2 spaces away from the first page then we put some dots in here
33
+ if($current_page >= 5)
34
+ {
35
+ ?>
36
+ <span class='page-numbers dots'>...</span>
37
+ <?php
38
+ }
39
+
40
+ // display the current page icon and the 2 pages beneath and above it
41
+ $low_page = (($current_page >= 5)?($current_page-2):2);
42
+ $high_page = ((($current_page + 2) < ($page_count-1))?($current_page+2):($page_count-1));
43
+ for($i = $low_page; $i <= $high_page; $i++)
44
+ {
45
+ if($current_page==$i)
46
+ {
47
+ ?>
48
+ <span class='page-numbers current'><?php print $i; ?></span>
49
+ <?php
50
+ }
51
+ else
52
+ {
53
+ ?>
54
+ <a class='page-numbers' href='?page=<?php print PRLI_PLUGIN_NAME; ?>/<?php print $controller_file . $page_params; ?>&paged=<?php print $i; ?>'><?php print $i; ?></a>
55
+ <?php
56
+ }
57
+ }
58
+
59
+ // If the current page is more than 2 away from the last page then show ellipsis
60
+ if($current_page < ($page_count - 3))
61
+ {
62
+ ?>
63
+ <span class='page-numbers dots'>...</span>
64
+ <?php
65
+ }
66
+
67
+ // Display the last page icon
68
+ if($current_page == $page_count)
69
+ {
70
+ ?>
71
+ <span class='page-numbers current'><?php print $page_count; ?></span>
72
+ <?php
73
+ }
74
+ else
75
+ {
76
+ ?>
77
+ <a class='page-numbers' href='?page=<?php print PRLI_PLUGIN_NAME; ?>/<?php print $controller_file . $page_params; ?>&paged=<?php print $page_count; ?>'><?php print $page_count; ?></a>
78
+ <?php
79
+ }
80
+
81
+ // Display the next page icon if there is a next page
82
+ if($current_page < $page_count)
83
+ {
84
+ ?>
85
+ <a class='next page-numbers' href='?page=<?php print PRLI_PLUGIN_NAME; ?>/<?php print $controller_file . $page_params; ?>&paged=<?php print($current_page + 1); ?>'>&raquo;</a>
86
+ <?php
87
+ }
88
+ ?>
89
+ </div>
90
+ </div>
91
+ <?php
92
+ }
93
+ ?>
images/arrow_down.png ADDED
Binary file
images/arrow_up.png ADDED
Binary file
images/bar_background.png ADDED
Binary file
images/bar_map.png ADDED
Binary file
images/bookmark.png ADDED
Binary file
images/browser/abilon.png ADDED
Binary file
images/browser/adobe.png ADDED
Binary file
images/browser/akregator.png ADDED
Binary file
images/browser/alcatel.png ADDED
Binary file
images/browser/amaya.png ADDED
Binary file
images/browser/amigavoyager.png ADDED
Binary file
images/browser/analogx.png ADDED
Binary file
images/browser/apt.png ADDED
Binary file
images/browser/avant.png ADDED
Binary file
images/browser/aweb.png ADDED
Binary file
images/browser/bpftp.png ADDED
Binary file
images/browser/bytel.png ADDED
Binary file
images/browser/chimera.png ADDED
Binary file
images/browser/chrome.png ADDED
Binary file
images/browser/cyberdog.png ADDED
Binary file
images/browser/da.png ADDED
Binary file
images/browser/dillo.png ADDED
Binary file
images/browser/doris.png ADDED
Binary file
images/browser/dreamcast.png ADDED
Binary file
images/browser/ecatch.png ADDED
Binary file
images/browser/encompass.png ADDED
Binary file
images/browser/epiphany.png ADDED
Binary file
images/browser/ericsson.png ADDED
Binary file
images/browser/feeddemon.png ADDED
Binary file
images/browser/feedreader.png ADDED
Binary file
images/browser/firefox.png ADDED
Binary file
images/browser/flashget.png ADDED
Binary file
images/browser/fpexpress.png ADDED
Binary file
images/browser/fresco.png ADDED
Binary file
images/browser/freshdownload.png ADDED
Binary file
images/browser/frontpage.png ADDED
Binary file
images/browser/galeon.png ADDED
Binary file
images/browser/getright.png ADDED
Binary file
images/browser/gnome.png ADDED
Binary file
images/browser/gnus.png ADDED
Binary file
images/browser/gozilla.png ADDED
Binary file
images/browser/hotjava.png ADDED
Binary file
images/browser/httrack.png ADDED
Binary file
images/browser/ibrowse.png ADDED
Binary file
images/browser/icab.png ADDED
Binary file
images/browser/java.png ADDED
Binary file
images/browser/jetbrains_omea.png ADDED
Binary file
images/browser/kmeleon.png ADDED
Binary file
images/browser/konqueror.png ADDED
Binary file
images/browser/leechget.png ADDED
Binary file
images/browser/lg.png ADDED
Binary file
images/browser/lotusnotes.png ADDED
Binary file
images/browser/lynx.png ADDED
Binary file
images/browser/macweb.png ADDED
Binary file
images/browser/mediaplayer.png ADDED
Binary file
images/browser/motorola.png ADDED
Binary file
images/browser/mozilla.png ADDED
Binary file
images/browser/mplayer.png ADDED
Binary file
images/browser/msie.png ADDED
Binary file
images/browser/msie_large.png ADDED
Binary file
images/browser/multizilla.png ADDED
Binary file
images/browser/ncsa_mosaic.png ADDED
Binary file
images/browser/neon.png ADDED
Binary file
images/browser/netnewswire.png ADDED
Binary file
images/browser/netpositive.png ADDED
Binary file
images/browser/netscape.png ADDED
Binary file
images/browser/netscape_large.png ADDED
Binary file
images/browser/netshow.png ADDED
Binary file
images/browser/newsfire.png ADDED
Binary file
images/browser/newsgator.png ADDED
Binary file
images/browser/newzcrawler.png ADDED
Binary file
images/browser/nokia.png ADDED
Binary file
images/browser/notavailable.png ADDED
Binary file
images/browser/omniweb.png ADDED
Binary file
images/browser/opera.png ADDED
Binary file
images/browser/panasonic.png ADDED
Binary file
images/browser/pdaphone.png ADDED
Binary file
images/browser/philips.png ADDED
Binary file
images/browser/phoenix.png ADDED
Binary file
images/browser/pluck.png ADDED
Binary file
images/browser/pulpfiction.png ADDED
Binary file
images/browser/real.png ADDED
Binary file
images/browser/rss.png ADDED
Binary file
images/browser/rssbandit.png ADDED
Binary file
images/browser/rssowl.png ADDED
Binary file
images/browser/rssreader.png ADDED
Binary file
images/browser/rssxpress.png ADDED
Binary file
images/browser/safari.png ADDED
Binary file
images/browser/sagem.png ADDED
Binary file
images/browser/samsung.png ADDED
Binary file
images/browser/sharp.png ADDED
Binary file
images/browser/sharpreader.png ADDED
Binary file
images/browser/shrook.png ADDED
Binary file
images/browser/siemens.png ADDED
Binary file
images/browser/sony.png ADDED
Binary file
images/browser/staroffice.png ADDED
Binary file
images/browser/subversion.png ADDED
Binary file
images/browser/teleport.png ADDED
Binary file
images/browser/trium.png ADDED
Binary file
images/browser/unknown.png ADDED
Binary file
images/browser/w3c.png ADDED
Binary file
images/browser/webcopier.png ADDED
Binary file
images/browser/webreaper.png ADDED
Binary file
images/browser/webtv.png ADDED
Binary file
images/browser/webzip.png ADDED
Binary file
images/browser/winxbox.png ADDED
Binary file
images/browser/wizz.png ADDED
Binary file
images/forward_params.png ADDED
Binary file
images/os/aix.png ADDED
Binary file
images/os/amigaos.png ADDED
Binary file
images/os/apple.png ADDED
Binary file
images/os/atari.png ADDED
Binary file
images/os/beos.png ADDED
Binary file
images/os/bsd.png ADDED
Binary file
images/os/bsdfreebsd.png ADDED
Binary file
images/os/bsdi.png ADDED
Binary file
images/os/bsdnetbsd.png ADDED
Binary file
images/os/bsdopenbsd.png ADDED
Binary file
images/os/commodore.png ADDED
Binary file
images/os/cpm.png ADDED
Binary file
images/os/debian.png ADDED
Binary file
images/os/digital.png ADDED
Binary file
images/os/dos.png ADDED
Binary file
images/os/dreamcast.png ADDED
Binary file
images/os/freebsd.png ADDED
Binary file
images/os/gnu.png ADDED
Binary file
images/os/hpux.png ADDED
Binary file
images/os/ibm.png ADDED
Binary file
images/os/imode.png ADDED
Binary file
images/os/irix.png ADDED
Binary file
images/os/java.png ADDED
Binary file
images/os/kfreebsd.png ADDED
Binary file
images/os/linux.png ADDED
Binary file
images/os/linuxcentos.png ADDED
Binary file
images/os/linuxdebian.png ADDED
Binary file
images/os/linuxfedora.png ADDED
Binary file
images/os/linuxgentoo.png ADDED
Binary file
images/os/linuxmandr.png ADDED
Binary file
images/os/linuxredhat.png ADDED
Binary file
images/os/linuxsuse.png ADDED
Binary file
images/os/linuxubuntu.png ADDED
Binary file
images/os/mac.png ADDED
Binary file
images/os/macintosh.png ADDED
Binary file
images/os/macosx.png ADDED
Binary file
images/os/netbsd.png ADDED
Binary file
images/os/netware.png ADDED
Binary file
images/os/next.png ADDED
Binary file
images/os/openbsd.png ADDED
Binary file
images/os/os2.png ADDED
Binary file
images/os/osf.png ADDED
Binary file
images/os/psp.png ADDED
Binary file
images/os/qnx.png ADDED
Binary file
images/os/riscos.png ADDED
Binary file
images/os/sco.png ADDED
Binary file
images/os/sunos.png ADDED
Binary file
images/os/symbian.png ADDED
Binary file
images/os/unix.png ADDED
Binary file
images/os/unknown.png ADDED
Binary file
images/os/vms.png ADDED
Binary file
images/os/webtv.png ADDED
Binary file
images/os/win.png ADDED
Binary file
images/os/win16.png ADDED
Binary file
images/os/win2000.png ADDED
Binary file
images/os/win2003.png ADDED
Binary file
images/os/win95.png ADDED
Binary file
images/os/win98.png ADDED
Binary file
images/os/wince.png ADDED
Binary file
images/os/winlong.png ADDED
Binary file
images/os/winme.png ADDED
Binary file
images/os/winnt.png ADDED
Binary file
images/os/winunknown.png ADDED
Binary file
images/os/winxbox.png ADDED
Binary file
images/os/winxp.png ADDED
Binary file
images/pixel_track.png ADDED
Binary file
images/pretty-link-48x48.png ADDED
Binary file
images/pretty-link-add.png ADDED
Binary file
images/pretty-link-med.png ADDED
Binary file
images/pretty-link-small.png ADDED
Binary file
images/url_icon.gif ADDED
Binary file
includes/jquery/css/ui-lightness/images/ui-bg_diagonals-thick_18_b81900_40x40.png ADDED
Binary file
includes/jquery/css/ui-lightness/images/ui-bg_diagonals-thick_20_666666_40x40.png ADDED
Binary file
includes/jquery/css/ui-lightness/images/ui-bg_flat_10_000000_40x100.png ADDED
Binary file
includes/jquery/css/ui-lightness/images/ui-bg_glass_100_f6f6f6_1x400.png ADDED
Binary file
includes/jquery/css/ui-lightness/images/ui-bg_glass_100_fdf5ce_1x400.png ADDED
Binary file
includes/jquery/css/ui-lightness/images/ui-bg_glass_65_ffffff_1x400.png ADDED
Binary file
includes/jquery/css/ui-lightness/images/ui-bg_gloss-wave_35_f6a828_500x100.png ADDED
Binary file
includes/jquery/css/ui-lightness/images/ui-bg_highlight-soft_100_eeeeee_1x100.png ADDED
Binary file
includes/jquery/css/ui-lightness/images/ui-bg_highlight-soft_75_ffe45c_1x100.png ADDED
Binary file
includes/jquery/css/ui-lightness/images/ui-icons_222222_256x240.png ADDED
Binary file
includes/jquery/css/ui-lightness/images/ui-icons_228ef1_256x240.png ADDED
Binary file
includes/jquery/css/ui-lightness/images/ui-icons_ef8c08_256x240.png ADDED
Binary file
includes/jquery/css/ui-lightness/images/ui-icons_ffd27a_256x240.png ADDED
Binary file
includes/jquery/css/ui-lightness/images/ui-icons_ffffff_256x240.png ADDED
Binary file
includes/jquery/css/ui-lightness/jquery-ui-1.7.1.custom.css ADDED
@@ -0,0 +1,404 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*
2
+ * jQuery UI CSS Framework
3
+ * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
4
+ * Dual licensed under the MIT (MIT-LICENSE.txt) and GPL (GPL-LICENSE.txt) licenses.
5
+ */
6
+
7
+ /* Layout helpers
8
+ ----------------------------------*/
9
+ .ui-helper-hidden { display: none; }
10
+ .ui-helper-hidden-accessible { position: absolute; left: -99999999px; }
11
+ .ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; }
12
+ .ui-helper-clearfix:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; }
13
+ .ui-helper-clearfix { display: inline-block; }
14
+ /* required comment for clearfix to work in Opera \*/
15
+ * html .ui-helper-clearfix { height:1%; }
16
+ .ui-helper-clearfix { display:block; }
17
+ /* end clearfix */
18
+ .ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); }
19
+
20
+
21
+ /* Interaction Cues
22
+ ----------------------------------*/
23
+ .ui-state-disabled { cursor: default !important; }
24
+
25
+
26
+ /* Icons
27
+ ----------------------------------*/
28
+
29
+ /* states and images */
30
+ .ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; }
31
+
32
+
33
+ /* Misc visuals
34
+ ----------------------------------*/
35
+
36
+ /* Overlays */
37
+ .ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; }
38
+
39
+ /*
40
+ * jQuery UI CSS Framework
41
+ * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
42
+ * Dual licensed under the MIT (MIT-LICENSE.txt) and GPL (GPL-LICENSE.txt) licenses.
43
+ * To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Trebuchet%20MS,%20Tahoma,%20Verdana,%20Arial,%20sans-serif&fwDefault=bold&fsDefault=1.1em&cornerRadius=4px&bgColorHeader=f6a828&bgTextureHeader=12_gloss_wave.png&bgImgOpacityHeader=35&borderColorHeader=e78f08&fcHeader=ffffff&iconColorHeader=ffffff&bgColorContent=eeeeee&bgTextureContent=03_highlight_soft.png&bgImgOpacityContent=100&borderColorContent=dddddd&fcContent=333333&iconColorContent=222222&bgColorDefault=f6f6f6&bgTextureDefault=02_glass.png&bgImgOpacityDefault=100&borderColorDefault=cccccc&fcDefault=1c94c4&iconColorDefault=ef8c08&bgColorHover=fdf5ce&bgTextureHover=02_glass.png&bgImgOpacityHover=100&borderColorHover=fbcb09&fcHover=c77405&iconColorHover=ef8c08&bgColorActive=ffffff&bgTextureActive=02_glass.png&bgImgOpacityActive=65&borderColorActive=fbd850&fcActive=eb8f00&iconColorActive=ef8c08&bgColorHighlight=ffe45c&bgTextureHighlight=03_highlight_soft.png&bgImgOpacityHighlight=75&borderColorHighlight=fed22f&fcHighlight=363636&iconColorHighlight=228ef1&bgColorError=b81900&bgTextureError=08_diagonals_thick.png&bgImgOpacityError=18&borderColorError=cd0a0a&fcError=ffffff&iconColorError=ffd27a&bgColorOverlay=666666&bgTextureOverlay=08_diagonals_thick.png&bgImgOpacityOverlay=20&opacityOverlay=50&bgColorShadow=000000&bgTextureShadow=01_flat.png&bgImgOpacityShadow=10&opacityShadow=20&thicknessShadow=5px&offsetTopShadow=-5px&offsetLeftShadow=-5px&cornerRadiusShadow=5px
44
+ */
45
+
46
+
47
+ /* Component containers
48
+ ----------------------------------*/
49
+ .ui-widget { font-family: Trebuchet MS, Tahoma, Verdana, Arial, sans-serif; font-size: 1.1em; }
50
+ .ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: Trebuchet MS, Tahoma, Verdana, Arial, sans-serif; font-size: 1em; }
51
+ .ui-widget-content { border: 1px solid #dddddd; background: #eeeeee url(images/ui-bg_highlight-soft_100_eeeeee_1x100.png) 50% top repeat-x; color: #333333; }
52
+ .ui-widget-content a { color: #333333; }
53
+ .ui-widget-header { border: 1px solid #e78f08; background: #f6a828 url(images/ui-bg_gloss-wave_35_f6a828_500x100.png) 50% 50% repeat-x; color: #ffffff; font-weight: bold; }
54
+ .ui-widget-header a { color: #ffffff; }
55
+
56
+ /* Interaction states
57
+ ----------------------------------*/
58
+ .ui-state-default, .ui-widget-content .ui-state-default { border: 1px solid #cccccc; background: #f6f6f6 url(images/ui-bg_glass_100_f6f6f6_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #1c94c4; outline: none; }
59
+ .ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #1c94c4; text-decoration: none; outline: none; }
60
+ .ui-state-hover, .ui-widget-content .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus { border: 1px solid #fbcb09; background: #fdf5ce url(images/ui-bg_glass_100_fdf5ce_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #c77405; outline: none; }
61
+ .ui-state-hover a, .ui-state-hover a:hover { color: #c77405; text-decoration: none; outline: none; }
62
+ .ui-state-active, .ui-widget-content .ui-state-active { border: 1px solid #fbd850; background: #ffffff url(images/ui-bg_glass_65_ffffff_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #eb8f00; outline: none; }
63
+ .ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #eb8f00; outline: none; text-decoration: none; }
64
+
65
+ /* Interaction Cues
66
+ ----------------------------------*/
67
+ .ui-state-highlight, .ui-widget-content .ui-state-highlight {border: 1px solid #fed22f; background: #ffe45c url(images/ui-bg_highlight-soft_75_ffe45c_1x100.png) 50% top repeat-x; color: #363636; }
68
+ .ui-state-highlight a, .ui-widget-content .ui-state-highlight a { color: #363636; }
69
+ .ui-state-error, .ui-widget-content .ui-state-error {border: 1px solid #cd0a0a; background: #b81900 url(images/ui-bg_diagonals-thick_18_b81900_40x40.png) 50% 50% repeat; color: #ffffff; }
70
+ .ui-state-error a, .ui-widget-content .ui-state-error a { color: #ffffff; }
71
+ .ui-state-error-text, .ui-widget-content .ui-state-error-text { color: #ffffff; }
72
+ .ui-state-disabled, .ui-widget-content .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; }
73
+ .ui-priority-primary, .ui-widget-content .ui-priority-primary { font-weight: bold; }
74
+ .ui-priority-secondary, .ui-widget-content .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; }
75
+
76
+ /* Icons
77
+ ----------------------------------*/
78
+
79
+ /* states and images */
80
+ .ui-icon { width: 16px; height: 16px; background-image: url(images/ui-icons_222222_256x240.png); }
81
+ .ui-widget-content .ui-icon {background-image: url(images/ui-icons_222222_256x240.png); }
82
+ .ui-widget-header .ui-icon {background-image: url(images/ui-icons_ffffff_256x240.png); }
83
+ .ui-state-default .ui-icon { background-image: url(images/ui-icons_ef8c08_256x240.png); }
84
+ .ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(images/ui-icons_ef8c08_256x240.png); }
85
+ .ui-state-active .ui-icon {background-image: url(images/ui-icons_ef8c08_256x240.png); }
86
+ .ui-state-highlight .ui-icon {background-image: url(images/ui-icons_228ef1_256x240.png); }
87
+ .ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(images/ui-icons_ffd27a_256x240.png); }
88
+
89
+ /* positioning */
90
+ .ui-icon-carat-1-n { background-position: 0 0; }
91
+ .ui-icon-carat-1-ne { background-position: -16px 0; }
92
+ .ui-icon-carat-1-e { background-position: -32px 0; }
93
+ .ui-icon-carat-1-se { background-position: -48px 0; }
94
+ .ui-icon-carat-1-s { background-position: -64px 0; }
95
+ .ui-icon-carat-1-sw { background-position: -80px 0; }
96
+ .ui-icon-carat-1-w { background-position: -96px 0; }
97
+ .ui-icon-carat-1-nw { background-position: -112px 0; }
98
+ .ui-icon-carat-2-n-s { background-position: -128px 0; }
99
+ .ui-icon-carat-2-e-w { background-position: -144px 0; }
100
+ .ui-icon-triangle-1-n { background-position: 0 -16px; }
101
+ .ui-icon-triangle-1-ne { background-position: -16px -16px; }
102
+ .ui-icon-triangle-1-e { background-position: -32px -16px; }
103
+ .ui-icon-triangle-1-se { background-position: -48px -16px; }
104
+ .ui-icon-triangle-1-s { background-position: -64px -16px; }
105
+ .ui-icon-triangle-1-sw { background-position: -80px -16px; }
106
+ .ui-icon-triangle-1-w { background-position: -96px -16px; }
107
+ .ui-icon-triangle-1-nw { background-position: -112px -16px; }
108
+ .ui-icon-triangle-2-n-s { background-position: -128px -16px; }
109
+ .ui-icon-triangle-2-e-w { background-position: -144px -16px; }
110
+ .ui-icon-arrow-1-n { background-position: 0 -32px; }
111
+ .ui-icon-arrow-1-ne { background-position: -16px -32px; }
112
+ .ui-icon-arrow-1-e { background-position: -32px -32px; }
113
+ .ui-icon-arrow-1-se { background-position: -48px -32px; }
114
+ .ui-icon-arrow-1-s { background-position: -64px -32px; }
115
+ .ui-icon-arrow-1-sw { background-position: -80px -32px; }
116
+ .ui-icon-arrow-1-w { background-position: -96px -32px; }
117
+ .ui-icon-arrow-1-nw { background-position: -112px -32px; }
118
+ .ui-icon-arrow-2-n-s { background-position: -128px -32px; }
119
+ .ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }
120
+ .ui-icon-arrow-2-e-w { background-position: -160px -32px; }
121
+ .ui-icon-arrow-2-se-nw { background-position: -176px -32px; }
122
+ .ui-icon-arrowstop-1-n { background-position: -192px -32px; }
123
+ .ui-icon-arrowstop-1-e { background-position: -208px -32px; }
124
+ .ui-icon-arrowstop-1-s { background-position: -224px -32px; }
125
+ .ui-icon-arrowstop-1-w { background-position: -240px -32px; }
126
+ .ui-icon-arrowthick-1-n { background-position: 0 -48px; }
127
+ .ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
128
+ .ui-icon-arrowthick-1-e { background-position: -32px -48px; }
129
+ .ui-icon-arrowthick-1-se { background-position: -48px -48px; }
130
+ .ui-icon-arrowthick-1-s { background-position: -64px -48px; }
131
+ .ui-icon-arrowthick-1-sw { background-position: -80px -48px; }
132
+ .ui-icon-arrowthick-1-w { background-position: -96px -48px; }
133
+ .ui-icon-arrowthick-1-nw { background-position: -112px -48px; }
134
+ .ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }
135
+ .ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }
136
+ .ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }
137
+ .ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }
138
+ .ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }
139
+ .ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }
140
+ .ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }
141
+ .ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }
142
+ .ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }
143
+ .ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }
144
+ .ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }
145
+ .ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }
146
+ .ui-icon-arrowreturn-1-w { background-position: -64px -64px; }
147
+ .ui-icon-arrowreturn-1-n { background-position: -80px -64px; }
148
+ .ui-icon-arrowreturn-1-e { background-position: -96px -64px; }
149
+ .ui-icon-arrowreturn-1-s { background-position: -112px -64px; }
150
+ .ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }
151
+ .ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }
152
+ .ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }
153
+ .ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }
154
+ .ui-icon-arrow-4 { background-position: 0 -80px; }
155
+ .ui-icon-arrow-4-diag { background-position: -16px -80px; }
156
+ .ui-icon-extlink { background-position: -32px -80px; }
157
+ .ui-icon-newwin { background-position: -48px -80px; }
158
+ .ui-icon-refresh { background-position: -64px -80px; }
159
+ .ui-icon-shuffle { background-position: -80px -80px; }
160
+ .ui-icon-transfer-e-w { background-position: -96px -80px; }
161
+ .ui-icon-transferthick-e-w { background-position: -112px -80px; }
162
+ .ui-icon-folder-collapsed { background-position: 0 -96px; }
163
+ .ui-icon-folder-open { background-position: -16px -96px; }
164
+ .ui-icon-document { background-position: -32px -96px; }
165
+ .ui-icon-document-b { background-position: -48px -96px; }
166
+ .ui-icon-note { background-position: -64px -96px; }
167
+ .ui-icon-mail-closed { background-position: -80px -96px; }
168
+ .ui-icon-mail-open { background-position: -96px -96px; }
169
+ .ui-icon-suitcase { background-position: -112px -96px; }
170
+ .ui-icon-comment { background-position: -128px -96px; }
171
+ .ui-icon-person { background-position: -144px -96px; }
172
+ .ui-icon-print { background-position: -160px -96px; }
173
+ .ui-icon-trash { background-position: -176px -96px; }
174
+ .ui-icon-locked { background-position: -192px -96px; }
175
+ .ui-icon-unlocked { background-position: -208px -96px; }
176
+ .ui-icon-bookmark { background-position: -224px -96px; }
177
+ .ui-icon-tag { background-position: -240px -96px; }
178
+ .ui-icon-home { background-position: 0 -112px; }
179
+ .ui-icon-flag { background-position: -16px -112px; }
180
+ .ui-icon-calendar { background-position: -32px -112px; }
181
+ .ui-icon-cart { background-position: -48px -112px; }
182
+ .ui-icon-pencil { background-position: -64px -112px; }
183
+ .ui-icon-clock { background-position: -80px -112px; }
184
+ .ui-icon-disk { background-position: -96px -112px; }
185
+ .ui-icon-calculator { background-position: -112px -112px; }
186
+ .ui-icon-zoomin { background-position: -128px -112px; }
187
+ .ui-icon-zoomout { background-position: -144px -112px; }
188
+ .ui-icon-search { background-position: -160px -112px; }
189
+ .ui-icon-wrench { background-position: -176px -112px; }
190
+ .ui-icon-gear { background-position: -192px -112px; }
191
+ .ui-icon-heart { background-position: -208px -112px; }
192
+ .ui-icon-star { background-position: -224px -112px; }
193
+ .ui-icon-link { background-position: -240px -112px; }
194
+ .ui-icon-cancel { background-position: 0 -128px; }
195
+ .ui-icon-plus { background-position: -16px -128px; }
196
+ .ui-icon-plusthick { background-position: -32px -128px; }
197
+ .ui-icon-minus { background-position: -48px -128px; }
198
+ .ui-icon-minusthick { background-position: -64px -128px; }
199
+ .ui-icon-close { background-position: -80px -128px; }
200
+ .ui-icon-closethick { background-position: -96px -128px; }
201
+ .ui-icon-key { background-position: -112px -128px; }
202
+ .ui-icon-lightbulb { background-position: -128px -128px; }
203
+ .ui-icon-scissors { background-position: -144px -128px; }
204
+ .ui-icon-clipboard { background-position: -160px -128px; }
205
+ .ui-icon-copy { background-position: -176px -128px; }
206
+ .ui-icon-contact { background-position: -192px -128px; }
207
+ .ui-icon-image { background-position: -208px -128px; }
208
+ .ui-icon-video { background-position: -224px -128px; }
209
+ .ui-icon-script { background-position: -240px -128px; }
210
+ .ui-icon-alert { background-position: 0 -144px; }
211
+ .ui-icon-info { background-position: -16px -144px; }
212
+ .ui-icon-notice { background-position: -32px -144px; }
213
+ .ui-icon-help { background-position: -48px -144px; }
214
+ .ui-icon-check { background-position: -64px -144px; }
215
+ .ui-icon-bullet { background-position: -80px -144px; }
216
+ .ui-icon-radio-off { background-position: -96px -144px; }
217
+ .ui-icon-radio-on { background-position: -112px -144px; }
218
+ .ui-icon-pin-w { background-position: -128px -144px; }
219
+ .ui-icon-pin-s { background-position: -144px -144px; }
220
+ .ui-icon-play { background-position: 0 -160px; }
221
+ .ui-icon-pause { background-position: -16px -160px; }
222
+ .ui-icon-seek-next { background-position: -32px -160px; }
223
+ .ui-icon-seek-prev { background-position: -48px -160px; }
224
+ .ui-icon-seek-end { background-position: -64px -160px; }
225
+ .ui-icon-seek-first { background-position: -80px -160px; }
226
+ .ui-icon-stop { background-position: -96px -160px; }
227
+ .ui-icon-eject { background-position: -112px -160px; }
228
+ .ui-icon-volume-off { background-position: -128px -160px; }
229
+ .ui-icon-volume-on { background-position: -144px -160px; }
230
+ .ui-icon-power { background-position: 0 -176px; }
231
+ .ui-icon-signal-diag { background-position: -16px -176px; }
232
+ .ui-icon-signal { background-position: -32px -176px; }
233
+ .ui-icon-battery-0 { background-position: -48px -176px; }
234
+ .ui-icon-battery-1 { background-position: -64px -176px; }
235
+ .ui-icon-battery-2 { background-position: -80px -176px; }
236
+ .ui-icon-battery-3 { background-position: -96px -176px; }
237
+ .ui-icon-circle-plus { background-position: 0 -192px; }
238
+ .ui-icon-circle-minus { background-position: -16px -192px; }
239
+ .ui-icon-circle-close { background-position: -32px -192px; }
240
+ .ui-icon-circle-triangle-e { background-position: -48px -192px; }
241
+ .ui-icon-circle-triangle-s { background-position: -64px -192px; }
242
+ .ui-icon-circle-triangle-w { background-position: -80px -192px; }
243
+ .ui-icon-circle-triangle-n { background-position: -96px -192px; }
244
+ .ui-icon-circle-arrow-e { background-position: -112px -192px; }
245
+ .ui-icon-circle-arrow-s { background-position: -128px -192px; }
246
+ .ui-icon-circle-arrow-w { background-position: -144px -192px; }
247
+ .ui-icon-circle-arrow-n { background-position: -160px -192px; }
248
+ .ui-icon-circle-zoomin { background-position: -176px -192px; }
249
+ .ui-icon-circle-zoomout { background-position: -192px -192px; }
250
+ .ui-icon-circle-check { background-position: -208px -192px; }
251
+ .ui-icon-circlesmall-plus { background-position: 0 -208px; }
252
+ .ui-icon-circlesmall-minus { background-position: -16px -208px; }
253
+ .ui-icon-circlesmall-close { background-position: -32px -208px; }
254
+ .ui-icon-squaresmall-plus { background-position: -48px -208px; }
255
+ .ui-icon-squaresmall-minus { background-position: -64px -208px; }
256
+ .ui-icon-squaresmall-close { background-position: -80px -208px; }
257
+ .ui-icon-grip-dotted-vertical { background-position: 0 -224px; }
258
+ .ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }
259
+ .ui-icon-grip-solid-vertical { background-position: -32px -224px; }
260
+ .ui-icon-grip-solid-horizontal { background-position: -48px -224px; }
261
+ .ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }
262
+ .ui-icon-grip-diagonal-se { background-position: -80px -224px; }
263
+
264
+
265
+ /* Misc visuals
266
+ ----------------------------------*/
267
+
268
+ /* Corner radius */
269
+ .ui-corner-tl { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; }
270
+ .ui-corner-tr { -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; }
271
+ .ui-corner-bl { -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; }
272
+ .ui-corner-br { -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; }
273
+ .ui-corner-top { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; }
274
+ .ui-corner-bottom { -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; }
275
+ .ui-corner-right { -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; }
276
+ .ui-corner-left { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; }
277
+ .ui-corner-all { -moz-border-radius: 4px; -webkit-border-radius: 4px; }
278
+
279
+ /* Overlays */
280
+ .ui-widget-overlay { background: #666666 url(images/ui-bg_diagonals-thick_20_666666_40x40.png) 50% 50% repeat; opacity: .50;filter:Alpha(Opacity=50); }
281
+ .ui-widget-shadow { margin: -5px 0 0 -5px; padding: 5px; background: #000000 url(images/ui-bg_flat_10_000000_40x100.png) 50% 50% repeat-x; opacity: .20;filter:Alpha(Opacity=20); -moz-border-radius: 5px; -webkit-border-radius: 5px; }/* Accordion
282
+ ----------------------------------*/
283
+ .ui-accordion .ui-accordion-header { cursor: pointer; position: relative; margin-top: 1px; zoom: 1; }
284
+ .ui-accordion .ui-accordion-li-fix { display: inline; }
285
+ .ui-accordion .ui-accordion-header-active { border-bottom: 0 !important; }
286
+ .ui-accordion .ui-accordion-header a { display: block; font-size: 1em; padding: .5em .5em .5em 2.2em; }
287
+ .ui-accordion .ui-accordion-header .ui-icon { position: absolute; left: .5em; top: 50%; margin-top: -8px; }
288
+ .ui-accordion .ui-accordion-content { padding: 1em 2.2em; border-top: 0; margin-top: -2px; position: relative; top: 1px; margin-bottom: 2px; overflow: auto; display: none; }
289
+ .ui-accordion .ui-accordion-content-active { display: block; }/* Datepicker
290
+ ----------------------------------*/
291
+ .ui-datepicker { width: 17em; padding: .2em .2em 0; }
292
+ .ui-datepicker .ui-datepicker-header { position:relative; padding:.2em 0; }
293
+ .ui-datepicker .ui-datepicker-prev, .ui-datepicker .ui-datepicker-next { position:absolute; top: 2px; width: 1.8em; height: 1.8em; }
294
+ .ui-datepicker .ui-datepicker-prev-hover, .ui-datepicker .ui-datepicker-next-hover { top: 1px; }
295
+ .ui-datepicker .ui-datepicker-prev { left:2px; }
296
+ .ui-datepicker .ui-datepicker-next { right:2px; }
297
+ .ui-datepicker .ui-datepicker-prev-hover { left:1px; }
298
+ .ui-datepicker .ui-datepicker-next-hover { right:1px; }
299
+ .ui-datepicker .ui-datepicker-prev span, .ui-datepicker .ui-datepicker-next span { display: block; position: absolute; left: 50%; margin-left: -8px; top: 50%; margin-top: -8px; }
300
+ .ui-datepicker .ui-datepicker-title { margin: 0 2.3em; line-height: 1.8em; text-align: center; }
301
+ .ui-datepicker .ui-datepicker-title select { float:left; font-size:1em; margin:1px 0; }
302
+ .ui-datepicker select.ui-datepicker-month-year {width: 100%;}
303
+ .ui-datepicker select.ui-datepicker-month,
304
+ .ui-datepicker select.ui-datepicker-year { width: 49%;}
305
+ .ui-datepicker .ui-datepicker-title select.ui-datepicker-year { float: right; }
306
+ .ui-datepicker table {width: 100%; font-size: .9em; border-collapse: collapse; margin:0 0 .4em; }
307
+ .ui-datepicker th { padding: .7em .3em; text-align: center; font-weight: bold; border: 0; }
308
+ .ui-datepicker td { border: 0; padding: 1px; }
309
+ .ui-datepicker td span, .ui-datepicker td a { display: block; padding: .2em; text-align: right; text-decoration: none; }
310
+ .ui-datepicker .ui-datepicker-buttonpane { background-image: none; margin: .7em 0 0 0; padding:0 .2em; border-left: 0; border-right: 0; border-bottom: 0; }
311
+ .ui-datepicker .ui-datepicker-buttonpane button { float: right; margin: .5em .2em .4em; cursor: pointer; padding: .2em .6em .3em .6em; width:auto; overflow:visible; }
312
+ .ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { float:left; }
313
+
314
+ /* with multiple calendars */
315
+ .ui-datepicker.ui-datepicker-multi { width:auto; }
316
+ .ui-datepicker-multi .ui-datepicker-group { float:left; }
317
+ .ui-datepicker-multi .ui-datepicker-group table { width:95%; margin:0 auto .4em; }
318
+ .ui-datepicker-multi-2 .ui-datepicker-group { width:50%; }
319
+ .ui-datepicker-multi-3 .ui-datepicker-group { width:33.3%; }
320
+ .ui-datepicker-multi-4 .ui-datepicker-group { width:25%; }
321
+ .ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header { border-left-width:0; }
322
+ .ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { border-left-width:0; }
323
+ .ui-datepicker-multi .ui-datepicker-buttonpane { clear:left; }
324
+ .ui-datepicker-row-break { clear:both; width:100%; }
325
+
326
+ /* RTL support */
327
+ .ui-datepicker-rtl { direction: rtl; }
328
+ .ui-datepicker-rtl .ui-datepicker-prev { right: 2px; left: auto; }
329
+ .ui-datepicker-rtl .ui-datepicker-next { left: 2px; right: auto; }
330
+ .ui-datepicker-rtl .ui-datepicker-prev:hover { right: 1px; left: auto; }
331
+ .ui-datepicker-rtl .ui-datepicker-next:hover { left: 1px; right: auto; }
332
+ .ui-datepicker-rtl .ui-datepicker-buttonpane { clear:right; }
333
+ .ui-datepicker-rtl .ui-datepicker-buttonpane button { float: left; }
334
+ .ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current { float:right; }
335
+ .ui-datepicker-rtl .ui-datepicker-group { float:right; }
336
+ .ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header { border-right-width:0; border-left-width:1px; }
337
+ .ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { border-right-width:0; border-left-width:1px; }
338
+
339
+ /* IE6 IFRAME FIX (taken from datepicker 1.5.3 */
340
+ .ui-datepicker-cover {
341
+ display: none; /*sorry for IE5*/
342
+ display/**/: block; /*sorry for IE5*/
343
+ position: absolute; /*must have*/
344
+ z-index: -1; /*must have*/
345
+ filter: mask(); /*must have*/
346
+ top: -4px; /*must have*/
347
+ left: -4px; /*must have*/
348
+ width: 200px; /*must have*/
349
+ height: 200px; /*must have*/
350
+ }/* Dialog
351
+ ----------------------------------*/
352
+ .ui-dialog { position: relative; padding: .2em; width: 300px; }
353
+ .ui-dialog .ui-dialog-titlebar { padding: .5em .3em .3em 1em; position: relative; }
354
+ .ui-dialog .ui-dialog-title { float: left; margin: .1em 0 .2em; }
355
+ .ui-dialog .ui-dialog-titlebar-close { position: absolute; right: .3em; top: 50%; width: 19px; margin: -10px 0 0 0; padding: 1px; height: 18px; }
356
+ .ui-dialog .ui-dialog-titlebar-close span { display: block; margin: 1px; }
357
+ .ui-dialog .ui-dialog-titlebar-close:hover, .ui-dialog .ui-dialog-titlebar-close:focus { padding: 0; }
358
+ .ui-dialog .ui-dialog-content { border: 0; padding: .5em 1em; background: none; overflow: auto; zoom: 1; }
359
+ .ui-dialog .ui-dialog-buttonpane { text-align: left; border-width: 1px 0 0 0; background-image: none; margin: .5em 0 0 0; padding: .3em 1em .5em .4em; }
360
+ .ui-dialog .ui-dialog-buttonpane button { float: right; margin: .5em .4em .5em 0; cursor: pointer; padding: .2em .6em .3em .6em; line-height: 1.4em; width:auto; overflow:visible; }
361
+ .ui-dialog .ui-resizable-se { width: 14px; height: 14px; right: 3px; bottom: 3px; }
362
+ .ui-draggable .ui-dialog-titlebar { cursor: move; }
363
+ /* Progressbar
364
+ ----------------------------------*/
365
+ .ui-progressbar { height:2em; text-align: left; }
366
+ .ui-progressbar .ui-progressbar-value {margin: -1px; height:100%; }/* Resizable
367
+ ----------------------------------*/
368
+ .ui-resizable { position: relative;}
369
+ .ui-resizable-handle { position: absolute;font-size: 0.1px;z-index: 99999; display: block;}
370
+ .ui-resizable-disabled .ui-resizable-handle, .ui-resizable-autohide .ui-resizable-handle { display: none; }
371
+ .ui-resizable-n { cursor: n-resize; height: 7px; width: 100%; top: -5px; left: 0px; }
372
+ .ui-resizable-s { cursor: s-resize; height: 7px; width: 100%; bottom: -5px; left: 0px; }
373
+ .ui-resizable-e { cursor: e-resize; width: 7px; right: -5px; top: 0px; height: 100%; }
374
+ .ui-resizable-w { cursor: w-resize; width: 7px; left: -5px; top: 0px; height: 100%; }
375
+ .ui-resizable-se { cursor: se-resize; width: 12px; height: 12px; right: 1px; bottom: 1px; }
376
+ .ui-resizable-sw { cursor: sw-resize; width: 9px; height: 9px; left: -5px; bottom: -5px; }
377
+ .ui-resizable-nw { cursor: nw-resize; width: 9px; height: 9px; left: -5px; top: -5px; }
378
+ .ui-resizable-ne { cursor: ne-resize; width: 9px; height: 9px; right: -5px; top: -5px;}/* Slider
379
+ ----------------------------------*/
380
+ .ui-slider { position: relative; text-align: left; }
381
+ .ui-slider .ui-slider-handle { position: absolute; z-index: 2; width: 1.2em; height: 1.2em; cursor: default; }
382
+ .ui-slider .ui-slider-range { position: absolute; z-index: 1; font-size: .7em; display: block; border: 0; }
383
+
384
+ .ui-slider-horizontal { height: .8em; }
385
+ .ui-slider-horizontal .ui-slider-handle { top: -.3em; margin-left: -.6em; }
386
+ .ui-slider-horizontal .ui-slider-range { top: 0; height: 100%; }
387
+ .ui-slider-horizontal .ui-slider-range-min { left: 0; }
388
+ .ui-slider-horizontal .ui-slider-range-max { right: 0; }
389
+
390
+ .ui-slider-vertical { width: .8em; height: 100px; }
391
+ .ui-slider-vertical .ui-slider-handle { left: -.3em; margin-left: 0; margin-bottom: -.6em; }
392
+ .ui-slider-vertical .ui-slider-range { left: 0; width: 100%; }
393
+ .ui-slider-vertical .ui-slider-range-min { bottom: 0; }
394
+ .ui-slider-vertical .ui-slider-range-max { top: 0; }/* Tabs
395
+ ----------------------------------*/
396
+ .ui-tabs { padding: .2em; zoom: 1; }
397
+ .ui-tabs .ui-tabs-nav { list-style: none; position: relative; padding: .2em .2em 0; }
398
+ .ui-tabs .ui-tabs-nav li { position: relative; float: left; border-bottom-width: 0 !important; margin: 0 .2em -1px 0; padding: 0; }
399
+ .ui-tabs .ui-tabs-nav li a { float: left; text-decoration: none; padding: .5em 1em; }
400
+ .ui-tabs .ui-tabs-nav li.ui-tabs-selected { padding-bottom: 1px; border-bottom-width: 0; }
401
+ .ui-tabs .ui-tabs-nav li.ui-tabs-selected a, .ui-tabs .ui-tabs-nav li.ui-state-disabled a, .ui-tabs .ui-tabs-nav li.ui-state-processing a { cursor: text; }
402
+ .ui-tabs .ui-tabs-nav li a, .ui-tabs.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-selected a { cursor: pointer; } /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */
403
+ .ui-tabs .ui-tabs-panel { padding: 1em 1.4em; display: block; border-width: 0; background: none; }
404
+ .ui-tabs .ui-tabs-hide { display: none !important; }
includes/jquery/js/jquery-1.3.2.min.js ADDED
@@ -0,0 +1,19 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*
2
+ * jQuery JavaScript Library v1.3.2
3
+ * http://jquery.com/
4
+ *
5
+ * Copyright (c) 2009 John Resig
6
+ * Dual licensed under the MIT and GPL licenses.
7
+ * http://docs.jquery.com/License
8
+ *
9
+ * Date: 2009-02-19 17:34:21 -0500 (Thu, 19 Feb 2009)
10
+ * Revision: 6246
11
+ */
12
+ (function(){var l=this,g,y=l.jQuery,p=l.$,o=l.jQuery=l.$=function(E,F){return new o.fn.init(E,F)},D=/^[^<]*(<(.|\s)+>)[^>]*$|^#([\w-]+)$/,f=/^.[^:#\[\.,]*$/;o.fn=o.prototype={init:function(E,H){E=E||document;if(E.nodeType){this[0]=E;this.length=1;this.context=E;return this}if(typeof E==="string"){var G=D.exec(E);if(G&&(G[1]||!H)){if(G[1]){E=o.clean([G[1]],H)}else{var I=document.getElementById(G[3]);if(I&&I.id!=G[3]){return o().find(E)}var F=o(I||[]);F.context=document;F.selector=E;return F}}else{return o(H).find(E)}}else{if(o.isFunction(E)){return o(document).ready(E)}}if(E.selector&&E.context){this.selector=E.selector;this.context=E.context}return this.setArray(o.isArray(E)?E:o.makeArray(E))},selector:"",jquery:"1.3.2",size:function(){return this.length},get:function(E){return E===g?Array.prototype.slice.call(this):this[E]},pushStack:function(F,H,E){var G=o(F);G.prevObject=this;G.context=this.context;if(H==="find"){G.selector=this.selector+(this.selector?" ":"")+E}else{if(H){G.selector=this.selector+"."+H+"("+E+")"}}return G},setArray:function(E){this.length=0;Array.prototype.push.apply(this,E);return this},each:function(F,E){return o.each(this,F,E)},index:function(E){return o.inArray(E&&E.jquery?E[0]:E,this)},attr:function(F,H,G){var E=F;if(typeof F==="string"){if(H===g){return this[0]&&o[G||"attr"](this[0],F)}else{E={};E[F]=H}}return this.each(function(I){for(F in E){o.attr(G?this.style:this,F,o.prop(this,E[F],G,I,F))}})},css:function(E,F){if((E=="width"||E=="height")&&parseFloat(F)<0){F=g}return this.attr(E,F,"curCSS")},text:function(F){if(typeof F!=="object"&&F!=null){return this.empty().append((this[0]&&this[0].ownerDocument||document).createTextNode(F))}var E="";o.each(F||this,function(){o.each(this.childNodes,function(){if(this.nodeType!=8){E+=this.nodeType!=1?this.nodeValue:o.fn.text([this])}})});return E},wrapAll:function(E){if(this[0]){var F=o(E,this[0].ownerDocument).clone();if(this[0].parentNode){F.insertBefore(this[0])}F.map(function(){var G=this;while(G.firstChild){G=G.firstChild}return G}).append(this)}return this},wrapInner:function(E){return this.each(function(){o(this).contents().wrapAll(E)})},wrap:function(E){return this.each(function(){o(this).wrapAll(E)})},append:function(){return this.domManip(arguments,true,function(E){if(this.nodeType==1){this.appendChild(E)}})},prepend:function(){return this.domManip(arguments,true,function(E){if(this.nodeType==1){this.insertBefore(E,this.firstChild)}})},before:function(){return this.domManip(arguments,false,function(E){this.parentNode.insertBefore(E,this)})},after:function(){return this.domManip(arguments,false,function(E){this.parentNode.insertBefore(E,this.nextSibling)})},end:function(){return this.prevObject||o([])},push:[].push,sort:[].sort,splice:[].splice,find:function(E){if(this.length===1){var F=this.pushStack([],"find",E);F.length=0;o.find(E,this[0],F);return F}else{return this.pushStack(o.unique(o.map(this,function(G){return o.find(E,G)})),"find",E)}},clone:function(G){var E=this.map(function(){if(!o.support.noCloneEvent&&!o.isXMLDoc(this)){var I=this.outerHTML;if(!I){var J=this.ownerDocument.createElement("div");J.appendChild(this.cloneNode(true));I=J.innerHTML}return o.clean([I.replace(/ jQuery\d+="(?:\d+|null)"/g,"").replace(/^\s*/,"")])[0]}else{return this.cloneNode(true)}});if(G===true){var H=this.find("*").andSelf(),F=0;E.find("*").andSelf().each(function(){if(this.nodeName!==H[F].nodeName){return}var I=o.data(H[F],"events");for(var K in I){for(var J in I[K]){o.event.add(this,K,I[K][J],I[K][J].data)}}F++})}return E},filter:function(E){return this.pushStack(o.isFunction(E)&&o.grep(this,function(G,F){return E.call(G,F)})||o.multiFilter(E,o.grep(this,function(F){return F.nodeType===1})),"filter",E)},closest:function(E){var G=o.expr.match.POS.test(E)?o(E):null,F=0;return this.map(function(){var H=this;while(H&&H.ownerDocument){if(G?G.index(H)>-1:o(H).is(E)){o.data(H,"closest",F);return H}H=H.parentNode;F++}})},not:function(E){if(typeof E==="string"){if(f.test(E)){return this.pushStack(o.multiFilter(E,this,true),"not",E)}else{E=o.multiFilter(E,this)}}var F=E.length&&E[E.length-1]!==g&&!E.nodeType;return this.filter(function(){return F?o.inArray(this,E)<0:this!=E})},add:function(E){return this.pushStack(o.unique(o.merge(this.get(),typeof E==="string"?o(E):o.makeArray(E))))},is:function(E){return !!E&&o.multiFilter(E,this).length>0},hasClass:function(E){return !!E&&this.is("."+E)},val:function(K){if(K===g){var E=this[0];if(E){if(o.nodeName(E,"option")){return(E.attributes.value||{}).specified?E.value:E.text}if(o.nodeName(E,"select")){var I=E.selectedIndex,L=[],M=E.options,H=E.type=="select-one";if(I<0){return null}for(var F=H?I:0,J=H?I+1:M.length;F<J;F++){var G=M[F];if(G.selected){K=o(G).val();if(H){return K}L.push(K)}}return L}return(E.value||"").replace(/\r/g,"")}return g}if(typeof K==="number"){K+=""}return this.each(function(){if(this.nodeType!=1){return}if(o.isArray(K)&&/radio|checkbox/.test(this.type)){this.checked=(o.inArray(this.value,K)>=0||o.inArray(this.name,K)>=0)}else{if(o.nodeName(this,"select")){var N=o.makeArray(K);o("option",this).each(function(){this.selected=(o.inArray(this.value,N)>=0||o.inArray(this.text,N)>=0)});if(!N.length){this.selectedIndex=-1}}else{this.value=K}}})},html:function(E){return E===g?(this[0]?this[0].innerHTML.replace(/ jQuery\d+="(?:\d+|null)"/g,""):null):this.empty().append(E)},replaceWith:function(E){return this.after(E).remove()},eq:function(E){return this.slice(E,+E+1)},slice:function(){return this.pushStack(Array.prototype.slice.apply(this,arguments),"slice",Array.prototype.slice.call(arguments).join(","))},map:function(E){return this.pushStack(o.map(this,function(G,F){return E.call(G,F,G)}))},andSelf:function(){return this.add(this.prevObject)},domManip:function(J,M,L){if(this[0]){var I=(this[0].ownerDocument||this[0]).createDocumentFragment(),F=o.clean(J,(this[0].ownerDocument||this[0]),I),H=I.firstChild;if(H){for(var G=0,E=this.length;G<E;G++){L.call(K(this[G],H),this.length>1||G>0?I.cloneNode(true):I)}}if(F){o.each(F,z)}}return this;function K(N,O){return M&&o.nodeName(N,"table")&&o.nodeName(O,"tr")?(N.getElementsByTagName("tbody")[0]||N.appendChild(N.ownerDocument.createElement("tbody"))):N}}};o.fn.init.prototype=o.fn;function z(E,F){if(F.src){o.ajax({url:F.src,async:false,dataType:"script"})}else{o.globalEval(F.text||F.textContent||F.innerHTML||"")}if(F.parentNode){F.parentNode.removeChild(F)}}function e(){return +new Date}o.extend=o.fn.extend=function(){var J=arguments[0]||{},H=1,I=arguments.length,E=false,G;if(typeof J==="boolean"){E=J;J=arguments[1]||{};H=2}if(typeof J!=="object"&&!o.isFunction(J)){J={}}if(I==H){J=this;--H}for(;H<I;H++){if((G=arguments[H])!=null){for(var F in G){var K=J[F],L=G[F];if(J===L){continue}if(E&&L&&typeof L==="object"&&!L.nodeType){J[F]=o.extend(E,K||(L.length!=null?[]:{}),L)}else{if(L!==g){J[F]=L}}}}}return J};var b=/z-?index|font-?weight|opacity|zoom|line-?height/i,q=document.defaultView||{},s=Object.prototype.toString;o.extend({noConflict:function(E){l.$=p;if(E){l.jQuery=y}return o},isFunction:function(E){return s.call(E)==="[object Function]"},isArray:function(E){return s.call(E)==="[object Array]"},isXMLDoc:function(E){return E.nodeType===9&&E.documentElement.nodeName!=="HTML"||!!E.ownerDocument&&o.isXMLDoc(E.ownerDocument)},globalEval:function(G){if(G&&/\S/.test(G)){var F=document.getElementsByTagName("head")[0]||document.documentElement,E=document.createElement("script");E.type="text/javascript";if(o.support.scriptEval){E.appendChild(document.createTextNode(G))}else{E.text=G}F.insertBefore(E,F.firstChild);F.removeChild(E)}},nodeName:function(F,E){return F.nodeName&&F.nodeName.toUpperCase()==E.toUpperCase()},each:function(G,K,F){var E,H=0,I=G.length;if(F){if(I===g){for(E in G){if(K.apply(G[E],F)===false){break}}}else{for(;H<I;){if(K.apply(G[H++],F)===false){break}}}}else{if(I===g){for(E in G){if(K.call(G[E],E,G[E])===false){break}}}else{for(var J=G[0];H<I&&K.call(J,H,J)!==false;J=G[++H]){}}}return G},prop:function(H,I,G,F,E){if(o.isFunction(I)){I=I.call(H,F)}return typeof I==="number"&&G=="curCSS"&&!b.test(E)?I+"px":I},className:{add:function(E,F){o.each((F||"").split(/\s+/),function(G,H){if(E.nodeType==1&&!o.className.has(E.className,H)){E.className+=(E.className?" ":"")+H}})},remove:function(E,F){if(E.nodeType==1){E.className=F!==g?o.grep(E.className.split(/\s+/),function(G){return !o.className.has(F,G)}).join(" "):""}},has:function(F,E){return F&&o.inArray(E,(F.className||F).toString().split(/\s+/))>-1}},swap:function(H,G,I){var E={};for(var F in G){E[F]=H.style[F];H.style[F]=G[F]}I.call(H);for(var F in G){H.style[F]=E[F]}},css:function(H,F,J,E){if(F=="width"||F=="height"){var L,G={position:"absolute",visibility:"hidden",display:"block"},K=F=="width"?["Left","Right"]:["Top","Bottom"];function I(){L=F=="width"?H.offsetWidth:H.offsetHeight;if(E==="border"){return}o.each(K,function(){if(!E){L-=parseFloat(o.curCSS(H,"padding"+this,true))||0}if(E==="margin"){L+=parseFloat(o.curCSS(H,"margin"+this,true))||0}else{L-=parseFloat(o.curCSS(H,"border"+this+"Width",true))||0}})}if(H.offsetWidth!==0){I()}else{o.swap(H,G,I)}return Math.max(0,Math.round(L))}return o.curCSS(H,F,J)},curCSS:function(I,F,G){var L,E=I.style;if(F=="opacity"&&!o.support.opacity){L=o.attr(E,"opacity");return L==""?"1":L}if(F.match(/float/i)){F=w}if(!G&&E&&E[F]){L=E[F]}else{if(q.getComputedStyle){if(F.match(/float/i)){F="float"}F=F.replace(/([A-Z])/g,"-$1").toLowerCase();var M=q.getComputedStyle(I,null);if(M){L=M.getPropertyValue(F)}if(F=="opacity"&&L==""){L="1"}}else{if(I.currentStyle){var J=F.replace(/\-(\w)/g,function(N,O){return O.toUpperCase()});L=I.currentStyle[F]||I.currentStyle[J];if(!/^\d+(px)?$/i.test(L)&&/^\d/.test(L)){var H=E.left,K=I.runtimeStyle.left;I.runtimeStyle.left=I.currentStyle.left;E.left=L||0;L=E.pixelLeft+"px";E.left=H;I.runtimeStyle.left=K}}}}return L},clean:function(F,K,I){K=K||document;if(typeof K.createElement==="undefined"){K=K.ownerDocument||K[0]&&K[0].ownerDocument||document}if(!I&&F.length===1&&typeof F[0]==="string"){var H=/^<(\w+)\s*\/?>$/.exec(F[0]);if(H){return[K.createElement(H[1])]}}var G=[],E=[],L=K.createElement("div");o.each(F,function(P,S){if(typeof S==="number"){S+=""}if(!S){return}if(typeof S==="string"){S=S.replace(/(<(\w+)[^>]*?)\/>/g,function(U,V,T){return T.match(/^(abbr|br|col|img|input|link|meta|param|hr|area|embed)$/i)?U:V+"></"+T+">"});var O=S.replace(/^\s+/,"").substring(0,10).toLowerCase();var Q=!O.indexOf("<opt")&&[1,"<select multiple='multiple'>","</select>"]||!O.indexOf("<leg")&&[1,"<fieldset>","</fieldset>"]||O.match(/^<(thead|tbody|tfoot|colg|cap)/)&&[1,"<table>","</table>"]||!O.indexOf("<tr")&&[2,"<table><tbody>","</tbody></table>"]||(!O.indexOf("<td")||!O.indexOf("<th"))&&[3,"<table><tbody><tr>","</tr></tbody></table>"]||!O.indexOf("<col")&&[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"]||!o.support.htmlSerialize&&[1,"div<div>","</div>"]||[0,"",""];L.innerHTML=Q[1]+S+Q[2];while(Q[0]--){L=L.lastChild}if(!o.support.tbody){var R=/<tbody/i.test(S),N=!O.indexOf("<table")&&!R?L.firstChild&&L.firstChild.childNodes:Q[1]=="<table>"&&!R?L.childNodes:[];for(var M=N.length-1;M>=0;--M){if(o.nodeName(N[M],"tbody")&&!N[M].childNodes.length){N[M].parentNode.removeChild(N[M])}}}if(!o.support.leadingWhitespace&&/^\s/.test(S)){L.insertBefore(K.createTextNode(S.match(/^\s*/)[0]),L.firstChild)}S=o.makeArray(L.childNodes)}if(S.nodeType){G.push(S)}else{G=o.merge(G,S)}});if(I){for(var J=0;G[J];J++){if(o.nodeName(G[J],"script")&&(!G[J].type||G[J].type.toLowerCase()==="text/javascript")){E.push(G[J].parentNode?G[J].parentNode.removeChild(G[J]):G[J])}else{if(G[J].nodeType===1){G.splice.apply(G,[J+1,0].concat(o.makeArray(G[J].getElementsByTagName("script"))))}I.appendChild(G[J])}}return E}return G},attr:function(J,G,K){if(!J||J.nodeType==3||J.nodeType==8){return g}var H=!o.isXMLDoc(J),L=K!==g;G=H&&o.props[G]||G;if(J.tagName){var F=/href|src|style/.test(G);if(G=="selected"&&J.parentNode){J.parentNode.selectedIndex}if(G in J&&H&&!F){if(L){if(G=="type"&&o.nodeName(J,"input")&&J.parentNode){throw"type property can't be changed"}J[G]=K}if(o.nodeName(J,"form")&&J.getAttributeNode(G)){return J.getAttributeNode(G).nodeValue}if(G=="tabIndex"){var I=J.getAttributeNode("tabIndex");return I&&I.specified?I.value:J.nodeName.match(/(button|input|object|select|textarea)/i)?0:J.nodeName.match(/^(a|area)$/i)&&J.href?0:g}return J[G]}if(!o.support.style&&H&&G=="style"){return o.attr(J.style,"cssText",K)}if(L){J.setAttribute(G,""+K)}var E=!o.support.hrefNormalized&&H&&F?J.getAttribute(G,2):J.getAttribute(G);return E===null?g:E}if(!o.support.opacity&&G=="opacity"){if(L){J.zoom=1;J.filter=(J.filter||"").replace(/alpha\([^)]*\)/,"")+(parseInt(K)+""=="NaN"?"":"alpha(opacity="+K*100+")")}return J.filter&&J.filter.indexOf("opacity=")>=0?(parseFloat(J.filter.match(/opacity=([^)]*)/)[1])/100)+"":""}G=G.replace(/-([a-z])/ig,function(M,N){return N.toUpperCase()});if(L){J[G]=K}return J[G]},trim:function(E){return(E||"").replace(/^\s+|\s+$/g,"")},makeArray:function(G){var E=[];if(G!=null){var F=G.length;if(F==null||typeof G==="string"||o.isFunction(G)||G.setInterval){E[0]=G}else{while(F){E[--F]=G[F]}}}return E},inArray:function(G,H){for(var E=0,F=H.length;E<F;E++){if(H[E]===G){return E}}return -1},merge:function(H,E){var F=0,G,I=H.length;if(!o.support.getAll){while((G=E[F++])!=null){if(G.nodeType!=8){H[I++]=G}}}else{while((G=E[F++])!=null){H[I++]=G}}return H},unique:function(K){var F=[],E={};try{for(var G=0,H=K.length;G<H;G++){var J=o.data(K[G]);if(!E[J]){E[J]=true;F.push(K[G])}}}catch(I){F=K}return F},grep:function(F,J,E){var G=[];for(var H=0,I=F.length;H<I;H++){if(!E!=!J(F[H],H)){G.push(F[H])}}return G},map:function(E,J){var F=[];for(var G=0,H=E.length;G<H;G++){var I=J(E[G],G);if(I!=null){F[F.length]=I}}return F.concat.apply([],F)}});var C=navigator.userAgent.toLowerCase();o.browser={version:(C.match(/.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/)||[0,"0"])[1],safari:/webkit/.test(C),opera:/opera/.test(C),msie:/msie/.test(C)&&!/opera/.test(C),mozilla:/mozilla/.test(C)&&!/(compatible|webkit)/.test(C)};o.each({parent:function(E){return E.parentNode},parents:function(E){return o.dir(E,"parentNode")},next:function(E){return o.nth(E,2,"nextSibling")},prev:function(E){return o.nth(E,2,"previousSibling")},nextAll:function(E){return o.dir(E,"nextSibling")},prevAll:function(E){return o.dir(E,"previousSibling")},siblings:function(E){return o.sibling(E.parentNode.firstChild,E)},children:function(E){return o.sibling(E.firstChild)},contents:function(E){return o.nodeName(E,"iframe")?E.contentDocument||E.contentWindow.document:o.makeArray(E.childNodes)}},function(E,F){o.fn[E]=function(G){var H=o.map(this,F);if(G&&typeof G=="string"){H=o.multiFilter(G,H)}return this.pushStack(o.unique(H),E,G)}});o.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(E,F){o.fn[E]=function(G){var J=[],L=o(G);for(var K=0,H=L.length;K<H;K++){var I=(K>0?this.clone(true):this).get();o.fn[F].apply(o(L[K]),I);J=J.concat(I)}return this.pushStack(J,E,G)}});o.each({removeAttr:function(E){o.attr(this,E,"");if(this.nodeType==1){this.removeAttribute(E)}},addClass:function(E){o.className.add(this,E)},removeClass:function(E){o.className.remove(this,E)},toggleClass:function(F,E){if(typeof E!=="boolean"){E=!o.className.has(this,F)}o.className[E?"add":"remove"](this,F)},remove:function(E){if(!E||o.filter(E,[this]).length){o("*",this).add([this]).each(function(){o.event.remove(this);o.removeData(this)});if(this.parentNode){this.parentNode.removeChild(this)}}},empty:function(){o(this).children().remove();while(this.firstChild){this.removeChild(this.firstChild)}}},function(E,F){o.fn[E]=function(){return this.each(F,arguments)}});function j(E,F){return E[0]&&parseInt(o.curCSS(E[0],F,true),10)||0}var h="jQuery"+e(),v=0,A={};o.extend({cache:{},data:function(F,E,G){F=F==l?A:F;var H=F[h];if(!H){H=F[h]=++v}if(E&&!o.cache[H]){o.cache[H]={}}if(G!==g){o.cache[H][E]=G}return E?o.cache[H][E]:H},removeData:function(F,E){F=F==l?A:F;var H=F[h];if(E){if(o.cache[H]){delete o.cache[H][E];E="";for(E in o.cache[H]){break}if(!E){o.removeData(F)}}}else{try{delete F[h]}catch(G){if(F.removeAttribute){F.removeAttribute(h)}}delete o.cache[H]}},queue:function(F,E,H){if(F){E=(E||"fx")+"queue";var G=o.data(F,E);if(!G||o.isArray(H)){G=o.data(F,E,o.makeArray(H))}else{if(H){G.push(H)}}}return G},dequeue:function(H,G){var E=o.queue(H,G),F=E.shift();if(!G||G==="fx"){F=E[0]}if(F!==g){F.call(H)}}});o.fn.extend({data:function(E,G){var H=E.split(".");H[1]=H[1]?"."+H[1]:"";if(G===g){var F=this.triggerHandler("getData"+H[1]+"!",[H[0]]);if(F===g&&this.length){F=o.data(this[0],E)}return F===g&&H[1]?this.data(H[0]):F}else{return this.trigger("setData"+H[1]+"!",[H[0],G]).each(function(){o.data(this,E,G)})}},removeData:function(E){return this.each(function(){o.removeData(this,E)})},queue:function(E,F){if(typeof E!=="string"){F=E;E="fx"}if(F===g){return o.queue(this[0],E)}return this.each(function(){var G=o.queue(this,E,F);if(E=="fx"&&G.length==1){G[0].call(this)}})},dequeue:function(E){return this.each(function(){o.dequeue(this,E)})}});
13
+ /*
14
+ * Sizzle CSS Selector Engine - v0.9.3
15
+ * Copyright 2009, The Dojo Foundation
16
+ * Released under the MIT, BSD, and GPL Licenses.
17
+ * More information: http://sizzlejs.com/
18
+ */
19
+ (function(){var R=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?/g,L=0,H=Object.prototype.toString;var F=function(Y,U,ab,ac){ab=ab||[];U=U||document;if(U.nodeType!==1&&U.nodeType!==9){return[]}if(!Y||typeof Y!=="string"){return ab}var Z=[],W,af,ai,T,ad,V,X=true;R.lastIndex=0;while((W=R.exec(Y))!==null){Z.push(W[1]);if(W[2]){V=RegExp.rightContext;break}}if(Z.length>1&&M.exec(Y)){if(Z.length===2&&I.relative[Z[0]]){af=J(Z[0]+Z[1],U)}else{af=I.relative[Z[0]]?[U]:F(Z.shift(),U);while(Z.length){Y=Z.shift();if(I.relative[Y]){Y+=Z.shift()}af=J(Y,af)}}}else{var ae=ac?{expr:Z.pop(),set:E(ac)}:F.find(Z.pop(),Z.length===1&&U.parentNode?U.parentNode:U,Q(U));af=F.filter(ae.expr,ae.set);if(Z.length>0){ai=E(af)}else{X=false}while(Z.length){var ah=Z.pop(),ag=ah;if(!I.relative[ah]){ah=""}else{ag=Z.pop()}if(ag==null){ag=U}I.relative[ah](ai,ag,Q(U))}}if(!ai){ai=af}if(!ai){throw"Syntax error, unrecognized expression: "+(ah||Y)}if(H.call(ai)==="[object Array]"){if(!X){ab.push.apply(ab,ai)}else{if(U.nodeType===1){for(var aa=0;ai[aa]!=null;aa++){if(ai[aa]&&(ai[aa]===true||ai[aa].nodeType===1&&K(U,ai[aa]))){ab.push(af[aa])}}}else{for(var aa=0;ai[aa]!=null;aa++){if(ai[aa]&&ai[aa].nodeType===1){ab.push(af[aa])}}}}}else{E(ai,ab)}if(V){F(V,U,ab,ac);if(G){hasDuplicate=false;ab.sort(G);if(hasDuplicate){for(var aa=1;aa<ab.length;aa++){if(ab[aa]===ab[aa-1]){ab.splice(aa--,1)}}}}}return ab};F.matches=function(T,U){return F(T,null,null,U)};F.find=function(aa,T,ab){var Z,X;if(!aa){return[]}for(var W=0,V=I.order.length;W<V;W++){var Y=I.order[W],X;if((X=I.match[Y].exec(aa))){var U=RegExp.leftContext;if(U.substr(U.length-1)!=="\\"){X[1]=(X[1]||"").replace(/\\/g,"");Z=I.find[Y](X,T,ab);if(Z!=null){aa=aa.replace(I.match[Y],"");break}}}}if(!Z){Z=T.getElementsByTagName("*")}return{set:Z,expr:aa}};F.filter=function(ad,ac,ag,W){var V=ad,ai=[],aa=ac,Y,T,Z=ac&&ac[0]&&Q(ac[0]);while(ad&&ac.length){for(var ab in I.filter){if((Y=I.match[ab].exec(ad))!=null){var U=I.filter[ab],ah,af;T=false;if(aa==ai){ai=[]}if(I.preFilter[ab]){Y=I.preFilter[ab](Y,aa,ag,ai,W,Z);if(!Y){T=ah=true}else{if(Y===true){continue}}}if(Y){for(var X=0;(af=aa[X])!=null;X++){if(af){ah=U(af,Y,X,aa);var ae=W^!!ah;if(ag&&ah!=null){if(ae){T=true}else{aa[X]=false}}else{if(ae){ai.push(af);T=true}}}}}if(ah!==g){if(!ag){aa=ai}ad=ad.replace(I.match[ab],"");if(!T){return[]}break}}}if(ad==V){if(T==null){throw"Syntax error, unrecognized expression: "+ad}else{break}}V=ad}return aa};var I=F.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF_-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF_-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF_-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF_-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*_-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\((even|odd|[\dn+-]*)\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF_-]|\\.)+)(?:\((['"]*)((?:\([^\)]+\)|[^\2\(\)]*)+)\2\))?/},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(T){return T.getAttribute("href")}},relative:{"+":function(aa,T,Z){var X=typeof T==="string",ab=X&&!/\W/.test(T),Y=X&&!ab;if(ab&&!Z){T=T.toUpperCase()}for(var W=0,V=aa.length,U;W<V;W++){if((U=aa[W])){while((U=U.previousSibling)&&U.nodeType!==1){}aa[W]=Y||U&&U.nodeName===T?U||false:U===T}}if(Y){F.filter(T,aa,true)}},">":function(Z,U,aa){var X=typeof U==="string";if(X&&!/\W/.test(U)){U=aa?U:U.toUpperCase();for(var V=0,T=Z.length;V<T;V++){var Y=Z[V];if(Y){var W=Y.parentNode;Z[V]=W.nodeName===U?W:false}}}else{for(var V=0,T=Z.length;V<T;V++){var Y=Z[V];if(Y){Z[V]=X?Y.parentNode:Y.parentNode===U}}if(X){F.filter(U,Z,true)}}},"":function(W,U,Y){var V=L++,T=S;if(!U.match(/\W/)){var X=U=Y?U:U.toUpperCase();T=P}T("parentNode",U,V,W,X,Y)},"~":function(W,U,Y){var V=L++,T=S;if(typeof U==="string"&&!U.match(/\W/)){var X=U=Y?U:U.toUpperCase();T=P}T("previousSibling",U,V,W,X,Y)}},find:{ID:function(U,V,W){if(typeof V.getElementById!=="undefined"&&!W){var T=V.getElementById(U[1]);return T?[T]:[]}},NAME:function(V,Y,Z){if(typeof Y.getElementsByName!=="undefined"){var U=[],X=Y.getElementsByName(V[1]);for(var W=0,T=X.length;W<T;W++){if(X[W].getAttribute("name")===V[1]){U.push(X[W])}}return U.length===0?null:U}},TAG:function(T,U){return U.getElementsByTagName(T[1])}},preFilter:{CLASS:function(W,U,V,T,Z,aa){W=" "+W[1].replace(/\\/g,"")+" ";if(aa){return W}for(var X=0,Y;(Y=U[X])!=null;X++){if(Y){if(Z^(Y.className&&(" "+Y.className+" ").indexOf(W)>=0)){if(!V){T.push(Y)}}else{if(V){U[X]=false}}}}return false},ID:function(T){return T[1].replace(/\\/g,"")},TAG:function(U,T){for(var V=0;T[V]===false;V++){}return T[V]&&Q(T[V])?U[1]:U[1].toUpperCase()},CHILD:function(T){if(T[1]=="nth"){var U=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(T[2]=="even"&&"2n"||T[2]=="odd"&&"2n+1"||!/\D/.test(T[2])&&"0n+"+T[2]||T[2]);T[2]=(U[1]+(U[2]||1))-0;T[3]=U[3]-0}T[0]=L++;return T},ATTR:function(X,U,V,T,Y,Z){var W=X[1].replace(/\\/g,"");if(!Z&&I.attrMap[W]){X[1]=I.attrMap[W]}if(X[2]==="~="){X[4]=" "+X[4]+" "}return X},PSEUDO:function(X,U,V,T,Y){if(X[1]==="not"){if(X[3].match(R).length>1||/^\w/.test(X[3])){X[3]=F(X[3],null,null,U)}else{var W=F.filter(X[3],U,V,true^Y);if(!V){T.push.apply(T,W)}return false}}else{if(I.match.POS.test(X[0])||I.match.CHILD.test(X[0])){return true}}return X},POS:function(T){T.unshift(true);return T}},filters:{enabled:function(T){return T.disabled===false&&T.type!=="hidden"},disabled:function(T){return T.disabled===true},checked:function(T){return T.checked===true},selected:function(T){T.parentNode.selectedIndex;return T.selected===true},parent:function(T){return !!T.firstChild},empty:function(T){return !T.firstChild},has:function(V,U,T){return !!F(T[3],V).length},header:function(T){return/h\d/i.test(T.nodeName)},text:function(T){return"text"===T.type},radio:function(T){return"radio"===T.type},checkbox:function(T){return"checkbox"===T.type},file:function(T){return"file"===T.type},password:function(T){return"password"===T.type},submit:function(T){return"submit"===T.type},image:function(T){return"image"===T.type},reset:function(T){return"reset"===T.type},button:function(T){return"button"===T.type||T.nodeName.toUpperCase()==="BUTTON"},input:function(T){return/input|select|textarea|button/i.test(T.nodeName)}},setFilters:{first:function(U,T){return T===0},last:function(V,U,T,W){return U===W.length-1},even:function(U,T){return T%2===0},odd:function(U,T){return T%2===1},lt:function(V,U,T){return U<T[3]-0},gt:function(V,U,T){return U>T[3]-0},nth:function(V,U,T){return T[3]-0==U},eq:function(V,U,T){return T[3]-0==U}},filter:{PSEUDO:function(Z,V,W,aa){var U=V[1],X=I.filters[U];if(X){return X(Z,W,V,aa)}else{if(U==="contains"){return(Z.textContent||Z.innerText||"").indexOf(V[3])>=0}else{if(U==="not"){var Y=V[3];for(var W=0,T=Y.length;W<T;W++){if(Y[W]===Z){return false}}return true}}}},CHILD:function(T,W){var Z=W[1],U=T;switch(Z){case"only":case"first":while(U=U.previousSibling){if(U.nodeType===1){return false}}if(Z=="first"){return true}U=T;case"last":while(U=U.nextSibling){if(U.nodeType===1){return false}}return true;case"nth":var V=W[2],ac=W[3];if(V==1&&ac==0){return true}var Y=W[0],ab=T.parentNode;if(ab&&(ab.sizcache!==Y||!T.nodeIndex)){var X=0;for(U=ab.firstChild;U;U=U.nextSibling){if(U.nodeType===1){U.nodeIndex=++X}}ab.sizcache=Y}var aa=T.nodeIndex-ac;if(V==0){return aa==0}else{return(aa%V==0&&aa/V>=0)}}},ID:function(U,T){return U.nodeType===1&&U.getAttribute("id")===T},TAG:function(U,T){return(T==="*"&&U.nodeType===1)||U.nodeName===T},CLASS:function(U,T){return(" "+(U.className||U.getAttribute("class"))+" ").indexOf(T)>-1},ATTR:function(Y,W){var V=W[1],T=I.attrHandle[V]?I.attrHandle[V](Y):Y[V]!=null?Y[V]:Y.getAttribute(V),Z=T+"",X=W[2],U=W[4];return T==null?X==="!=":X==="="?Z===U:X==="*="?Z.indexOf(U)>=0:X==="~="?(" "+Z+" ").indexOf(U)>=0:!U?Z&&T!==false:X==="!="?Z!=U:X==="^="?Z.indexOf(U)===0:X==="$="?Z.substr(Z.length-U.length)===U:X==="|="?Z===U||Z.substr(0,U.length+1)===U+"-":false},POS:function(X,U,V,Y){var T=U[2],W=I.setFilters[T];if(W){return W(X,V,U,Y)}}}};var M=I.match.POS;for(var O in I.match){I.match[O]=RegExp(I.match[O].source+/(?![^\[]*\])(?![^\(]*\))/.source)}var E=function(U,T){U=Array.prototype.slice.call(U);if(T){T.push.apply(T,U);return T}return U};try{Array.prototype.slice.call(document.documentElement.childNodes)}catch(N){E=function(X,W){var U=W||[];if(H.call(X)==="[object Array]"){Array.prototype.push.apply(U,X)}else{if(typeof X.length==="number"){for(var V=0,T=X.length;V<T;V++){U.push(X[V])}}else{for(var V=0;X[V];V++){U.push(X[V])}}}return U}}var G;if(document.documentElement.compareDocumentPosition){G=function(U,T){var V=U.compareDocumentPosition(T)&4?-1:U===T?0:1;if(V===0){hasDuplicate=true}return V}}else{if("sourceIndex" in document.documentElement){G=function(U,T){var V=U.sourceIndex-T.sourceIndex;if(V===0){hasDuplicate=true}return V}}else{if(document.createRange){G=function(W,U){var V=W.ownerDocument.createRange(),T=U.ownerDocument.createRange();V.selectNode(W);V.collapse(true);T.selectNode(U);T.collapse(true);var X=V.compareBoundaryPoints(Range.START_TO_END,T);if(X===0){hasDuplicate=true}return X}}}}(function(){var U=document.createElement("form"),V="script"+(new Date).getTime();U.innerHTML="<input name='"+V+"'/>";var T=document.documentElement;T.insertBefore(U,T.firstChild);if(!!document.getElementById(V)){I.find.ID=function(X,Y,Z){if(typeof Y.getElementById!=="undefined"&&!Z){var W=Y.getElementById(X[1]);return W?W.id===X[1]||typeof W.getAttributeNode!=="undefined"&&W.getAttributeNode("id").nodeValue===X[1]?[W]:g:[]}};I.filter.ID=function(Y,W){var X=typeof Y.getAttributeNode!=="undefined"&&Y.getAttributeNode("id");return Y.nodeType===1&&X&&X.nodeValue===W}}T.removeChild(U)})();(function(){var T=document.createElement("div");T.appendChild(document.createComment(""));if(T.getElementsByTagName("*").length>0){I.find.TAG=function(U,Y){var X=Y.getElementsByTagName(U[1]);if(U[1]==="*"){var W=[];for(var V=0;X[V];V++){if(X[V].nodeType===1){W.push(X[V])}}X=W}return X}}T.innerHTML="<a href='#'></a>";if(T.firstChild&&typeof T.firstChild.getAttribute!=="undefined"&&T.firstChild.getAttribute("href")!=="#"){I.attrHandle.href=function(U){return U.getAttribute("href",2)}}})();if(document.querySelectorAll){(function(){var T=F,U=document.createElement("div");U.innerHTML="<p class='TEST'></p>";if(U.querySelectorAll&&U.querySelectorAll(".TEST").length===0){return}F=function(Y,X,V,W){X=X||document;if(!W&&X.nodeType===9&&!Q(X)){try{return E(X.querySelectorAll(Y),V)}catch(Z){}}return T(Y,X,V,W)};F.find=T.find;F.filter=T.filter;F.selectors=T.selectors;F.matches=T.matches})()}if(document.getElementsByClassName&&document.documentElement.getElementsByClassName){(function(){var T=document.createElement("div");T.innerHTML="<div class='test e'></div><div class='test'></div>";if(T.getElementsByClassName("e").length===0){return}T.lastChild.className="e";if(T.getElementsByClassName("e").length===1){return}I.order.splice(1,0,"CLASS");I.find.CLASS=function(U,V,W){if(typeof V.getElementsByClassName!=="undefined"&&!W){return V.getElementsByClassName(U[1])}}})()}function P(U,Z,Y,ad,aa,ac){var ab=U=="previousSibling"&&!ac;for(var W=0,V=ad.length;W<V;W++){var T=ad[W];if(T){if(ab&&T.nodeType===1){T.sizcache=Y;T.sizset=W}T=T[U];var X=false;while(T){if(T.sizcache===Y){X=ad[T.sizset];break}if(T.nodeType===1&&!ac){T.sizcache=Y;T.sizset=W}if(T.nodeName===Z){X=T;break}T=T[U]}ad[W]=X}}}function S(U,Z,Y,ad,aa,ac){var ab=U=="previousSibling"&&!ac;for(var W=0,V=ad.length;W<V;W++){var T=ad[W];if(T){if(ab&&T.nodeType===1){T.sizcache=Y;T.sizset=W}T=T[U];var X=false;while(T){if(T.sizcache===Y){X=ad[T.sizset];break}if(T.nodeType===1){if(!ac){T.sizcache=Y;T.sizset=W}if(typeof Z!=="string"){if(T===Z){X=true;break}}else{if(F.filter(Z,[T]).length>0){X=T;break}}}T=T[U]}ad[W]=X}}}var K=document.compareDocumentPosition?function(U,T){return U.compareDocumentPosition(T)&16}:function(U,T){return U!==T&&(U.contains?U.contains(T):true)};var Q=function(T){return T.nodeType===9&&T.documentElement.nodeName!=="HTML"||!!T.ownerDocument&&Q(T.ownerDocument)};var J=function(T,aa){var W=[],X="",Y,V=aa.nodeType?[aa]:aa;while((Y=I.match.PSEUDO.exec(T))){X+=Y[0];T=T.replace(I.match.PSEUDO,"")}T=I.relative[T]?T+"*":T;for(var Z=0,U=V.length;Z<U;Z++){F(T,V[Z],W)}return F.filter(X,W)};o.find=F;o.filter=F.filter;o.expr=F.selectors;o.expr[":"]=o.expr.filters;F.selectors.filters.hidden=function(T){return T.offsetWidth===0||T.offsetHeight===0};F.selectors.filters.visible=function(T){return T.offsetWidth>0||T.offsetHeight>0};F.selectors.filters.animated=function(T){return o.grep(o.timers,function(U){return T===U.elem}).length};o.multiFilter=function(V,T,U){if(U){V=":not("+V+")"}return F.matches(V,T)};o.dir=function(V,U){var T=[],W=V[U];while(W&&W!=document){if(W.nodeType==1){T.push(W)}W=W[U]}return T};o.nth=function(X,T,V,W){T=T||1;var U=0;for(;X;X=X[V]){if(X.nodeType==1&&++U==T){break}}return X};o.sibling=function(V,U){var T=[];for(;V;V=V.nextSibling){if(V.nodeType==1&&V!=U){T.push(V)}}return T};return;l.Sizzle=F})();o.event={add:function(I,F,H,K){if(I.nodeType==3||I.nodeType==8){return}if(I.setInterval&&I!=l){I=l}if(!H.guid){H.guid=this.guid++}if(K!==g){var G=H;H=this.proxy(G);H.data=K}var E=o.data(I,"events")||o.data(I,"events",{}),J=o.data(I,"handle")||o.data(I,"handle",function(){return typeof o!=="undefined"&&!o.event.triggered?o.event.handle.apply(arguments.callee.elem,arguments):g});J.elem=I;o.each(F.split(/\s+/),function(M,N){var O=N.split(".");N=O.shift();H.type=O.slice().sort().join(".");var L=E[N];if(o.event.specialAll[N]){o.event.specialAll[N].setup.call(I,K,O)}if(!L){L=E[N]={};if(!o.event.special[N]||o.event.special[N].setup.call(I,K,O)===false){if(I.addEventListener){I.addEventListener(N,J,false)}else{if(I.attachEvent){I.attachEvent("on"+N,J)}}}}L[H.guid]=H;o.event.global[N]=true});I=null},guid:1,global:{},remove:function(K,H,J){if(K.nodeType==3||K.nodeType==8){return}var G=o.data(K,"events"),F,E;if(G){if(H===g||(typeof H==="string"&&H.charAt(0)==".")){for(var I in G){this.remove(K,I+(H||""))}}else{if(H.type){J=H.handler;H=H.type}o.each(H.split(/\s+/),function(M,O){var Q=O.split(".");O=Q.shift();var N=RegExp("(^|\\.)"+Q.slice().sort().join(".*\\.")+"(\\.|$)");if(G[O]){if(J){delete G[O][J.guid]}else{for(var P in G[O]){if(N.test(G[O][P].type)){delete G[O][P]}}}if(o.event.specialAll[O]){o.event.specialAll[O].teardown.call(K,Q)}for(F in G[O]){break}if(!F){if(!o.event.special[O]||o.event.special[O].teardown.call(K,Q)===false){if(K.removeEventListener){K.removeEventListener(O,o.data(K,"handle"),false)}else{if(K.detachEvent){K.detachEvent("on"+O,o.data(K,"handle"))}}}F=null;delete G[O]}}})}for(F in G){break}if(!F){var L=o.data(K,"handle");if(L){L.elem=null}o.removeData(K,"events");o.removeData(K,"handle")}}},trigger:function(I,K,H,E){var G=I.type||I;if(!E){I=typeof I==="object"?I[h]?I:o.extend(o.Event(G),I):o.Event(G);if(G.indexOf("!")>=0){I.type=G=G.slice(0,-1);I.exclusive=true}if(!H){I.stopPropagation();if(this.global[G]){o.each(o.cache,function(){if(this.events&&this.events[G]){o.event.trigger(I,K,this.handle.elem)}})}}if(!H||H.nodeType==3||H.nodeType==8){return g}I.result=g;I.target=H;K=o.makeArray(K);K.unshift(I)}I.currentTarget=H;var J=o.data(H,"handle");if(J){J.apply(H,K)}if((!H[G]||(o.nodeName(H,"a")&&G=="click"))&&H["on"+G]&&H["on"+G].apply(H,K)===false){I.result=false}if(!E&&H[G]&&!I.isDefaultPrevented()&&!(o.nodeName(H,"a")&&G=="click")){this.triggered=true;try{H[G]()}catch(L){}}this.triggered=false;if(!I.isPropagationStopped()){var F=H.parentNode||H.ownerDocument;if(F){o.event.trigger(I,K,F,true)}}},handle:function(K){var J,E;K=arguments[0]=o.event.fix(K||l.event);K.currentTarget=this;var L=K.type.split(".");K.type=L.shift();J=!L.length&&!K.exclusive;var I=RegExp("(^|\\.)"+L.slice().sort().join(".*\\.")+"(\\.|$)");E=(o.data(this,"events")||{})[K.type];for(var G in E){var H=E[G];if(J||I.test(H.type)){K.handler=H;K.data=H.data;var F=H.apply(this,arguments);if(F!==g){K.result=F;if(F===false){K.preventDefault();K.stopPropagation()}}if(K.isImmediatePropagationStopped()){break}}}},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode metaKey newValue originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),fix:function(H){if(H[h]){return H}var F=H;H=o.Event(F);for(var G=this.props.length,J;G;){J=this.props[--G];H[J]=F[J]}if(!H.target){H.target=H.srcElement||document}if(H.target.nodeType==3){H.target=H.target.parentNode}if(!H.relatedTarget&&H.fromElement){H.relatedTarget=H.fromElement==H.target?H.toElement:H.fromElement}if(H.pageX==null&&H.clientX!=null){var I=document.documentElement,E=document.body;H.pageX=H.clientX+(I&&I.scrollLeft||E&&E.scrollLeft||0)-(I.clientLeft||0);H.pageY=H.clientY+(I&&I.scrollTop||E&&E.scrollTop||0)-(I.clientTop||0)}if(!H.which&&((H.charCode||H.charCode===0)?H.charCode:H.keyCode)){H.which=H.charCode||H.keyCode}if(!H.metaKey&&H.ctrlKey){H.metaKey=H.ctrlKey}if(!H.which&&H.button){H.which=(H.button&1?1:(H.button&2?3:(H.button&4?2:0)))}return H},proxy:function(F,E){E=E||function(){return F.apply(this,arguments)};E.guid=F.guid=F.guid||E.guid||this.guid++;return E},special:{ready:{setup:B,teardown:function(){}}},specialAll:{live:{setup:function(E,F){o.event.add(this,F[0],c)},teardown:function(G){if(G.length){var E=0,F=RegExp("(^|\\.)"+G[0]+"(\\.|$)");o.each((o.data(this,"events").live||{}),function(){if(F.test(this.type)){E++}});if(E<1){o.event.remove(this,G[0],c)}}}}}};o.Event=function(E){if(!this.preventDefault){return new o.Event(E)}if(E&&E.type){this.originalEvent=E;this.type=E.type}else{this.type=E}this.timeStamp=e();this[h]=true};function k(){return false}function u(){return true}o.Event.prototype={preventDefault:function(){this.isDefaultPrevented=u;var E=this.originalEvent;if(!E){return}if(E.preventDefault){E.preventDefault()}E.returnValue=false},stopPropagation:function(){this.isPropagationStopped=u;var E=this.originalEvent;if(!E){return}if(E.stopPropagation){E.stopPropagation()}E.cancelBubble=true},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=u;this.stopPropagation()},isDefaultPrevented:k,isPropagationStopped:k,isImmediatePropagationStopped:k};var a=function(F){var E=F.relatedTarget;while(E&&E!=this){try{E=E.parentNode}catch(G){E=this}}if(E!=this){F.type=F.data;o.event.handle.apply(this,arguments)}};o.each({mouseover:"mouseenter",mouseout:"mouseleave"},function(F,E){o.event.special[E]={setup:function(){o.event.add(this,F,a,E)},teardown:function(){o.event.remove(this,F,a)}}});o.fn.extend({bind:function(F,G,E){return F=="unload"?this.one(F,G,E):this.each(function(){o.event.add(this,F,E||G,E&&G)})},one:function(G,H,F){var E=o.event.proxy(F||H,function(I){o(this).unbind(I,E);return(F||H).apply(this,arguments)});return this.each(function(){o.event.add(this,G,E,F&&H)})},unbind:function(F,E){return this.each(function(){o.event.remove(this,F,E)})},trigger:function(E,F){return this.each(function(){o.event.trigger(E,F,this)})},triggerHandler:function(E,G){if(this[0]){var F=o.Event(E);F.preventDefault();F.stopPropagation();o.event.trigger(F,G,this[0]);return F.result}},toggle:function(G){var E=arguments,F=1;while(F<E.length){o.event.proxy(G,E[F++])}return this.click(o.event.proxy(G,function(H){this.lastToggle=(this.lastToggle||0)%F;H.preventDefault();return E[this.lastToggle++].apply(this,arguments)||false}))},hover:function(E,F){return this.mouseenter(E).mouseleave(F)},ready:function(E){B();if(o.isReady){E.call(document,o)}else{o.readyList.push(E)}return this},live:function(G,F){var E=o.event.proxy(F);E.guid+=this.selector+G;o(document).bind(i(G,this.selector),this.selector,E);return this},die:function(F,E){o(document).unbind(i(F,this.selector),E?{guid:E.guid+this.selector+F}:null);return this}});function c(H){var E=RegExp("(^|\\.)"+H.type+"(\\.|$)"),G=true,F=[];o.each(o.data(this,"events").live||[],function(I,J){if(E.test(J.type)){var K=o(H.target).closest(J.data)[0];if(K){F.push({elem:K,fn:J})}}});F.sort(function(J,I){return o.data(J.elem,"closest")-o.data(I.elem,"closest")});o.each(F,function(){if(this.fn.call(this.elem,H,this.fn.data)===false){return(G=false)}});return G}function i(F,E){return["live",F,E.replace(/\./g,"`").replace(/ /g,"|")].join(".")}o.extend({isReady:false,readyList:[],ready:function(){if(!o.isReady){o.isReady=true;if(o.readyList){o.each(o.readyList,function(){this.call(document,o)});o.readyList=null}o(document).triggerHandler("ready")}}});var x=false;function B(){if(x){return}x=true;if(document.addEventListener){document.addEventListener("DOMContentLoaded",function(){document.removeEventListener("DOMContentLoaded",arguments.callee,false);o.ready()},false)}else{if(document.attachEvent){document.attachEvent("onreadystatechange",function(){if(document.readyState==="complete"){document.detachEvent("onreadystatechange",arguments.callee);o.ready()}});if(document.documentElement.doScroll&&l==l.top){(function(){if(o.isReady){return}try{document.documentElement.doScroll("left")}catch(E){setTimeout(arguments.callee,0);return}o.ready()})()}}}o.event.add(l,"load",o.ready)}o.each(("blur,focus,load,resize,scroll,unload,click,dblclick,mousedown,mouseup,mousemove,mouseover,mouseout,mouseenter,mouseleave,change,select,submit,keydown,keypress,keyup,error").split(","),function(F,E){o.fn[E]=function(G){return G?this.bind(E,G):this.trigger(E)}});o(l).bind("unload",function(){for(var E in o.cache){if(E!=1&&o.cache[E].handle){o.event.remove(o.cache[E].handle.elem)}}});(function(){o.support={};var F=document.documentElement,G=document.createElement("script"),K=document.createElement("div"),J="script"+(new Date).getTime();K.style.display="none";K.innerHTML=' <link/><table></table><a href="/a" style="color:red;float:left;opacity:.5;">a</a><select><option>text</option></select><object><param/></object>';var H=K.getElementsByTagName("*"),E=K.getElementsByTagName("a")[0];if(!H||!H.length||!E){return}o.support={leadingWhitespace:K.firstChild.nodeType==3,tbody:!K.getElementsByTagName("tbody").length,objectAll:!!K.getElementsByTagName("object")[0].getElementsByTagName("*").length,htmlSerialize:!!K.getElementsByTagName("link").length,style:/red/.test(E.getAttribute("style")),hrefNormalized:E.getAttribute("href")==="/a",opacity:E.style.opacity==="0.5",cssFloat:!!E.style.cssFloat,scriptEval:false,noCloneEvent:true,boxModel:null};G.type="text/javascript";try{G.appendChild(document.createTextNode("window."+J+"=1;"))}catch(I){}F.insertBefore(G,F.firstChild);if(l[J]){o.support.scriptEval=true;delete l[J]}F.removeChild(G);if(K.attachEvent&&K.fireEvent){K.attachEvent("onclick",function(){o.support.noCloneEvent=false;K.detachEvent("onclick",arguments.callee)});K.cloneNode(true).fireEvent("onclick")}o(function(){var L=document.createElement("div");L.style.width=L.style.paddingLeft="1px";document.body.appendChild(L);o.boxModel=o.support.boxModel=L.offsetWidth===2;document.body.removeChild(L).style.display="none"})})();var w=o.support.cssFloat?"cssFloat":"styleFloat";o.props={"for":"htmlFor","class":"className","float":w,cssFloat:w,styleFloat:w,readonly:"readOnly",maxlength:"maxLength",cellspacing:"cellSpacing",rowspan:"rowSpan",tabindex:"tabIndex"};o.fn.extend({_load:o.fn.load,load:function(G,J,K){if(typeof G!=="string"){return this._load(G)}var I=G.indexOf(" ");if(I>=0){var E=G.slice(I,G.length);G=G.slice(0,I)}var H="GET";if(J){if(o.isFunction(J)){K=J;J=null}else{if(typeof J==="object"){J=o.param(J);H="POST"}}}var F=this;o.ajax({url:G,type:H,dataType:"html",data:J,complete:function(M,L){if(L=="success"||L=="notmodified"){F.html(E?o("<div/>").append(M.responseText.replace(/<script(.|\s)*?\/script>/g,"")).find(E):M.responseText)}if(K){F.each(K,[M.responseText,L,M])}}});return this},serialize:function(){return o.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?o.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||/select|textarea/i.test(this.nodeName)||/text|hidden|password|search/i.test(this.type))}).map(function(E,F){var G=o(this).val();return G==null?null:o.isArray(G)?o.map(G,function(I,H){return{name:F.name,value:I}}):{name:F.name,value:G}}).get()}});o.each("ajaxStart,ajaxStop,ajaxComplete,ajaxError,ajaxSuccess,ajaxSend".split(","),function(E,F){o.fn[F]=function(G){return this.bind(F,G)}});var r=e();o.extend({get:function(E,G,H,F){if(o.isFunction(G)){H=G;G=null}return o.ajax({type:"GET",url:E,data:G,success:H,dataType:F})},getScript:function(E,F){return o.get(E,null,F,"script")},getJSON:function(E,F,G){return o.get(E,F,G,"json")},post:function(E,G,H,F){if(o.isFunction(G)){H=G;G={}}return o.ajax({type:"POST",url:E,data:G,success:H,dataType:F})},ajaxSetup:function(E){o.extend(o.ajaxSettings,E)},ajaxSettings:{url:location.href,global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:function(){return l.ActiveXObject?new ActiveXObject("Microsoft.XMLHTTP"):new XMLHttpRequest()},accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},ajax:function(M){M=o.extend(true,M,o.extend(true,{},o.ajaxSettings,M));var W,F=/=\?(&|$)/g,R,V,G=M.type.toUpperCase();if(M.data&&M.processData&&typeof M.data!=="string"){M.data=o.param(M.data)}if(M.dataType=="jsonp"){if(G=="GET"){if(!M.url.match(F)){M.url+=(M.url.match(/\?/)?"&":"?")+(M.jsonp||"callback")+"=?"}}else{if(!M.data||!M.data.match(F)){M.data=(M.data?M.data+"&":"")+(M.jsonp||"callback")+"=?"}}M.dataType="json"}if(M.dataType=="json"&&(M.data&&M.data.match(F)||M.url.match(F))){W="jsonp"+r++;if(M.data){M.data=(M.data+"").replace(F,"="+W+"$1")}M.url=M.url.replace(F,"="+W+"$1");M.dataType="script";l[W]=function(X){V=X;I();L();l[W]=g;try{delete l[W]}catch(Y){}if(H){H.removeChild(T)}}}if(M.dataType=="script"&&M.cache==null){M.cache=false}if(M.cache===false&&G=="GET"){var E=e();var U=M.url.replace(/(\?|&)_=.*?(&|$)/,"$1_="+E+"$2");M.url=U+((U==M.url)?(M.url.match(/\?/)?"&":"?")+"_="+E:"")}if(M.data&&G=="GET"){M.url+=(M.url.match(/\?/)?"&":"?")+M.data;M.data=null}if(M.global&&!o.active++){o.event.trigger("ajaxStart")}var Q=/^(\w+:)?\/\/([^\/?#]+)/.exec(M.url);if(M.dataType=="script"&&G=="GET"&&Q&&(Q[1]&&Q[1]!=location.protocol||Q[2]!=location.host)){var H=document.getElementsByTagName("head")[0];var T=document.createElement("script");T.src=M.url;if(M.scriptCharset){T.charset=M.scriptCharset}if(!W){var O=false;T.onload=T.onreadystatechange=function(){if(!O&&(!this.readyState||this.readyState=="loaded"||this.readyState=="complete")){O=true;I();L();T.onload=T.onreadystatechange=null;H.removeChild(T)}}}H.appendChild(T);return g}var K=false;var J=M.xhr();if(M.username){J.open(G,M.url,M.async,M.username,M.password)}else{J.open(G,M.url,M.async)}try{if(M.data){J.setRequestHeader("Content-Type",M.contentType)}if(M.ifModified){J.setRequestHeader("If-Modified-Since",o.lastModified[M.url]||"Thu, 01 Jan 1970 00:00:00 GMT")}J.setRequestHeader("X-Requested-With","XMLHttpRequest");J.setRequestHeader("Accept",M.dataType&&M.accepts[M.dataType]?M.accepts[M.dataType]+", */*":M.accepts._default)}catch(S){}if(M.beforeSend&&M.beforeSend(J,M)===false){if(M.global&&!--o.active){o.event.trigger("ajaxStop")}J.abort();return false}if(M.global){o.event.trigger("ajaxSend",[J,M])}var N=function(X){if(J.readyState==0){if(P){clearInterval(P);P=null;if(M.global&&!--o.active){o.event.trigger("ajaxStop")}}}else{if(!K&&J&&(J.readyState==4||X=="timeout")){K=true;if(P){clearInterval(P);P=null}R=X=="timeout"?"timeout":!o.httpSuccess(J)?"error":M.ifModified&&o.httpNotModified(J,M.url)?"notmodified":"success";if(R=="success"){try{V=o.httpData(J,M.dataType,M)}catch(Z){R="parsererror"}}if(R=="success"){var Y;try{Y=J.getResponseHeader("Last-Modified")}catch(Z){}if(M.ifModified&&Y){o.lastModified[M.url]=Y}if(!W){I()}}else{o.handleError(M,J,R)}L();if(X){J.abort()}if(M.async){J=null}}}};if(M.async){var P=setInterval(N,13);if(M.timeout>0){setTimeout(function(){if(J&&!K){N("timeout")}},M.timeout)}}try{J.send(M.data)}catch(S){o.handleError(M,J,null,S)}if(!M.async){N()}function I(){if(M.success){M.success(V,R)}if(M.global){o.event.trigger("ajaxSuccess",[J,M])}}function L(){if(M.complete){M.complete(J,R)}if(M.global){o.event.trigger("ajaxComplete",[J,M])}if(M.global&&!--o.active){o.event.trigger("ajaxStop")}}return J},handleError:function(F,H,E,G){if(F.error){F.error(H,E,G)}if(F.global){o.event.trigger("ajaxError",[H,F,G])}},active:0,httpSuccess:function(F){try{return !F.status&&location.protocol=="file:"||(F.status>=200&&F.status<300)||F.status==304||F.status==1223}catch(E){}return false},httpNotModified:function(G,E){try{var H=G.getResponseHeader("Last-Modified");return G.status==304||H==o.lastModified[E]}catch(F){}return false},httpData:function(J,H,G){var F=J.getResponseHeader("content-type"),E=H=="xml"||!H&&F&&F.indexOf("xml")>=0,I=E?J.responseXML:J.responseText;if(E&&I.documentElement.tagName=="parsererror"){throw"parsererror"}if(G&&G.dataFilter){I=G.dataFilter(I,H)}if(typeof I==="string"){if(H=="script"){o.globalEval(I)}if(H=="json"){I=l["eval"]("("+I+")")}}return I},param:function(E){var G=[];function H(I,J){G[G.length]=encodeURIComponent(I)+"="+encodeURIComponent(J)}if(o.isArray(E)||E.jquery){o.each(E,function(){H(this.name,this.value)})}else{for(var F in E){if(o.isArray(E[F])){o.each(E[F],function(){H(F,this)})}else{H(F,o.isFunction(E[F])?E[F]():E[F])}}}return G.join("&").replace(/%20/g,"+")}});var m={},n,d=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];function t(F,E){var G={};o.each(d.concat.apply([],d.slice(0,E)),function(){G[this]=F});return G}o.fn.extend({show:function(J,L){if(J){return this.animate(t("show",3),J,L)}else{for(var H=0,F=this.length;H<F;H++){var E=o.data(this[H],"olddisplay");this[H].style.display=E||"";if(o.css(this[H],"display")==="none"){var G=this[H].tagName,K;if(m[G]){K=m[G]}else{var I=o("<"+G+" />").appendTo("body");K=I.css("display");if(K==="none"){K="block"}I.remove();m[G]=K}o.data(this[H],"olddisplay",K)}}for(var H=0,F=this.length;H<F;H++){this[H].style.display=o.data(this[H],"olddisplay")||""}return this}},hide:function(H,I){if(H){return this.animate(t("hide",3),H,I)}else{for(var G=0,F=this.length;G<F;G++){var E=o.data(this[G],"olddisplay");if(!E&&E!=="none"){o.data(this[G],"olddisplay",o.css(this[G],"display"))}}for(var G=0,F=this.length;G<F;G++){this[G].style.display="none"}return this}},_toggle:o.fn.toggle,toggle:function(G,F){var E=typeof G==="boolean";return o.isFunction(G)&&o.isFunction(F)?this._toggle.apply(this,arguments):G==null||E?this.each(function(){var H=E?G:o(this).is(":hidden");o(this)[H?"show":"hide"]()}):this.animate(t("toggle",3),G,F)},fadeTo:function(E,G,F){return this.animate({opacity:G},E,F)},animate:function(I,F,H,G){var E=o.speed(F,H,G);return this[E.queue===false?"each":"queue"](function(){var K=o.extend({},E),M,L=this.nodeType==1&&o(this).is(":hidden"),J=this;for(M in I){if(I[M]=="hide"&&L||I[M]=="show"&&!L){return K.complete.call(this)}if((M=="height"||M=="width")&&this.style){K.display=o.css(this,"display");K.overflow=this.style.overflow}}if(K.overflow!=null){this.style.overflow="hidden"}K.curAnim=o.extend({},I);o.each(I,function(O,S){var R=new o.fx(J,K,O);if(/toggle|show|hide/.test(S)){R[S=="toggle"?L?"show":"hide":S](I)}else{var Q=S.toString().match(/^([+-]=)?([\d+-.]+)(.*)$/),T=R.cur(true)||0;if(Q){var N=parseFloat(Q[2]),P=Q[3]||"px";if(P!="px"){J.style[O]=(N||1)+P;T=((N||1)/R.cur(true))*T;J.style[O]=T+P}if(Q[1]){N=((Q[1]=="-="?-1:1)*N)+T}R.custom(T,N,P)}else{R.custom(T,S,"")}}});return true})},stop:function(F,E){var G=o.timers;if(F){this.queue([])}this.each(function(){for(var H=G.length-1;H>=0;H--){if(G[H].elem==this){if(E){G[H](true)}G.splice(H,1)}}});if(!E){this.dequeue()}return this}});o.each({slideDown:t("show",1),slideUp:t("hide",1),slideToggle:t("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"}},function(E,F){o.fn[E]=function(G,H){return this.animate(F,G,H)}});o.extend({speed:function(G,H,F){var E=typeof G==="object"?G:{complete:F||!F&&H||o.isFunction(G)&&G,duration:G,easing:F&&H||H&&!o.isFunction(H)&&H};E.duration=o.fx.off?0:typeof E.duration==="number"?E.duration:o.fx.speeds[E.duration]||o.fx.speeds._default;E.old=E.complete;E.complete=function(){if(E.queue!==false){o(this).dequeue()}if(o.isFunction(E.old)){E.old.call(this)}};return E},easing:{linear:function(G,H,E,F){return E+F*G},swing:function(G,H,E,F){return((-Math.cos(G*Math.PI)/2)+0.5)*F+E}},timers:[],fx:function(F,E,G){this.options=E;this.elem=F;this.prop=G;if(!E.orig){E.orig={}}}});o.fx.prototype={update:function(){if(this.options.step){this.options.step.call(this.elem,this.now,this)}(o.fx.step[this.prop]||o.fx.step._default)(this);if((this.prop=="height"||this.prop=="width")&&this.elem.style){this.elem.style.display="block"}},cur:function(F){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null)){return this.elem[this.prop]}var E=parseFloat(o.css(this.elem,this.prop,F));return E&&E>-10000?E:parseFloat(o.curCSS(this.elem,this.prop))||0},custom:function(I,H,G){this.startTime=e();this.start=I;this.end=H;this.unit=G||this.unit||"px";this.now=this.start;this.pos=this.state=0;var E=this;function F(J){return E.step(J)}F.elem=this.elem;if(F()&&o.timers.push(F)&&!n){n=setInterval(function(){var K=o.timers;for(var J=0;J<K.length;J++){if(!K[J]()){K.splice(J--,1)}}if(!K.length){clearInterval(n);n=g}},13)}},show:function(){this.options.orig[this.prop]=o.attr(this.elem.style,this.prop);this.options.show=true;this.custom(this.prop=="width"||this.prop=="height"?1:0,this.cur());o(this.elem).show()},hide:function(){this.options.orig[this.prop]=o.attr(this.elem.style,this.prop);this.options.hide=true;this.custom(this.cur(),0)},step:function(H){var G=e();if(H||G>=this.options.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;var E=true;for(var F in this.options.curAnim){if(this.options.curAnim[F]!==true){E=false}}if(E){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;this.elem.style.display=this.options.display;if(o.css(this.elem,"display")=="none"){this.elem.style.display="block"}}if(this.options.hide){o(this.elem).hide()}if(this.options.hide||this.options.show){for(var I in this.options.curAnim){o.attr(this.elem.style,I,this.options.orig[I])}}this.options.complete.call(this.elem)}return false}else{var J=G-this.startTime;this.state=J/this.options.duration;this.pos=o.easing[this.options.easing||(o.easing.swing?"swing":"linear")](this.state,J,0,1,this.options.duration);this.now=this.start+((this.end-this.start)*this.pos);this.update()}return true}};o.extend(o.fx,{speeds:{slow:600,fast:200,_default:400},step:{opacity:function(E){o.attr(E.elem.style,"opacity",E.now)},_default:function(E){if(E.elem.style&&E.elem.style[E.prop]!=null){E.elem.style[E.prop]=E.now+E.unit}else{E.elem[E.prop]=E.now}}}});if(document.documentElement.getBoundingClientRect){o.fn.offset=function(){if(!this[0]){return{top:0,left:0}}if(this[0]===this[0].ownerDocument.body){return o.offset.bodyOffset(this[0])}var G=this[0].getBoundingClientRect(),J=this[0].ownerDocument,F=J.body,E=J.documentElement,L=E.clientTop||F.clientTop||0,K=E.clientLeft||F.clientLeft||0,I=G.top+(self.pageYOffset||o.boxModel&&E.scrollTop||F.scrollTop)-L,H=G.left+(self.pageXOffset||o.boxModel&&E.scrollLeft||F.scrollLeft)-K;return{top:I,left:H}}}else{o.fn.offset=function(){if(!this[0]){return{top:0,left:0}}if(this[0]===this[0].ownerDocument.body){return o.offset.bodyOffset(this[0])}o.offset.initialized||o.offset.initialize();var J=this[0],G=J.offsetParent,F=J,O=J.ownerDocument,M,H=O.documentElement,K=O.body,L=O.defaultView,E=L.getComputedStyle(J,null),N=J.offsetTop,I=J.offsetLeft;while((J=J.parentNode)&&J!==K&&J!==H){M=L.getComputedStyle(J,null);N-=J.scrollTop,I-=J.scrollLeft;if(J===G){N+=J.offsetTop,I+=J.offsetLeft;if(o.offset.doesNotAddBorder&&!(o.offset.doesAddBorderForTableAndCells&&/^t(able|d|h)$/i.test(J.tagName))){N+=parseInt(M.borderTopWidth,10)||0,I+=parseInt(M.borderLeftWidth,10)||0}F=G,G=J.offsetParent}if(o.offset.subtractsBorderForOverflowNotVisible&&M.overflow!=="visible"){N+=parseInt(M.borderTopWidth,10)||0,I+=parseInt(M.borderLeftWidth,10)||0}E=M}if(E.position==="relative"||E.position==="static"){N+=K.offsetTop,I+=K.offsetLeft}if(E.position==="fixed"){N+=Math.max(H.scrollTop,K.scrollTop),I+=Math.max(H.scrollLeft,K.scrollLeft)}return{top:N,left:I}}}o.offset={initialize:function(){if(this.initialized){return}var L=document.body,F=document.createElement("div"),H,G,N,I,M,E,J=L.style.marginTop,K='<div style="position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;"><div></div></div><table style="position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;" cellpadding="0" cellspacing="0"><tr><td></td></tr></table>';M={position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"};for(E in M){F.style[E]=M[E]}F.innerHTML=K;L.insertBefore(F,L.firstChild);H=F.firstChild,G=H.firstChild,I=H.nextSibling.firstChild.firstChild;this.doesNotAddBorder=(G.offsetTop!==5);this.doesAddBorderForTableAndCells=(I.offsetTop===5);H.style.overflow="hidden",H.style.position="relative";this.subtractsBorderForOverflowNotVisible=(G.offsetTop===-5);L.style.marginTop="1px";this.doesNotIncludeMarginInBodyOffset=(L.offsetTop===0);L.style.marginTop=J;L.removeChild(F);this.initialized=true},bodyOffset:function(E){o.offset.initialized||o.offset.initialize();var G=E.offsetTop,F=E.offsetLeft;if(o.offset.doesNotIncludeMarginInBodyOffset){G+=parseInt(o.curCSS(E,"marginTop",true),10)||0,F+=parseInt(o.curCSS(E,"marginLeft",true),10)||0}return{top:G,left:F}}};o.fn.extend({position:function(){var I=0,H=0,F;if(this[0]){var G=this.offsetParent(),J=this.offset(),E=/^body|html$/i.test(G[0].tagName)?{top:0,left:0}:G.offset();J.top-=j(this,"marginTop");J.left-=j(this,"marginLeft");E.top+=j(G,"borderTopWidth");E.left+=j(G,"borderLeftWidth");F={top:J.top-E.top,left:J.left-E.left}}return F},offsetParent:function(){var E=this[0].offsetParent||document.body;while(E&&(!/^body|html$/i.test(E.tagName)&&o.css(E,"position")=="static")){E=E.offsetParent}return o(E)}});o.each(["Left","Top"],function(F,E){var G="scroll"+E;o.fn[G]=function(H){if(!this[0]){return null}return H!==g?this.each(function(){this==l||this==document?l.scrollTo(!F?H:o(l).scrollLeft(),F?H:o(l).scrollTop()):this[G]=H}):this[0]==l||this[0]==document?self[F?"pageYOffset":"pageXOffset"]||o.boxModel&&document.documentElement[G]||document.body[G]:this[0][G]}});o.each(["Height","Width"],function(I,G){var E=I?"Left":"Top",H=I?"Right":"Bottom",F=G.toLowerCase();o.fn["inner"+G]=function(){return this[0]?o.css(this[0],F,false,"padding"):null};o.fn["outer"+G]=function(K){return this[0]?o.css(this[0],F,false,K?"margin":"border"):null};var J=G.toLowerCase();o.fn[J]=function(K){return this[0]==l?document.compatMode=="CSS1Compat"&&document.documentElement["client"+G]||document.body["client"+G]:this[0]==document?Math.max(document.documentElement["client"+G],document.body["scroll"+G],document.documentElement["scroll"+G],document.body["offset"+G],document.documentElement["offset"+G]):K===g?(this.length?o.css(this[0],J):null):this.css(J,typeof K==="string"?K:K+"px")}})})();
includes/jquery/js/jquery-ui-1.7.1.custom.min.js ADDED
@@ -0,0 +1,273 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*
2
+ * jQuery UI 1.7.1
3
+ *
4
+ * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
5
+ * Dual licensed under the MIT (MIT-LICENSE.txt)
6
+ * and GPL (GPL-LICENSE.txt) licenses.
7
+ *
8
+ * http://docs.jquery.com/UI
9
+ */
10
+ * jQuery UI Draggable 1.7.1
11
+ *
12
+ * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
13
+ * Dual licensed under the MIT (MIT-LICENSE.txt)
14
+ * and GPL (GPL-LICENSE.txt) licenses.
15
+ *
16
+ * http://docs.jquery.com/UI/Draggables
17
+ *
18
+ * Depends:
19
+ * ui.core.js
20
+ */
21
+ * jQuery UI Droppable 1.7.1
22
+ *
23
+ * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
24
+ * Dual licensed under the MIT (MIT-LICENSE.txt)
25
+ * and GPL (GPL-LICENSE.txt) licenses.
26
+ *
27
+ * http://docs.jquery.com/UI/Droppables
28
+ *
29
+ * Depends:
30
+ * ui.core.js
31
+ * ui.draggable.js
32
+ */
33
+ * jQuery UI Resizable 1.7.1
34
+ *
35
+ * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
36
+ * Dual licensed under the MIT (MIT-LICENSE.txt)
37
+ * and GPL (GPL-LICENSE.txt) licenses.
38
+ *
39
+ * http://docs.jquery.com/UI/Resizables
40
+ *
41
+ * Depends:
42
+ * ui.core.js
43
+ */
44
+ * jQuery UI Selectable 1.7.1
45
+ *
46
+ * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
47
+ * Dual licensed under the MIT (MIT-LICENSE.txt)
48
+ * and GPL (GPL-LICENSE.txt) licenses.
49
+ *
50
+ * http://docs.jquery.com/UI/Selectables
51
+ *
52
+ * Depends:
53
+ * ui.core.js
54
+ */
55
+ * jQuery UI Sortable 1.7.1
56
+ *
57
+ * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
58
+ * Dual licensed under the MIT (MIT-LICENSE.txt)
59
+ * and GPL (GPL-LICENSE.txt) licenses.
60
+ *
61
+ * http://docs.jquery.com/UI/Sortables
62
+ *
63
+ * Depends:
64
+ * ui.core.js
65
+ */
66
+ * jQuery UI Accordion 1.7.1
67
+ *
68
+ * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
69
+ * Dual licensed under the MIT (MIT-LICENSE.txt)
70
+ * and GPL (GPL-LICENSE.txt) licenses.
71
+ *
72
+ * http://docs.jquery.com/UI/Accordion
73
+ *
74
+ * Depends:
75
+ * ui.core.js
76
+ */
77
+ * jQuery UI Dialog 1.7.1
78
+ *
79
+ * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
80
+ * Dual licensed under the MIT (MIT-LICENSE.txt)
81
+ * and GPL (GPL-LICENSE.txt) licenses.
82
+ *
83
+ * http://docs.jquery.com/UI/Dialog
84
+ *
85
+ * Depends:
86
+ * ui.core.js
87
+ * ui.draggable.js
88
+ * ui.resizable.js
89
+ */
90
+ * jQuery UI Slider 1.7.1
91
+ *
92
+ * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
93
+ * Dual licensed under the MIT (MIT-LICENSE.txt)
94
+ * and GPL (GPL-LICENSE.txt) licenses.
95
+ *
96
+ * http://docs.jquery.com/UI/Slider
97
+ *
98
+ * Depends:
99
+ * ui.core.js
100
+ */
101
+ * jQuery UI Tabs 1.7.1
102
+ *
103
+ * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
104
+ * Dual licensed under the MIT (MIT-LICENSE.txt)
105
+ * and GPL (GPL-LICENSE.txt) licenses.
106
+ *
107
+ * http://docs.jquery.com/UI/Tabs
108
+ *
109
+ * Depends:
110
+ * ui.core.js
111
+ */
112
+ * jQuery UI Datepicker 1.7.1
113
+ *
114
+ * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
115
+ * Dual licensed under the MIT (MIT-LICENSE.txt)
116
+ * and GPL (GPL-LICENSE.txt) licenses.
117
+ *
118
+ * http://docs.jquery.com/UI/Datepicker
119
+ *
120
+ * Depends:
121
+ * ui.core.js
122
+ */
123
+ * jQuery UI Progressbar 1.7.1
124
+ *
125
+ * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
126
+ * Dual licensed under the MIT (MIT-LICENSE.txt)
127
+ * and GPL (GPL-LICENSE.txt) licenses.
128
+ *
129
+ * http://docs.jquery.com/UI/Progressbar
130
+ *
131
+ * Depends:
132
+ * ui.core.js
133
+ */
134
+ * jQuery UI Effects 1.7.1
135
+ *
136
+ * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
137
+ * Dual licensed under the MIT (MIT-LICENSE.txt)
138
+ * and GPL (GPL-LICENSE.txt) licenses.
139
+ *
140
+ * http://docs.jquery.com/UI/Effects/
141
+ */
142
+ * jQuery UI Effects Blind 1.7.1
143
+ *
144
+ * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
145
+ * Dual licensed under the MIT (MIT-LICENSE.txt)
146
+ * and GPL (GPL-LICENSE.txt) licenses.
147
+ *
148
+ * http://docs.jquery.com/UI/Effects/Blind
149
+ *
150
+ * Depends:
151
+ * effects.core.js
152
+ */
153
+ * jQuery UI Effects Bounce 1.7.1
154
+ *
155
+ * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
156
+ * Dual licensed under the MIT (MIT-LICENSE.txt)
157
+ * and GPL (GPL-LICENSE.txt) licenses.
158
+ *
159
+ * http://docs.jquery.com/UI/Effects/Bounce
160
+ *
161
+ * Depends:
162
+ * effects.core.js
163
+ */
164
+ * jQuery UI Effects Clip 1.7.1
165
+ *
166
+ * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
167
+ * Dual licensed under the MIT (MIT-LICENSE.txt)
168
+ * and GPL (GPL-LICENSE.txt) licenses.
169
+ *
170
+ * http://docs.jquery.com/UI/Effects/Clip
171
+ *
172
+ * Depends:
173
+ * effects.core.js
174
+ */
175
+ * jQuery UI Effects Drop 1.7.1
176
+ *
177
+ * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
178
+ * Dual licensed under the MIT (MIT-LICENSE.txt)
179
+ * and GPL (GPL-LICENSE.txt) licenses.
180
+ *
181
+ * http://docs.jquery.com/UI/Effects/Drop
182
+ *
183
+ * Depends:
184
+ * effects.core.js
185
+ */
186
+ * jQuery UI Effects Explode 1.7.1
187
+ *
188
+ * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
189
+ * Dual licensed under the MIT (MIT-LICENSE.txt)
190
+ * and GPL (GPL-LICENSE.txt) licenses.
191
+ *
192
+ * http://docs.jquery.com/UI/Effects/Explode
193
+ *
194
+ * Depends:
195
+ * effects.core.js
196
+ */
197
+ * jQuery UI Effects Fold 1.7.1
198
+ *
199
+ * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
200
+ * Dual licensed under the MIT (MIT-LICENSE.txt)
201
+ * and GPL (GPL-LICENSE.txt) licenses.
202
+ *
203
+ * http://docs.jquery.com/UI/Effects/Fold
204
+ *
205
+ * Depends:
206
+ * effects.core.js
207
+ */
208
+ * jQuery UI Effects Highlight 1.7.1
209
+ *
210
+ * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
211
+ * Dual licensed under the MIT (MIT-LICENSE.txt)
212
+ * and GPL (GPL-LICENSE.txt) licenses.
213
+ *
214
+ * http://docs.jquery.com/UI/Effects/Highlight
215
+ *
216
+ * Depends:
217
+ * effects.core.js
218
+ */
219
+ * jQuery UI Effects Pulsate 1.7.1
220
+ *
221
+ * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
222
+ * Dual licensed under the MIT (MIT-LICENSE.txt)
223
+ * and GPL (GPL-LICENSE.txt) licenses.
224
+ *
225
+ * http://docs.jquery.com/UI/Effects/Pulsate
226
+ *
227
+ * Depends:
228
+ * effects.core.js
229
+ */
230
+ * jQuery UI Effects Scale 1.7.1
231
+ *
232
+ * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
233
+ * Dual licensed under the MIT (MIT-LICENSE.txt)
234
+ * and GPL (GPL-LICENSE.txt) licenses.
235
+ *
236
+ * http://docs.jquery.com/UI/Effects/Scale
237
+ *
238
+ * Depends:
239
+ * effects.core.js
240
+ */
241
+ * jQuery UI Effects Shake 1.7.1
242
+ *
243
+ * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
244
+ * Dual licensed under the MIT (MIT-LICENSE.txt)
245
+ * and GPL (GPL-LICENSE.txt) licenses.
246
+ *
247
+ * http://docs.jquery.com/UI/Effects/Shake
248
+ *
249
+ * Depends:
250
+ * effects.core.js
251
+ */
252
+ * jQuery UI Effects Slide 1.7.1
253
+ *
254
+ * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
255
+ * Dual licensed under the MIT (MIT-LICENSE.txt)
256
+ * and GPL (GPL-LICENSE.txt) licenses.
257
+ *
258
+ * http://docs.jquery.com/UI/Effects/Slide
259
+ *
260
+ * Depends:
261
+ * effects.core.js
262
+ */
263
+ * jQuery UI Effects Transfer 1.7.1
264
+ *
265
+ * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
266
+ * Dual licensed under the MIT (MIT-LICENSE.txt)
267
+ * and GPL (GPL-LICENSE.txt) licenses.
268
+ *
269
+ * http://docs.jquery.com/UI/Effects/Transfer
270
+ *
271
+ * Depends:
272
+ * effects.core.js
273
+ */
includes/php/php_browsecap.ini ADDED
@@ -0,0 +1,16810 @@