OSDN Git Service

embrj
authorJiang <jianghgr@yahoo.co.jp>
Wed, 19 Nov 2014 08:31:21 +0000 (16:31 +0800)
committerJiang <jianghgr@yahoo.co.jp>
Wed, 19 Nov 2014 08:31:21 +0000 (16:31 +0800)
124 files changed:
.htaccess
README.md [new file with mode: 0644]
ajax/addMembersToList.php [new file with mode: 0644]
ajax/apiQuota.php
ajax/delete.php
ajax/expand.php [new file with mode: 0644]
ajax/getRelationship.php [deleted file]
ajax/modifyList.php [new file with mode: 0644]
ajax/retweet.php
ajax/savedSearches.php [new file with mode: 0644]
ajax/status.php
ajax/timeline_format.php [deleted file]
ajax/updateFollowing.php
ajax/updateList.php
ajax/updateMessage.php
ajax/updateReplies.php
ajax/updateTimeline.php
ajax/uploadImage.php
ajax/uploadPhoto.php [deleted file]
all.php
authorize.php
basic_auth.php [deleted file]
block.php
browse.php [deleted file]
css/main.css
error.php
favicon.gif [deleted file]
favicon.ico [deleted file]
favor.php
followers.php
friends.php
img/3.gif [deleted file]
img/bg-front.gif [deleted file]
img/bg_faux.png [deleted file]
img/bird.png [deleted file]
img/faved.png [deleted file]
img/nexus_intro.png [deleted file]
img/nexus_logo.png [deleted file]
img/rabr_cry.gif [deleted file]
img/rabr_login.jpg [deleted file]
img/rabr_logo.png [deleted file]
inc/followingWall.php [deleted file]
inc/footer.php
inc/header.php
inc/onlineUsers.php [deleted file]
inc/sidebar.php
inc/sidepost.php
inc/symbols.inc
inc/symbols.php [deleted file]
inc/trends.php
inc/userlist.php
index.php
js/ajaxfileupload.js [deleted file]
js/btns.js
js/colorpicker3.js [deleted file]
js/favor.js [deleted file]
js/formfunc.js
js/jquery.js
js/jquery.plugins.js [deleted file]
js/jquery.tools.min.js [deleted file]
js/list.js
js/list_members.js
js/lists.js
js/main.js [deleted file]
js/message.js
js/nexus.js [deleted file]
js/profile.js [deleted file]
js/public.js
js/search.js
js/setting.js
js/user.js
lib/config.php [deleted file]
lib/config.sample.php
lib/image_uploader.php [deleted file]
lib/mobile_device_detect.php
lib/oauth_lib.php
lib/timeline_format.php
lib/twitese.php
lib/twitter.php [deleted file]
lib/twitteroauth.php
lib/utility.php
list.php
list_followers.php
list_members.php
lists.php
login.php
login_action.php [deleted file]
logout.php
message.php
nexus.php [deleted file]
oauth.php
profile.php
rank.php [deleted file]
replies.php
retweets.php
search.php
setting.php
share.php
signup/available.php [deleted file]
signup/check.gif [deleted file]
signup/common.php [deleted file]
signup/image.php [deleted file]
signup/index.php [deleted file]
signup/main.js [deleted file]
signup/style.css [deleted file]
status.php
themes/1.css
themes/10.css
themes/11.css
themes/12.css
themes/13.css
themes/14.css
themes/15.css
themes/16.css
themes/2.css
themes/3.css
themes/4.css
themes/5.css
themes/6.css
themes/7.css
themes/8.css
themes/9.css
themes/minimal.css
user.php

index bf2a7a6..d05ed1e 100644 (file)
--- a/.htaccess
+++ b/.htaccess
@@ -1,10 +1,10 @@
-RewriteEngine On\r
-RewriteRule ^([a-zA-Z0-9_]+)$ user.php?id=$1 [L,QSA]\r
-RewriteRule ^(\d+)$ status.php?id=$1 [L,QSA]\r
-<IfModule mod_expires.c>\r
-ExpiresActive On\r
-ExpiresByType image/gif A2592000\r
-ExpiresByType image/png A2592000\r
-ExpiresByType text/css A2592000\r
-ExpiresByType application/x-javascript A2592000\r
+RewriteEngine On
+RewriteRule ^([a-zA-Z0-9_]+)$ user.php?id=$1 [L,QSA]
+RewriteRule ^(\d+)$ status.php?id=$1 [L,QSA]
+<IfModule mod_expires.c>
+ExpiresActive On
+ExpiresByType image/gif A2592000
+ExpiresByType image/png A2592000
+ExpiresByType text/css A2592000
+ExpiresByType application/x-javascript A2592000
 </IfModule>
\ No newline at end of file
diff --git a/README.md b/README.md
new file mode 100644 (file)
index 0000000..7df6ef1
--- /dev/null
+++ b/README.md
@@ -0,0 +1,26 @@
+How to Install
+--------
+The installation of embrj is pretty much the same with embr's, you just need to get the source, rename `config.sample.php` in `/lib` to `config.php`, edit it with your own app information and upload it to your hosting directory.
+
+And here are some tips you may want to know:
+
+ * embrj requires `php-curl` and `php-bcmath`
+ * while not necessarily required, `php-mcrypt` is recommended
+ * embrj is compatible with PHP from version 5.2 to 5.5, we didn't test it on 5.1 or older versions
+
+Installing in sub-directory
+--------
+If you need to install embrj in a sub-directory of your website, say, in `/embrj`, you'll need to adjust the `.htaccess` file with `/embrj/user.php` and `/embrj/status.php` instead of `/user.php` and `/status.php`.
+
+nginx
+--------
+For nginx users, you'll need to add these lines to your nginx config file:
+
+    location / {
+        if (!-f $request_filename) {
+            rewrite ^/(\d+)$ /status.php?id=$1 last;
+            rewrite ^/(\w+)$ /user.php?id=$1 last;
+            break;
+        }
+    }
+And of course, adjust it if you are in a sub-directory.
diff --git a/ajax/addMembersToList.php b/ajax/addMembersToList.php
new file mode 100644 (file)
index 0000000..aa71ce9
--- /dev/null
@@ -0,0 +1,18 @@
+<?php
+        if(!isset($_SESSION)){
+                session_start();
+        }
+        include ('../lib/twitese.php');
+        $t = getTwitter();
+       $listId = $_POST['slug'];
+       $id = $_POST['owner'];
+       $members = $_POST['add_members'];
+       $result = $t->addListMember($listId, $id, $members);
+       if ($result) {
+               $ret = 'Followers: '.$result->subsriber_count.'&nbsp;&nbsp;';
+               $ret .= 'Members: '.$result->member_count.'&nbsp;&nbsp;';
+               $ret .= $result->mode == "private" ? "Private" : "Public";
+               echo $ret;
+       } else
+               echo 'error';
+?>
index 0b9a962..bb1ff75 100644 (file)
@@ -4,11 +4,18 @@
                session_start();
        }
        $t = getTwitter();
-       $limit = $t->ratelimit();
-       $reset = intval((format_time($limit->reset_time) - time())/60);
-       $remaining = $limit->remaining_hits < 0 ? 0 : $limit->remaining_hits;
-       $hourly = $limit->hourly_limit;
+       $limit = get_object_vars($t->ratelimit()->resources->statuses);
+       $timeline_limit = $limit["/statuses/home_timeline"];
+       $mentions_limit = $limit['/statuses/mentions_timeline'];
+       $timeline_reset = intval($timeline_limit->reset - $_SERVER['REQUEST_TIME']);
+       $mentions_reset = intval($mentions_limit->reset - $_SERVER['REQUEST_TIME']);
+       $timeline_remaining = $timeline_limit->remaining < 0 ? 0 : $timeline_limit->remaining;
+       $mentions_remaining = $mentions_limit->remaining < 0 ? 0 : $mentions_limit->remaining;
+       $timeline_qlimit = $timeline_limit->limit;
+       $mentions_qlimit = $mentions_limit->limit;
        header('Content-Type: text/html');
-       echo "<li><span style=\"color: #2276BB\">API: $remaining/$hourly</span></li>
-       <li><span style=\"color: #2276BB\">Reset in $reset min(s)</span></li>";
+       echo "<li><span style=\"color: #2276BB\">Timeline API remains: $timeline_remaining/$timeline_qlimit</span></li>
+       <li><span style=\"color: #2276BB\">Reset in $timeline_reset sec(s)</span></li>
+       <li><span style=\"color: #2276BB\">Mentions API remains: $mentions_remaining/$mentions_qlimit</span></li>
+       <li><span style=\"color: #2276BB\">Reset in $mentions_reset sec(s)</span></li>";
 ?>
index f9e21ae..8a5abe9 100644 (file)
                if ($result) echo 'success';
                else echo 'error';
        }
-       elseif ( isset($_POST['list_id']) ) {
-               $result = $t->deleteList($_POST['list_id']);
+       elseif ( isset($_POST['list_slug']) ) {
+               $result = $t->deleteList($_POST['list_slug']);
                if ($result) echo 'success';
                else echo 'error';
        }
        elseif ( isset($_POST['list_member']) ) {
-               //$user = $t->showUser($_POST['list_member']);
-               $result = $t->deleteListMember($_POST['id'], $_POST['list_member']);
+               $result = $t->deleteListMember($_POST['slug'], $_POST['owner'], $_POST['list_member']);
                if ($result) echo 'success';
                else echo 'error';
        }
diff --git a/ajax/expand.php b/ajax/expand.php
new file mode 100644 (file)
index 0000000..502d17a
--- /dev/null
@@ -0,0 +1,29 @@
+<?php
+
+include_once('../lib/config.php');
+include_once('../lib/twitese.php');
+
+if (parse_url($_SERVER['HTTP_REFERER'], PHP_URL_HOST) != parse_url(BASE_URL, PHP_URL_HOST)) {
+       echo '{"error":"Invalid referer."}';
+       exit();
+}
+
+$url = isset($_GET['url']) ? $_GET['url'] : false;
+if (!$url || empty($url)) {
+       echo '{"error":"No URL is provided."}';
+       exit();
+}
+if (!filter_var($url, FILTER_VALIDATE_URL)) {
+       echo '{"error":"Malformed URL."}';
+       exit();
+}
+
+$thehops = array();
+$answer = expandRedirect($url, $thehops);
+if (!$answer) {
+       echo '{"error":"No URL is provided."}';
+}
+else
+       echo "{\"expanded_url\":\"$answer\"}";
+
+?>
diff --git a/ajax/getRelationship.php b/ajax/getRelationship.php
deleted file mode 100644 (file)
index b10ee35..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
-<?php\r
-       if(!isset($_SESSION)){\r
-               session_start();\r
-       }\r
-       include_once("../lib/twitese.php");\r
-       if(!isset($_GET['target'])){\r
-               echo "error";\r
-               exit;\r
-       }\r
-       $target = trim($_GET['target']);\r
-       $t = getTwitter();\r
-       $source = isset($_GET['source']) ? trim($_GET['source']) : $t->username;\r
-       if($target == '' || $source == ''){\r
-               echo "error";\r
-               exit;\r
-       }\r
-       $analysis = getRelationship($target, $source);\r
-       switch($analysis){\r
-               case 1:\r
-                       $result = '<h3 style="color:#00805F;text-shadow:1px 1px #FFFFFF;">They\'re following each other. How sweet!</h3>';\r
-                       break;\r
-               case 2:\r
-                       $result = '<h3 style="margin-top: 80px; text-shadow: 1px 1px rgb(255, 255, 255); color: rgb(0, 128, 95);">\r
-                                               <a href="user.php?id='.$source.'">@'.$source.'</a> is following <a href="user.php?id='.$target.'">@'.$target.'</a>\r
-                                               </h3>\r
-                                          <h3 style="margin-top: 5px; color: rgb(131, 22, 31); text-shadow: 1px 1px rgb(255, 255, 255);">\r
-                                          <a href="user.php?id='.$target.'">@'.$target.'</a> is NOT following <a href="user.php?id='.$source.'">@'.$source.'</a>\r
-                                               </h3>';\r
-                       break;\r
-               case 3:\r
-                       $result = '<h3 style="margin-top: 80px; text-shadow: 1px 1px rgb(255, 255, 255); color: rgb(0, 128, 95);">\r
-                                               <a href="user.php?id='.$target.'">@'.$target.'</a> is following <a href="user.php?id='.$source.'">@'.$source.'</a>\r
-                                               </h3>\r
-                                          <h3 style="margin-top: 5px; color: rgb(131, 22, 31); text-shadow: 1px 1px rgb(255, 255, 255);">\r
-                                          <a href="user.php?id='.$source.'">@'.$source.'</a> is NOT following <a href="user.php?id='.$target.'">@'.$target.'</a>\r
-                                               </h3>';\r
-                       break;\r
-               case 4:\r
-                       $result = '<h3 style="color: rgb(131, 22, 31); text-shadow: 1px 1px rgb(255, 255, 255);">\r
-                                               <a href="user.php?id='.$source.'">@'.$source.'</a> is blocking <a href="user.php?id='.$target.'">@'.$target.'</a>\r
-                                               </h3>';\r
-                       break;\r
-               case 9:\r
-                       $result = '<h3 style="color:#666666;text-shadow: 1px 1px rgb(255, 255, 255);">It seems that they don\'t know each other!</h3>';\r
-                       break;\r
-       }\r
-       $html = $result;\r
-       echo $html;\r
-?>
\ No newline at end of file
diff --git a/ajax/modifyList.php b/ajax/modifyList.php
new file mode 100644 (file)
index 0000000..8fa8e41
--- /dev/null
@@ -0,0 +1,26 @@
+<?php
+        if(!isset($_SESSION)){
+                session_start();
+        }
+        include ('../lib/twitese.php');
+        $t = getTwitter();
+       $name = $_POST['name'];
+       $description = $_POST['description'];
+       $mode = $_POST['mode'];
+       if (isset($_POST['slug'])) {
+               $result = $t->editList($_POST['slug'], $name, $description, $mode);
+       }
+       else {
+               $result = $t->createList($name, $description, $mode);
+       }
+       if ($result) {
+               $ret = '{"result": "success"';
+               $ret .= ',"username":"'.$t->username.'"';
+               $ret .= ',"imgurl":"'.getAvatar($result->user->profile_image_url).'"';
+               $ret .= ',"contentid":"list'.$result->id_str.'"';
+               $ret .= ',"listuri":"'.substr($result->uri,1).'"';
+               $ret .= '}';
+               echo $ret;
+       }
+       else echo '{"result": "error"}';
+?>
index 6099d33..4f50de6 100644 (file)
@@ -3,7 +3,7 @@
                session_start();
        }
        include('../lib/twitese.php');
-       include('timeline_format.php');
+       include('../lib/timeline_format.php');
        $t = getTwitter();
        if(isset($_POST['status_id'])){
                $id = trim($_POST['status_id']);
diff --git a/ajax/savedSearches.php b/ajax/savedSearches.php
new file mode 100644 (file)
index 0000000..65b95a8
--- /dev/null
@@ -0,0 +1,42 @@
+<?php
+       if(!isset($_SESSION)){
+               session_start();
+       }
+       include ('../lib/twitese.php');
+       $t = getTwitter();
+       if ($_GET['method'] == "list") {
+               $ss = $t->savedSearches();
+               $answer = '[';
+               $firsts = true;
+
+               foreach($ss as $onesearch){
+                       if (!$firsts){
+                               $answer .= ',';
+                       }
+                       else{
+                               $firsts = false;
+                       }
+                       $answer .= '["'.$onesearch->id_str.'", "'.$onesearch->query.'"]';
+               }
+
+               $answer .=']';
+               echo $answer;
+       }
+       else if ($_GET['method'] == "delete") {
+               $ssid = $_GET['ssid'];
+               $dss = $t->deleteSavedSearch($ssid);
+               if (isset($dss->query))
+                       echo "success";
+               else
+                       echo "error";
+       }
+       else if ($_GET['method'] == "save") {
+               $query = $_GET['query'];
+               $ss = $t->saveSearch($query);
+               if (isset($ss->query))
+                       echo '["'.$ss->id_str.'", "'.$ss->query.'"]';
+               else
+                       echo "error";
+       }
+?>
+
index 5b8a1d0..5ca32f6 100644 (file)
@@ -40,7 +40,7 @@
                        </span>
                        <span class="status_body">
                        <span class="status_id">'.$status_id.'</span>
-                       <span class="status_word" style="font-size: 12px;"><a class="user_name" href="user.php?id='.$user->screen_name.'">'.$user->screen_name.'</a> <span class="tweet">'.$text.'</span></span>
+                       <span class="status_word" style="font-size: 12px;"><a class="user_name" href="user.php?id='.$user->screen_name.'" id="'.$user->screen_name.'">'.($_COOKIE['shownick']=='true' ? $user->name : $user->screen_name).'</a> <span class="tweet">'.$text.'</span></span>
                        <span class="status_info" style="font-size: 11px; margin: 0px;">';
                if($end && isset($status->in_reply_to_user_id)){
                        $html .= '<span class="in_reply_to"> <a class="ajax_reply" href="ajax/status.php?id='.$status->in_reply_to_status_id_str.'&uid='.$user->id.'">in reply to '.$status->in_reply_to_screen_name.'</a></span>';
diff --git a/ajax/timeline_format.php b/ajax/timeline_format.php
deleted file mode 100644 (file)
index dd0d97d..0000000
+++ /dev/null
@@ -1,172 +0,0 @@
-<?php\r
-       function format_retweet($status, $retweetByMe = false){\r
-               $retweeter = $status->user;\r
-               $rt_status = $status->retweeted_status;\r
-               $status_owner = $rt_status->user;\r
-               $date = formatDate($status->created_at);\r
-               $text = formatText($rt_status->text);\r
-               $html = '<li>\r
-                       <span class="status_author">'.initShortcutMenu($status_owner).'\r
-                       <a href="user.php?id='.$status_owner->screen_name.'" target="_blank"><img src="'.getAvatar($status_owner->profile_image_url).'" title="'.$status_owner->screen_name.'" /></a>\r
-                       </span>\r
-                       <span class="status_body">\r
-                       <span title="Retweets from people you follow appear in your timeline." class="big-retweet-icon"></span>\r
-                       <span class="status_id">'.$status->id.'</span>\r
-                       <span class="status_word">\r
-                       <a class="user_name" href="user.php?id='.$status_owner->screen_name.'">'.$status_owner->screen_name.'</a><span class="tweet">&nbsp;'.$text.'</span></span>';\r
-               $html .= recoverShortens($text);\r
-               $html .= '<span class="actions">\r
-                       <a class="replie_btn" title="Reply" href="a_reply.php?id='.$rt_status->id.'">Reply</a>\r
-                       <a class="rt_btn" title="Retweet" href="a_rt.php?id='.$rt_status->id.'">Retweet</a>';\r
-               if($retweetByMe != true){\r
-                       $html .= '<a class="retw_btn" title="New Retweet" href="javascript:void(0);">New Retweet</a>';\r
-               }\r
-               $html .= '<a class="favor_btn" title="Favorite" href="a_favor.php?id='.$rt_status->id.'">Favorite</a>\r
-                                       <a class="trans_btn" title="Translate" href="javascript:void(0);">Translate</a>';\r
-               if($retweetByMe == true){\r
-                       $html .= '<a class="delete_btn" title="Delete" href="javascript:void(0)"><span class="rt_id" style="display: none;">'.$status->id.'</span></a>';\r
-               }\r
-               $html .='</span>\r
-                       <span class="status_info"><span class="source">Retweeted by <a href="user.php?id='.$retweeter->screen_name.'">'.$retweeter->screen_name.'</a> from '.$status->source.'</span>\r
-                       <span class="date"><a href="status.php?id='.$rt_status->id.'" title="'.date('Y-m-d H:i:s', strtotime($status->created_at)).'" target="_blank">'.$date.'</a></span>\r
-                       </span>\r
-                       </span>\r
-                       </li>';\r
-               return $html;\r
-       }\r
-\r
-       function format_retweet_of_me($status){\r
-               $status_owner = $status->user;\r
-               $date = formatDate($status->created_at);\r
-               $text = formatText($status->text);\r
-               $html = '<li>\r
-                       <span class="status_author">\r
-                       <a href="user.php?id='.$status_owner->screen_name.'" target="_blank"><img src="'.getAvatar($status_owner->profile_image_url).'" title="'.$status_owner->screen_name.'" /></a>\r
-                       </span>\r
-                       <span class="status_body">\r
-                       <span title="Retweets from people you follow appear in your timeline." class="big-retweet-icon"></span>\r
-                       <span class="status_id">'.$status->id.'</span>\r
-                       <span class="status_word">\r
-                       <a class="user_name" href="user.php?id='.$status_owner->screen_name.'">'.$status_owner->screen_name.'</a><span class="tweet">&nbsp;'.$text.'</span></span>';\r
-               $html .= recoverShortens($text);\r
-               $html .= '<span class="actions">\r
-                       <a class="replie_btn" title="Reply" href="a_reply.php?id='.$status->id.'">Reply</a>\r
-                       <a class="rt_btn" title="Retweet" href="a_rt.php?id='.$status->id.'">Retweet</a>\r
-                       <a class="favor_btn" title="Favorite" href="a_favor.php?id='.$status->id.'">Favorite</a>\r
-                       <a class="trans_btn" title="Translate" href="javascript:void(0);">Translate</a>\r
-                       <a class="delete_btn" title="Delete" href="a_del.php?id='.$status->id.'&t=s">Delete</a>\r
-                       </span>\r
-                       <span class="status_info">from '.$status->source.'\r
-                       <span class="date"><a href="status.php?id='.$status->id.'" title="'.date('Y-m-d H:i:s', strtotime($status->created_at)).'" target="_blank">'.$date.'</a></span>\r
-                       </span>\r
-                       </span>\r
-                       </li>';\r
-               return $html;\r
-       }\r
-\r
-       function getRetweeters($id, $count = 20){\r
-               $t = getTwitter();\r
-               $retweeters = $t->getRetweeters($id);\r
-               $html = '<span class="vcard">';\r
-               foreach($retweeters as $retweeter){\r
-                       $user = $retweeter->user;\r
-                       $html .= '<a class="url" title="'.$user->name.'" rel="contact" href="../user.php?id='.$user->screen_name.'">\r
-                               <img class="photo fn" width="24" height="24" src="'.getAvatar($user->profile_image_url).'" alt="'.$user->name.'" />\r
-                               </a>';\r
-               }\r
-               $html .= "</span>";\r
-               return $html;\r
-       }\r
-\r
-       // $updateStatus 标识是否为发推, 是则应用指定 css\r
-       function format_timeline($status, $screen_name, $updateStatus = false){\r
-               $user = $status->user;\r
-               $date = formatDate($status->created_at);\r
-               $text = formatText($status->text);\r
-\r
-               if(preg_match('/^\@'.getTwitter()->username.'/i', $text) == 1){\r
-                       $output = "<li class=\"reply\">";\r
-               }elseif($updateStatus == true){\r
-                       $output = "<li class=\"mine\">";\r
-               }else{\r
-                       $output = "<li>";\r
-               }\r
-\r
-               $output .= "<span class=\"status_author\">".initShortcutMenu($user)."\r
-                       <a href=\"user.php?id=$user->screen_name\" target=\"_blank\"><img src=\"".getAvatar($user->profile_image_url)."\" title=\"$user->screen_name\" /></a>\r
-                       </span>\r
-                       <span class=\"status_body\">\r
-                       <span class=\"status_id\">$status->id </span>\r
-                       <span class=\"status_word\"><a class=\"user_name\" href=\"user.php?id=$user->screen_name\">$user->screen_name</a><span class=\"tweet\"> $text </span></span>";\r
-               $output .= recoverShortens($text);\r
-               $output .= "<span class=\"actions\">\r
-                       <a class=\"replie_btn\" title=\"Reply\" href=\"a_reply.php?id=$status->id\">回复</a>\r
-                       <a class=\"rt_btn\" title=\"Retweet\" href=\"a_rt.php?id=$status->id\">回推</a>";\r
-               if($user->screen_name != $screen_name){\r
-                       $output .= "<a class=\"retw_btn\" title=\"New Retweet\" href=\"javascript:void(0);\">New Retweet</a>";\r
-               }\r
-               $output .= "<a class=\"favor_btn\" title=\"Favorite\" href=\"a_favor.php?id=$status->id\">Favorite</a>\r
-                                       <a class=\"trans_btn\" title=\"Translate\" href=\"javascript:void(0);\">Translate</a>";\r
-               if ($user->screen_name == $screen_name) $output .= "<a class=\"delete_btn\" title=\"Delete\" href=\"a_del.php?id=$status->id&t=s\">Delete</a>";\r
-               $output .= "</span><span class=\"status_info\">";\r
-               if ($status->in_reply_to_status_id) $output .= "<span class=\"in_reply_to\"> <a class=\"ajax_reply\" href=\"ajax/status.php?id=$status->in_reply_to_status_id&uid=$user->id \">in reply to $status->in_reply_to_screen_name</a>&nbsp;</span>";\r
-               $output .= "<span class=\"source\">from $status->source</span>\r
-                       <span class=\"date\"><a href=\"status.php?id=$status->id\" title=\"".date('Y-m-d H:i:s', strtotime($status->created_at))."\" target=\"_blank\">$date</a></span>\r
-                       </span>\r
-                       </span>\r
-                       </li>";\r
-               return $output;\r
-       }\r
-\r
-       /* ---------- Sorting timeline ---------- */\r
-       function cmp($a, $b)\r
-       {\r
-               $a_date = strtotime($a->created_at);\r
-               $b_date = strtotime($b->created_at);\r
-               if ($a_date == $b_date) {\r
-                       return 0;\r
-               }\r
-               return ($a_date > $b_date) ? -1 : 1;\r
-       }\r
-\r
-       function sort_timeline($timeline, $retweet){\r
-               $status = array_merge($timeline, $retweet);\r
-               usort($status, "cmp");\r
-               return $status;\r
-       }\r
-\r
-       /* ---------- Restore shortened urls ---------- */\r
-       function initShortcutMenu($user = false){\r
-               return '';\r
-               if(!$user && !isset($user->screen_name)){\r
-                       return '';\r
-               }\r
-\r
-               $username = getEncryptCookie('twitese_name');\r
-               if($user->screen_name == $username){\r
-                       return '';\r
-               }\r
-               $relationship = getRelationship($user->screen_name, $username);\r
-\r
-               $mention = $dm = $unfollow = $follow = $block = $spam = '';\r
-               $mention = '<li class="rm_mention"><a href="javascript:void(0);"><i></i>Mention <span>'.$user->screen_name.'</a></li>';\r
-               if($relationship == 1){\r
-                       $dm = '<li class="rm_dm"><a href="javascript:void(0);"><i></i>Direct message <span>'.$user->screen_name.'</span></a></li>';\r
-               }\r
-               if($relationship == 1 || $relationship == 2){\r
-                       $unfollow = '<li class="rm_unfollow"><a href="javascript:void(0);"><i></i>Unfollow <span>'.$user->screen_name.'</span></a></li>';\r
-               }\r
-               if($relationship == 3 || $relationship == 4 || $relationship == 9){\r
-                       $follow = '<li class="rm_follow"><a href="javascript:void(0);"><i></i>Follow <span>'.$user->screen_name.'</span></a></li>';\r
-               }\r
-               if($relationship == 4){\r
-                       $block = '<li class="rm_unblock"><a href="javascript:void(0);"><i></i>Unblock <span>'.$user->screen_name.'</span></a></li>';\r
-               }else{\r
-                       $block = '<li class="rm_block"><a href="javascript:void(0);"><i></i>Block <span>'.$user->screen_name.'</span></a></li>';\r
-               }\r
-               $spam = '<li class="rm_spam"><a href="javascript:void(0);"><i></i>Report <span>'.$user->screen_name.'</span> for spam</a></li>';\r
-               $html = '<ul class="right_menu round">'.$mention.$dm.$unfollow.$follow.$block.$spam.'</ul>';\r
-               return $html;\r
-       }\r
-\r
-?>
\ No newline at end of file
index 4c2eb74..b8b7060 100644 (file)
@@ -5,8 +5,8 @@
        include('../lib/twitese.php');
 
        $t = getTwitter();
-       $MAX_COUNT = 36;
-       $friends = $t->friends(false, false, $MAX_COUNT)->users;
+       $skip_status = false;
+       $friends = $t->friends(false, false, $skip_status)->users;
        $html = '';
        foreach($friends as $friend){
                $html .= '<span class="vcard">
index bfa7941..1d135f8 100644 (file)
@@ -6,7 +6,7 @@
        $t = getTwitter();
        if ( isset($_GET['since_id']) && isset($_GET['id'])) {
 
-               $statuses = $t->listStatus($_GET['id'], false, $_GET['since_id']);
+               $statuses = $t->listStatus($_GET['id'], $_GET['since_id']);
 
                $empty = count($statuses) == 0? true: false;
 
                                        </span>
                                        <span class=\"status_body\">
                                        <span class=\"status_id\">$status->id_str </span>
-                                       <span class=\"status_word\"><a class=\"user_name\" href=\"user.php?id=$user->screen_name\">$user->screen_name</a><span class=\"tweet\"> $text </span></span>
+                                       <span class=\"status_word\"><a class=\"user_name\" href=\"user.php?id=$user->screen_name\" id=\"$user->screen_name\">".($_COOKIE['shownick']=='true' ? $user->name : $user->screen_name)."</a><span class=\"tweet\"> $text </span></span>
                                        <span class=\"actions\">
                                        <a class=\"replie_btn\" title=\"Reply\" href=\"a_reply.php?id=$status->id_str\">Reply</a>
                                        <a class=\"rt_btn\" title=\"Retweet\" href=\"a_rt.php?id=$status->id_str\">RT</a>
                                        <a class=\"favor_btn\" title=\"Favorite\" href=\"a_favor.php?id=$status->id_str\">Favor</a>";
-                               if ($user->screen_name == $t->username) $output .= "<a class=\"delete_btn\" title=\"Delete\" href=\"a_del.php?id=$status->id_str&t=s\">删除</a>";
+                               if ($user->screen_name == $t->username) $output .= "<a class=\"delete_btn\" title=\"Delete\" href=\"a_del.php?id=$status->id_str&t=s\">Delete</a>";
                                $output .= "</span><span class=\"status_info\">";
                                if ($status->in_reply_to_status_id_str) $output .= "<span class=\"in_reply_to\"> <a class=\"ajax_reply\" href=\"ajax/status.php?id=$status->in_reply_to_status_id_str&uid=$user->id \">in reply to $status->in_reply_to_screen_name</a></span>";
                                $output .= "<span class=\"source\">via $status->source</span>
index 632720d..cf05d61 100644 (file)
@@ -7,7 +7,7 @@
        $t = getTwitter();
        if ( isset($_GET['since_id']) ) {
 
-               $messages = $t->directMessages(false, $_GET['since_id']);
+               $messages = $t->directMessages($_GET['since_id']);
                $count = count($messages);
                if ($count == 0) {
                        echo "empty";
index 9083748..bf553bf 100644 (file)
@@ -7,7 +7,7 @@
        $t = getTwitter();
        if ( isset($_GET['since_id']) ) {
 
-               $statuses = $t->replies(false, $_GET['since_id']);
+               $statuses = $t->replies($_GET['since_id']);
                $count = count($statuses);
                if ($count == 0) {
                        echo "empty";
index 397a200..cf4ac20 100644 (file)
@@ -6,7 +6,7 @@
        include('../lib/timeline_format.php');
        $t = getTwitter();
        if ( isset($_GET['since_id']) ) {
-               $statuses = $t->homeTimeline(false, $_GET['since_id']);
+               $statuses = $t->homeTimeline($_GET['since_id']);
                $count = count($statuses);
                $html = "";
                if ($count <= 0) {
index 002b4a2..655a845 100644 (file)
@@ -1,29 +1,48 @@
-<?php\r
-       if(!isset($_SESSION)){\r
-               session_start();\r
-       }\r
-       include ('../lib/twitese.php');\r
-       if (isset($_FILES['image'])) {\r
-               $image = "@{$_FILES['image']['tmp_name']};type={$_FILES['image']['type']};filename={$_FILES['image']['name']}";\r
-               switch($_GET['do']) {\r
-                       case 'image':\r
-                       $result = imageUpload($image);\r
-                       if (isset($result->url)) {\r
-                               echo '{"result": "success" , "url" : "' . $result->url . '"}';\r
-                       } else {\r
-                               echo '{"result": "error"}';\r
-                       }\r
-                       break;\r
-                       case 'profile':\r
-                       $t = getTwitter();\r
-                       $skip_status = $_POST['skip_status'];\r
-                       $result = $t->updateProfileImage($image,$skip_status);\r
-                       if ($t->http_code == 200) {\r
-                               echo '{"result": "success"}';\r
-                       } else {\r
-                               echo '{"result": "error"}';\r
-                       }\r
-                       break;\r
-               }\r
-       }\r
-?>\r
+<?php
+       if(!isset($_SESSION)){
+               session_start();
+       }
+       include ('../lib/twitese.php');
+       switch($_GET['do']) {
+               case 'image':
+               if (!isset($_FILES['image'])) break;
+               $image = "@{$_FILES['image']['tmp_name']};type={$_FILES['image']['type']};filename={$_FILES['image']['name']}";
+               $result = imageUpload($image);
+               if (isset($result->url)) {
+                       echo '{"result": "success" , "url" : "' . $result->url . '"}';
+               } else {
+                       echo '{"result": "error"}';
+               }
+               break;
+               case 'profile':
+               if (!isset($_FILES['image'])) break;
+               $image = file_get_contents($_FILES['image']['tmp_name']);
+               $image = base64_encode($image);
+               $t = getTwitter();
+               $skip_status = $_POST['skip_status'];
+               $result = $t->updateProfileImage($image,$skip_status);
+               if ($t->http_code == 200) {
+                       echo '{"result": "success"}';
+               } else {
+                       echo '{"result": "error"}';
+               }
+               break;
+               case 'background':
+               $t = getTwitter();
+               if (isset($_POST['tile'])) {
+                       $tile = $_POST['tile'];
+                       $result = $t->updateProfileBackground(false, $tile);
+               }
+               else {
+                       $image = file_get_contents($_FILES['image']['tmp_name']);
+                       $image = base64_encode($image);
+                       $result = $t->updateProfileBackground($image);
+               }
+               if ($t->http_code == 200) {
+                       echo '{"result": "success", "url": "'. getAvatar($result->profile_background_image_url) .'", "tile": "'. ($result->profile_background_tile ? "true" : "false") .'"}';
+               } else {
+                       echo '{"result": "error"}';
+               }
+               break;
+       }
+?>
diff --git a/ajax/uploadPhoto.php b/ajax/uploadPhoto.php
deleted file mode 100644 (file)
index f7c0bf7..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-<?php\r
-       if(!isset($_SESSION)){\r
-               session_start();\r
-       }\r
-       include ('../lib/twitese.php');\r
-       $t = getTwitter();\r
-       if (isset($_FILES["image"])) {\r
-               $image = $_FILES["image"]['tmp_name'];\r
-               $result = $t->imglyUpload($image);\r
-               if (isset($result->mediaurl)) {\r
-                       echo '{"result": "success" , "url" : "' . $result->mediaurl . '"}';\r
-               } else {\r
-                       echo '{"result": "error"}';\r
-               }\r
-       }\r
-\r
-?>\r
diff --git a/all.php b/all.php
index ce21752..0b21f86 100644 (file)
--- a/all.php
+++ b/all.php
@@ -1,85 +1,91 @@
-<?php \r
-       include_once('lib/twitese.php');\r
-       $title = 'Updates';\r
-       include_once('inc/header.php');\r
-       include_once('lib/timeline_format.php');\r
-       if (!loginStatus()) header('location: login.php');\r
-?>\r
-<div id="statuses" class="column round-left">\r
-<?php\r
-       include('inc/sentForm.php');\r
-?>\r
-<script src="js/all.js"></script>\r
-<style>.timeline li {border-bottom:1px solid #EFEFEF;border-top:none !important}</style>\r
-                       <div id="allNav">\r
-                       <a class="allBtn allHighLight" id="allTimelineBtn" href="#">Updates</a>\r
-                       <a class="allBtn" id="allRepliesBtn" href="#">Replies</a>\r
-                       <a class="allBtn" id="allMessageBtn" href="#">Messages</a>\r
-               </div>\r
-<?php\r
-       $statuses = $t->homeTimeline();\r
-       if ($statuses === false) {\r
-               header('location: error.php');exit();\r
-       }\r
-       $empty = count($statuses) == 0? true: false;\r
-       if ($empty) {\r
-               echo "<div id=\"empty\">No tweet to display</div>";\r
-       } else {\r
-               $output = '<ol class="timeline" id="allTimeline">';\r
-               foreach ($statuses as $status) {\r
-                       if(isset($status->retweeted_status)){\r
-                               $output .= format_retweet($status);\r
-                       }else{\r
-                               $output .= format_timeline($status, $t->username);\r
-                       }\r
-               }\r
-\r
-               $output .= "</ol>";\r
-\r
-               echo $output;\r
-       }\r
-\r
-       $statuses = $t->replies();\r
-       if ($statuses === false) {\r
-               header('location: error.php');exit();\r
-       }\r
-       $empty = count($statuses) == 0? true: false;\r
-       if ($empty) {\r
-               echo "<div id=\"empty\">No tweet to display</div>";\r
-       } else {\r
-               $output = '<ol class="timeline" id="allReplies">';\r
-\r
-               foreach ($statuses as $status) {\r
-                       $output .= format_timeline($status, $t->username);\r
-               }\r
-\r
-               $output .= "</ol>";\r
-\r
-               echo $output;\r
-       }\r
-\r
-\r
-       $messages = $t->directMessages();\r
-       if ($messages === false) {\r
-               header('location: error.php');exit();\r
-       }\r
-       $empty = count($messages) == 0? true: false;\r
-       if ($empty) {\r
-               echo "<div id=\"empty\">No tweet to display</div>";\r
-       } else {\r
-               $output = '<ol class="timeline" id="allMessage">';\r
-\r
-               foreach ($messages as $message) {\r
-                       $output .= format_message($message);\r
-               }\r
-\r
-               $output .= "</ol>";\r
-               echo $output;\r
-       }\r
-?>\r
-</div>\r
-\r
-<?php \r
-       include ('inc/sidebar.php');\r
-       include ('inc/footer.php');\r
-?>\r
+<?php 
+       include_once('lib/twitese.php');
+       $title = 'Updates';
+       include_once('inc/header.php');
+       include_once('lib/timeline_format.php');
+       if (!loginStatus()) header('location: login.php');
+?>
+<div id="statuses" class="column round-left">
+<?php
+       include('inc/sentForm.php');
+?>
+<script src="js/all.js"></script>
+<style>.timeline li {border-bottom:1px solid #EFEFEF;border-top:none !important}</style>
+                       <div id="allNav">
+                       <a class="allBtn allHighLight" id="allTimelineBtn" href="#">Updates</a>
+                       <a class="allBtn" id="allRepliesBtn" href="#">Replies</a>
+                       <a class="allBtn" id="allMessageBtn" href="#">Messages</a>
+               </div>
+<?php
+       $statuses = $t->homeTimeline();
+       if ($statuses === false) {
+               header('location: error.php');exit();
+       }
+       $empty = count($statuses) == 0? true: false;
+       if ($empty) {
+               echo "<div id=\"empty\">No tweet to display</div>";
+       } else if ($t->http_code == 429) {
+               echo "<div id=\"empty\">API quota is used out, please wait for a moment before next refresh.</div>";
+       } else {
+               $output = '<ol class="timeline" id="allTimeline">';
+               foreach ($statuses as $status) {
+                       if(isset($status->retweeted_status)){
+                               $output .= format_retweet($status);
+                       }else{
+                               $output .= format_timeline($status, $t->username);
+                       }
+               }
+
+               $output .= "</ol>";
+
+               echo $output;
+       }
+
+       $statuses = $t->replies();
+       if ($statuses === false) {
+               header('location: error.php');exit();
+       }
+       $empty = count($statuses) == 0? true: false;
+       if ($empty) {
+               echo "<div id=\"empty\">No tweet to display</div>";
+       } else if ($t->http_code == 429) {
+               echo "<div id=\"empty\">API quota is used out, please wait for a moment before next refresh.</div>";
+       } else {
+               $output = '<ol class="timeline" id="allReplies">';
+
+               foreach ($statuses as $status) {
+                       $output .= format_timeline($status, $t->username);
+               }
+
+               $output .= "</ol>";
+
+               echo $output;
+       }
+
+
+       $messages = $t->directMessages();
+       if ($messages === false) {
+               header('location: error.php');exit();
+       }
+       $empty = count($messages) == 0? true: false;
+       if ($empty) {
+               echo "<div id=\"empty\">No tweet to display</div>";
+       } else if ($t->http_code == 429) {
+               echo "<div id=\"empty\">API quota is used out, please wait for a moment before next refresh.</div>";
+       } else {
+               $output = '<ol class="timeline" id="allMessage">';
+
+               foreach ($messages as $message) {
+                       $output .= format_message($message);
+               }
+
+               $output .= "</ol>";
+               echo $output;
+       }
+?>
+</div>
+
+<?php 
+       include ('inc/sidebar.php');
+       include ('inc/footer.php');
+?>
index 65dbcdf..d39c8d5 100644 (file)
@@ -1,6 +1,6 @@
-<?php\r
-\r
-       include ('lib/twitese.php');\r
-       $url = 'https://api.twitter.com/oauth/authorize';\r
-       echo processCurl($url, http_build_query($_POST));\r
+<?php
+
+       include ('lib/twitese.php');
+       $url = 'https://api.twitter.com/oauth/authorize';
+       echo processCurl($url, http_build_query($_POST));
 ?>
\ No newline at end of file
diff --git a/basic_auth.php b/basic_auth.php
deleted file mode 100644 (file)
index 822bfd9..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-<?php\r
-/* from http://www.rooftopsolutions.nl/blog/223 */\r
-\r
-       $validUser = BASIC_AUTH_USER;\r
-       $validPass = BASIC_AUTH_PW;\r
-       \r
-       $realm = 'input your speicial username and password here from your sitemaster';\r
-       $nonce = uniqid(); \r
-       $digest = getDigest();\r
-       if (is_null($digest)) requireLogin($realm,$nonce); \r
-       $digestParts = digestParse($digest);\r
-       $A1 = md5("{$validUser}:{$realm}:{$validPass}");\r
-       $A2 = md5("{$_SERVER['REQUEST_METHOD']}:{$digestParts['uri']}");\r
-       $validResponse = md5("{$A1}:{$digestParts['nonce']}:{$digestParts['nc']}:{$digestParts['cnonce']}:{$digestParts['qop']}:{$A2}");\r
-       \r
-       if ($digestParts['response']!=$validResponse) requireLogin($realm,$nonce);\r
-       function getDigest() {\r
-    if (isset($_SERVER['PHP_AUTH_DIGEST'])) {\r
-        $digest = $_SERVER['PHP_AUTH_DIGEST'];\r
-    } elseif (isset($_SERVER['HTTP_AUTHENTICATION'])) {\r
-            if (strpos(strtolower($_SERVER['HTTP_AUTHENTICATION']),'digest')===0) \r
-              $digest = substr($_SERVER['HTTP_AUTHORIZATION'], 7);\r
-    }\r
-    return $digest;\r
-       }\r
-\r
-function requireLogin($realm,$nonce) {\r
-    header('WWW-Authenticate: Digest realm="' . $realm . '",qop="auth",nonce="' . $nonce . '",opaque="' . md5($realm) . '"');\r
-    header('HTTP/1.0 401 Unauthorized');\r
-    die();\r
-}\r
-\r
-function digestParse($digest) {\r
-    $needed_parts = array('nonce'=>1, 'nc'=>1, 'cnonce'=>1, 'qop'=>1, 'username'=>1, 'uri'=>1, 'response'=>1);\r
-    $data = array();\r
-    preg_match_all('@(\w+)=(?:(?:")([^"]+)"|([^\s,$]+))@', $digest, $matches, PREG_SET_ORDER);\r
-    foreach ($matches as $m) {\r
-        $data[$m[1]] = $m[2] ? $m[2] : $m[3];\r
-        unset($needed_parts[$m[1]]);\r
-    }\r
-    return $needed_parts ? false : $data;\r
-}\r
-?>
\ No newline at end of file
index d92d1c8..655e488 100644 (file)
--- a/block.php
+++ b/block.php
@@ -1,12 +1,12 @@
-<?php\r
-include('lib/twitese.php');\r
-$title = "Blocking";\r
-include('inc/header.php');\r
-if(!loginStatus()){\r
-       header('location: login.php');\r
-}\r
-$type = 'blocks';\r
-include('inc/userlist.php');\r
-include('inc/sidebar.php');\r
-include('inc/footer.php');\r
-?>\r
+<?php
+include('lib/twitese.php');
+$title = "Blocking";
+include('inc/header.php');
+if(!loginStatus()){
+       header('location: login.php');
+}
+$type = 'blocks';
+include('inc/userlist.php');
+include('inc/sidebar.php');
+include('inc/footer.php');
+?>
diff --git a/browse.php b/browse.php
deleted file mode 100644 (file)
index d91bbbf..0000000
+++ /dev/null
@@ -1,58 +0,0 @@
-<?php 
-       include ('lib/twitese.php');
-       $title = "Public";
-       include ('inc/header.php');
-       if (!loginStatus()) header('location: login.php');
-?>
-
-<script src="js/browse.js"></script>
-
-<div id="statuses" class="column round-left">
-       <h2 id="browse_title">See what people are saying about…</h2>
-       <div class="clear"></div>
-       
-       <?php
-       // selected from top 50 freqently used Han Chracter in http://www.cslog.cn/Content/word-frequency-list-of-chinese/
-               $seed = array(
-               '的', '一', '是', '不', '了', '我', '人', '在', '有', '这', '他', '来', '个', '上', '说', '中', '大', '为', '到', '道', '你', '们', '出', '就', '时', '以', '之', '那', '和', '子', '地', '得', '自', '要', '下', '可', '而', '学', '过', '对', '么', '然', '她', '国', '去', '里'
-       );
-               if(!isset($_COOKIE['browse_seed'])) {
-                       $browse_seed = $seed[mt_rand(0,48)];
-                       setcookie('browse_seed', $browse_seed, $_SERVER['REQUEST_TIME']+300, '/');
-               } else {
-                       $browse_seed = $_COOKIE['browse_seed'];
-               }
-               $t = getTwitter();
-               $p = 1;
-               if (isset($_GET['p'])) {
-                       $p = (int) $_GET['p'];
-                       if ($p <= 0) $p = 1;
-               }
-       
-               $statuses = $t->search($browse_seed, $p, 50);
-               $resultCount = count($statuses->results);
-               if ($resultCount <= 0) {
-                       echo "<div id=\"empty\">No tweet to display.</div>";
-               } else {
-                       include_once('lib/timeline_format.php');
-                       $output = '<ol class="timeline" id="allTimeline">';
-                       foreach ($statuses->results as $status) {
-                               if(!preg_match('/[\p{Hiragana}\p{Katakana}\p{Hangul}]+/u', $status->text) ) { // filter the Japanese and Korean tweets since some of Han Character included.
-                                       $output .= format_search($status);
-                               }
-                       }
-                       $output .= "</ol><div id=\"pagination\">";
-
-                       if ($p >1) $output .= "<a id=\"more\" class=\"round more\" style=\"float: left;\" href=\"browse.php?p=" . ($p-1) . "\">Back</a>";
-                       if (!$empty) $output .= "<a id=\"more\" class=\"round more\" style=\"float: right;\" href=\"browse.php?p=" . ($p+1) . "\">Next</a>";
-                       
-                       $output .= "</div>";
-                       echo $output;
-               }
-       ?>
-</div>
-
-<?php 
-       include ('inc/sidebar.php');
-       include ('inc/footer.php');
-?>
index 5d2d3c8..f79369a 100644 (file)
@@ -239,7 +239,8 @@ td.column,#side .stats td{padding:0;vertical-align:top}
 #side hr{float:left;width:177px;display:block;border:0;height:1px;margin:7px 0 6px 11px;opacity:.7;background:#C0DEED;color:#C0DEED}
 .notify{text-align:center;line-height:1;padding:5px 0;background-repeat:no-repeat;background-position:left center;margin-bottom:8px}
 .notify div{background-color:#edffe5;font-size:.9em;margin:0 12px 0 24px;padding:10px 5px;border-radius:5px}
-#trend_entries, #apiquota_list{display:none;width:198px;float:left;margin-top:5px!important}
+#trend_entries, #apiquota_list{display:none;width:177px;float:left;margin-top:5px!important}
+#trend_entries li{word-break:break-all}
 #trends, #following, #apiquota, #version{margin-left:-2px}
 #trends_title, #following_title, #apiquota_title,#version_title{background:transparent url(../img/toggle_down_dark.png) no-repeat scroll right center;font-weight:400;font-size:110%;padding-left:3px;margin-bottom:0;margin-top:0;width:177px;cursor:pointer}
 #version_title{background:none!important}
@@ -315,14 +316,15 @@ footer li img{border:0 none;margin:-3px;padding:0}
 /*actions button*/
 .actions{border-width:0;bottom:8px;line-height:1.25em;position:absolute;right:0;display:none;z-index:9}
 .rt_btn,.replie_btn,.favor_btn,.delete_btn,.msg_replie_btn,.msg_delete_btn,.retw_btn,.trans_btn,.unfav_btn,.unrt_btn{display:inline-block;height:16px;width:21px;margin:-7px 0;overflow:hidden;text-indent:-9999em}
+.ss_delete_btn{display:inline-block;height:16px;width:21px;overflow:hidden;text-indent:-9999em;float:right}
 .replie_btn,.msg_replie_btn{background:url("../img/sprite_icons.png") no-repeat scroll 4px 1px transparent}
 .replie_btn:hover,.msg_replie_btn:hover{background:url("../img/sprite_icons.png") no-repeat scroll -17px 1px transparent}
 .retw_btn,.unrt_btn:hover{background:url("../img/sprite_icons.png") no-repeat scroll 0 -15px transparent}
 .retw_btn:hover,.unrt_btn{background:url("../img/sprite_icons.png") no-repeat scroll -21px -15px transparent}
 .favor_btn,.unfav_btn:hover{background:url("../img/sprite_icons.png") no-repeat scroll 2px -32px transparent}
 .favor_btn:hover,.unfav_btn{background:url("../img/sprite_icons.png") no-repeat scroll -19px -32px transparent}
-.delete_btn,.msg_delete_btn{background:url("../img/sprite_icons.png") no-repeat scroll 0 -47px transparent}
-.delete_btn:hover,.msg_delete_btn:hover{background:transparent url(../img/sprite_icons.png) no-repeat scroll -21px -47px}
+.ss_delete_btn,.delete_btn,.msg_delete_btn{background:url("../img/sprite_icons.png") no-repeat scroll 0 -47px transparent}
+.ss_delete_btn:hover,.delete_btn:hover,.msg_delete_btn:hover{background:transparent url(../img/sprite_icons.png) no-repeat scroll -21px -47px}
 .rt_btn{background:url("../img/sprite_icons.png") no-repeat scroll 0 -63px transparent}
 .rt_btn:hover{background:url("../img/sprite_icons.png") no-repeat scroll -21px -63px transparent}
 .trans_btn{background:url("../img/sprite_icons.png") no-repeat scroll -2px -79px transparent}
@@ -463,4 +465,4 @@ fieldset.common-form td[colspan=2]{text-align:right}
 .right_menu .rm_spam:hover i, .right_menu .ul_spam:hover i{background-position:-256px -32px}
 
 /*Twitter Buttons*/
-.btn-m,input[type=submit].btn-m,input[type=button].btn-m{background-position:0 -200px;font-size:15px;line-height:20px;padding:5px 15px 6px;border-radius:5px}.btn-l,input[type=submit].btn-l,input[type=button].btn-l{background-position:0 -400px;font-size:20px;line-height:26px;padding:7px 20px 9px;border-radius:6px}.btn-light{background-color:#add!important;background-image:url("https://s3.amazonaws.com/twitter_production/a/1261078355/images/buttons/bg-btn-light.gif")!important;border-color:#add #add #9cc!important;text-shadow:1px 1px 0 #dff!important}.btn-dark{background-color:#59a!important;background-image:url("https://s3.amazonaws.com/twitter_production/a/1261078355/images/buttons/bg-btn-dark.gif")!important;border-color:#59a #59a #489!important;color:#fff!important;text-shadow:-1px -1px 0 #59a!important}.btn-blue{background-color:#39d!important;background-image:url("https://s3.amazonaws.com/twitter_production/a/1261078355/images/buttons/bg-btn-blue.gif")!important;border-color:#39d #39d #28c!important;color:#fff!important;text-shadow:-1px -1px 0 #39d!important}.btn-chart{background-color:#9c2!important;background-image:url("https://s3.amazonaws.com/twitter_production/a/1261078355/images/buttons/bg-btn-chart.gif")!important;border-color:#9c2 #9c2 #8b1!important;text-shadow:1px 1px 0 #df6!important}.btn-mint{background-color:#a22!important;background-image:url("https://s3.amazonaws.com/twitter_production/a/1261078355/images/buttons/bg-btn-mint.gif")!important;border-color:#bdb #bdb #aca!important;text-shadow:1px 1px 0 #efe!important}.btn-green{background-color:#272!important;background-image:url("../img/bg-btn-green.gif")!important;border-color:#272 #272 #161!important;color:#fff!important;text-shadow:-1px -1px 0 #272!important}.btn-pink{background-color:#daa!important;background-image:url("https://s3.amazonaws.com/twitter_production/a/1261078355/images/buttons/bg-btn-pink.gif")!important;border-color:#daa #daa #c99!important;text-shadow:1px 1px 0 #fdd!important}.btn-red{background-color:#a22!important;background-image:url("../img/bg-btn-red.gif")!important;background-position:0 0;border-color:#a22 #a22 #911!important;text-shadow:-1px -1px 0 #a22!important;color:#fff!important}.btn:hover,.btn:focus,input[type=submit].btn:hover,input[type=submit].btn:focus,button.btn:hover,button.btn:focus{border-color:#999 #999 #888;background-position:0 -6px;color:#000}.btn-light:hover,.btn-light:focus{border-color:#7aa #7aa #699}.btn-dark:hover,.btn-dark:focus{border-color:#267 #267 #156;color:#fff}.btn-blue:hover,.btn-blue:focus{border-color:#17b #17b #06a;color:#fff}.btn-chart:hover,.btn-chart:focus{border-color:#7a1 #7a1 #690}.btn-mint:hover,.btn-mint:focus,input[type=submit].btn-mint:hover,input[type=submit].btn-mint:focus,button.btn-mint:hover,button.btn-mint:focus{border-color:#8a8 #8a8 #797!important}.btn-green:hover,.btn-green:focus,input[type=submit].btn-green:hover,input[type=submit].btn-green:focus,button.btn-green:hover,button.btn-green:focus{background-color:#272!important;border-color:#050 #050 #040!important;color:#fff}.btn-pink:hover,.btn-pink:focus,input[type=submit].btn-pink:hover,input[type=submit].btn-pink:focus,button.btn-pink:hover,button.btn-pink:focus{border-color:#a88 #a88 #977!important}.btn-red:hover,.btn-red:focus,input[type=submit].btn-red:hover,input[type=submit].btn-red:focus,button.btn-red:hover,button.btn-red:focus{background-color:#a22!important;border-color:#611 #611 #500!important;color:#fff}.btn-m:hover,.btn-m:focus,input[type=submit].btn-m:hover,input[type=submit].btn-m:focus,button.btn-m:hover,button.btn-m:focus{background-position:0 -206px}.btn-l:hover,.btn-l:focus,input[type=submit].btn-l:hover,input[type=submit].btn-l:focus,button.btn-l:hover,button.btn-l:focus{background-position:0 -406px}.dbtn,.dbtn:hover,.dbtn:focus,.dbtn:active,button.dbtn:hover,button.dbtn:focus{background:#eee;border-color:#ddd;color:#aaa;text-shadow:none}.btn-light.dbtn,.btn-light.dbtn:hover,.btn-light.dbtn:focus,.btn-light.dbtn:active{background:#dee;border-color:#cdd;color:#9aa}.btn-dark.dbtn,.btn-dark.dbtn:hover,.btn-dark.dbtn:focus,.btn-dark.dbtn:active{background:#aad5dd;border-color:#99c5cc;color:#ddf6f6}.btn-blue.dbtn,.btn-blue.dbtn:hover,.btn-blue.dbtn:focus,.btn-blue.dbtn:active{background:#bde;border-color:#acd;color:#def}.btn-chart.dbtn,.btn-chart.dbtn:hover,.btn-chart.dbtn:focus,.btn-chart.dbtn:active{background:#deb;border-color:#cda;color:#ab9}.btn-mint.dbtn,.btn-mint.dbtn:hover,.btn-mint.dbtn:focus,.btn-mint.dbtn:active{background:#ded;border-color:#cdc;color:#9a9}.btn-green.dbtn,.btn-green.dbtn:hover,.btn-green.dbtn:focus,.btn-green.dbtn:active{background:#aca;border-color:#9b9;color:#ded}.btn-pink.dbtn,.btn-pink.dbtn:hover,.btn-pink.dbtn:focus,.btn-pink.dbtn:active{background:#edd;border-color:#dcc;color:#a99}.btn-red.dbtn,.btn-red.dbtn:hover,.btn-red.dbtn:focus,.btn-red.dbtn:active{background:#caa;border-color:#b99;color:#edd}
\ No newline at end of file
+.btn-m,input[type=submit].btn-m,input[type=button].btn-m{background-position:0 -200px;font-size:15px;line-height:20px;padding:5px 15px 6px;border-radius:5px}.btn-l,input[type=submit].btn-l,input[type=button].btn-l{background-position:0 -400px;font-size:20px;line-height:26px;padding:7px 20px 9px;border-radius:6px}.btn-light{background-color:#add!important;background-image:url("https://s3.amazonaws.com/twitter_production/a/1261078355/images/buttons/bg-btn-light.gif")!important;border-color:#add #add #9cc!important;text-shadow:1px 1px 0 #dff!important}.btn-dark{background-color:#59a!important;background-image:url("https://s3.amazonaws.com/twitter_production/a/1261078355/images/buttons/bg-btn-dark.gif")!important;border-color:#59a #59a #489!important;color:#fff!important;text-shadow:-1px -1px 0 #59a!important}.btn-blue{background-color:#39d!important;background-image:url("https://s3.amazonaws.com/twitter_production/a/1261078355/images/buttons/bg-btn-blue.gif")!important;border-color:#39d #39d #28c!important;color:#fff!important;text-shadow:-1px -1px 0 #39d!important}.btn-chart{background-color:#9c2!important;background-image:url("https://s3.amazonaws.com/twitter_production/a/1261078355/images/buttons/bg-btn-chart.gif")!important;border-color:#9c2 #9c2 #8b1!important;text-shadow:1px 1px 0 #df6!important}.btn-mint{background-color:#a22!important;background-image:url("https://s3.amazonaws.com/twitter_production/a/1261078355/images/buttons/bg-btn-mint.gif")!important;border-color:#bdb #bdb #aca!important;text-shadow:1px 1px 0 #efe!important}.btn-green{background-color:#272!important;background-image:url("../img/bg-btn-green.gif")!important;border-color:#272 #272 #161!important;color:#fff!important;text-shadow:-1px -1px 0 #272!important}.btn-pink{background-color:#daa!important;background-image:url("https://s3.amazonaws.com/twitter_production/a/1261078355/images/buttons/bg-btn-pink.gif")!important;border-color:#daa #daa #c99!important;text-shadow:1px 1px 0 #fdd!important}.btn-red{background-color:#a22!important;background-image:url("../img/bg-btn-red.gif")!important;background-position:0 0;border-color:#a22 #a22 #911!important;text-shadow:-1px -1px 0 #a22!important;color:#fff!important}.btn:hover,.btn:focus,input[type=submit].btn:hover,input[type=submit].btn:focus,button.btn:hover,button.btn:focus{border-color:#999 #999 #888;background-position:0 -6px;color:#000}.btn-light:hover,.btn-light:focus{border-color:#7aa #7aa #699}.btn-dark:hover,.btn-dark:focus{border-color:#267 #267 #156;color:#fff}.btn-blue:hover,.btn-blue:focus{border-color:#17b #17b #06a;color:#fff}.btn-chart:hover,.btn-chart:focus{border-color:#7a1 #7a1 #690}.btn-mint:hover,.btn-mint:focus,input[type=submit].btn-mint:hover,input[type=submit].btn-mint:focus,button.btn-mint:hover,button.btn-mint:focus{border-color:#8a8 #8a8 #797!important}.btn-green:hover,.btn-green:focus,input[type=submit].btn-green:hover,input[type=submit].btn-green:focus,button.btn-green:hover,button.btn-green:focus{background-color:#272!important;border-color:#050 #050 #040!important;color:#fff}.btn-pink:hover,.btn-pink:focus,input[type=submit].btn-pink:hover,input[type=submit].btn-pink:focus,button.btn-pink:hover,button.btn-pink:focus{border-color:#a88 #a88 #977!important}.btn-red:hover,.btn-red:focus,input[type=submit].btn-red:hover,input[type=submit].btn-red:focus,button.btn-red:hover,button.btn-red:focus{background-color:#a22!important;border-color:#611 #611 #500!important;color:#fff}.btn-m:hover,.btn-m:focus,input[type=submit].btn-m:hover,input[type=submit].btn-m:focus,button.btn-m:hover,button.btn-m:focus{background-position:0 -206px}.btn-l:hover,.btn-l:focus,input[type=submit].btn-l:hover,input[type=submit].btn-l:focus,button.btn-l:hover,button.btn-l:focus{background-position:0 -406px}.dbtn,.dbtn:hover,.dbtn:focus,.dbtn:active,button.dbtn:hover,button.dbtn:focus{background:#eee;border-color:#ddd;color:#aaa;text-shadow:none}.btn-light.dbtn,.btn-light.dbtn:hover,.btn-light.dbtn:focus,.btn-light.dbtn:active{background:#dee;border-color:#cdd;color:#9aa}.btn-dark.dbtn,.btn-dark.dbtn:hover,.btn-dark.dbtn:focus,.btn-dark.dbtn:active{background:#aad5dd;border-color:#99c5cc;color:#ddf6f6}.btn-blue.dbtn,.btn-blue.dbtn:hover,.btn-blue.dbtn:focus,.btn-blue.dbtn:active{background:#bde;border-color:#acd;color:#def}.btn-chart.dbtn,.btn-chart.dbtn:hover,.btn-chart.dbtn:focus,.btn-chart.dbtn:active{background:#deb;border-color:#cda;color:#ab9}.btn-mint.dbtn,.btn-mint.dbtn:hover,.btn-mint.dbtn:focus,.btn-mint.dbtn:active{background:#ded;border-color:#cdc;color:#9a9}.btn-green.dbtn,.btn-green.dbtn:hover,.btn-green.dbtn:focus,.btn-green.dbtn:active{background:#aca;border-color:#9b9;color:#ded}.btn-pink.dbtn,.btn-pink.dbtn:hover,.btn-pink.dbtn:focus,.btn-pink.dbtn:active{background:#edd;border-color:#dcc;color:#a99}.btn-red.dbtn,.btn-red.dbtn:hover,.btn-red.dbtn:focus,.btn-red.dbtn:active{background:#caa;border-color:#b99;color:#edd}
index c4f9779..f6d2621 100644 (file)
--- a/error.php
+++ b/error.php
@@ -1,29 +1,25 @@
-<?php \r
-       include ('lib/twitese.php');\r
-       $title = "Error";\r
-       include ('inc/header.php');\r
-?>\r
-\r
-<div id="login_area">\r
-       <div id="error">\r
-               <?php\r
-               if ( isset($_GET['t'])){ \r
-                       switch($_GET['t']){\r
-                               case 1:\r
-                               echo '<p>Fail to connect Twitter right now. Please <a href="index.php">go back</a> or <a href="logout.php">sign in</a> minutes later.</p>';\r
-                               if(loginStatus())\r
-                               {\r
-                               echo '<p> The API will reset in '.intval((format_time(getTwitter()->ratelimit()->reset_time) - time())/60).' min(s).';\r
-                               break;\r
-                               }\r
-                               default:\r
-                               echo '<p>Ooops, an unknown error occured. Please <a href="index.php">go back</a> or <a href="logout.php">sign in</a> again.</p>';\r
-                       }\r
-               } else{\r
-                       echo '<p>Ooops, an unknown error occured. Please <a href="index.php">go back</a> or <a href="logout.php">sign in</a> again.</p>';\r
-               }\r
-               ?>\r
-       </div>\r
-</div> \r
-\r
-<?php include ('inc/footer.php') ?>\r
+<?php 
+       include ('lib/twitese.php');
+       $title = "Error";
+       include ('inc/header.php');
+?>
+
+<div id="login_area">
+       <div id="error">
+               <?php
+               if ( isset($_GET['t'])){ 
+                       switch($_GET['t']){
+                               case 1:
+                               echo '<p>Fail to connect Twitter right now. Please <a href="index.php">go back</a> or <a href="logout.php">sign in</a> minutes later.</p>';
+                               break;
+                               default:
+                               echo '<p>Ooops, an unknown error occured. Please <a href="index.php">go back</a> or <a href="logout.php">sign in</a> again.</p>';
+                       }
+               } else{
+                       echo '<p>Ooops, an unknown error occured. Please <a href="index.php">go back</a> or <a href="logout.php">sign in</a> again.</p>';
+               }
+               ?>
+       </div>
+</div> 
+
+<?php include ('inc/footer.php') ?>
diff --git a/favicon.gif b/favicon.gif
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/favicon.ico b/favicon.ico
deleted file mode 100644 (file)
index 379f3cd..0000000
Binary files a/favicon.ico and /dev/null differ
index a0d16ed..08ae8b9 100644 (file)
--- a/favor.php
+++ b/favor.php
@@ -1,55 +1,61 @@
-<?php \r
-       include ('lib/twitese.php');\r
-       $title = "My Favorites";\r
-       include ('inc/header.php');\r
-       if (!loginStatus()) header('location: login.php');\r
-?>\r
-\r
-<script src="js/btns.js"></script>\r
-\r
-<div id="statuses" class="column round-left">\r
-\r
-       <?php include('inc/sentForm.php')?>\r
-\r
-<?php \r
-       $t = getTwitter();\r
-       $p = 1;\r
-       if (isset($_GET['p'])) {\r
-               $p = (int) $_GET['p'];\r
-               if ($p <= 0) $p = 1;\r
-       }\r
-\r
-       $statuses = $t->getFavorites($p);\r
-       if ($statuses === false) {\r
-               header('location: error.php');exit();\r
-       } \r
-       $empty = count($statuses) == 0? true: false;\r
-       if ($empty) {\r
-               echo "<div id=\"empty\">No tweet to display.</div>";\r
-       } else {\r
-               $output = '<ol class="timeline" id="allTimeline">';\r
-               include('lib/timeline_format.php');\r
-               foreach ($statuses as $status) {\r
-                       if (isset($status->retweeted_status)) {\r
-                               $output .= format_retweet($status);\r
-                       } else { \r
-                               $output .= format_timeline($status,$t->username);\r
-                       }\r
-               }\r
-\r
-               $output .= "</ol><div id=\"pagination\">";\r
-\r
-               if ($p >1) $output .= "<a id=\"more\" class=\"round more\" style=\"float: left;\" href=\"favor.php?p=" . ($p-1) . "\">Back</a>";\r
-               if (!$empty) $output .= "<a id=\"more\" class=\"round more\" style=\"float: right;\" href=\"favor.php?p=" . ($p+1) . "\">Next</a>";\r
-\r
-               $output .= "</div>";\r
-\r
-               echo $output;\r
-       }\r
-?>\r
-</div>\r
-\r
-<?php \r
-       include ('inc/sidebar.php');\r
-       include ('inc/footer.php');\r
-?>\r
+<?php 
+       include ('lib/twitese.php');
+       $title = "My Favorites";
+       include ('inc/header.php');
+       if (!loginStatus()) header('location: login.php');
+?>
+
+<script src="js/btns.js"></script>
+
+<div id="statuses" class="column round-left">
+
+       <?php include('inc/sentForm.php')?>
+
+<?php 
+       $t = getTwitter();
+       $user_id = isset($_GET['user_id']) ? $_GET['user_id'] : false;
+       $since_id = isset($_GET['since_id']) ? $_GET['since_id'] : false;
+       $max_id = isset($_GET['max_id']) ? $_GET['max_id'] : false;
+
+       $statuses = $t->getFavorites($user_id, $since_id, $max_id);
+       if ($statuses === false) {
+               header('location: error.php');exit();
+       } 
+       $empty = count($statuses) == 0 ? true : false;
+       if ($empty) {
+               echo "<div id=\"empty\">No tweet to display.</div>";
+       } else if ($t->http_code == 429) {
+               echo "<div id=\"empty\">API quota is used out, please wait for a moment before next refresh.</div>";
+       } else {
+               $output = '<ol class="timeline" id="allTimeline">';
+               include('lib/timeline_format.php');
+               $firstid = false;
+               $lastid = false;
+               foreach ($statuses as $status) {
+                       if (isset($status->retweeted_status)) {
+                               $output .= format_retweet($status);
+                       } else { 
+                               $output .= format_timeline($status,$t->username);
+                       }
+                       if(!$firstid)
+                               $firstid = $status->id_str;
+                       $lastid = $status->id_str;
+               }
+               $lastid = bcsub($lastid, "1");
+
+               $output .= "</ol><div id=\"pagination\">";
+
+               $output .= "<a id=\"less\" class=\"round more\" style=\"float: left;\" href=\"favor.php?since_id={$firstid}\">Back</a>";
+               $output .= "<a id=\"more\" class=\"round more\" style=\"float: right;\" href=\"favor.php?max_id={$lastid}\">Next</a>";
+
+               $output .= "</div>";
+
+               echo $output;
+       }
+?>
+</div>
+
+<?php 
+       include ('inc/sidebar.php');
+       include ('inc/footer.php');
+?>
index a4a866a..0c9f6c2 100644 (file)
@@ -1,11 +1,11 @@
-<?php \r
-       include ('lib/twitese.php');\r
-       $title = "Followers";\r
-       include ('inc/header.php');\r
-       if (!loginStatus()) header('location: login.php');\r
-       \r
-       $type = 'followers';\r
-       include ('inc/userlist.php');\r
-       include ('inc/sidebar.php');\r
-       include ('inc/footer.php');\r
-?>\r
+<?php 
+       include ('lib/twitese.php');
+       $title = "Followers";
+       include ('inc/header.php');
+       if (!loginStatus()) header('location: login.php');
+       
+       $type = 'followers';
+       include ('inc/userlist.php');
+       include ('inc/sidebar.php');
+       include ('inc/footer.php');
+?>
index 1e5094c..344dab1 100644 (file)
@@ -1,10 +1,10 @@
-<?php \r
-       include ('lib/twitese.php');\r
-       $title = "Following";\r
-       include ('inc/header.php');\r
-       if (!loginStatus()) header('location: login.php');\r
-       $type = 'friends';\r
-       include ('inc/userlist.php');\r
-       include ('inc/sidebar.php');\r
-       include ('inc/footer.php');\r
-?>\r
+<?php 
+       include ('lib/twitese.php');
+       $title = "Following";
+       include ('inc/header.php');
+       if (!loginStatus()) header('location: login.php');
+       $type = 'friends';
+       include ('inc/userlist.php');
+       include ('inc/sidebar.php');
+       include ('inc/footer.php');
+?>
diff --git a/img/3.gif b/img/3.gif
deleted file mode 100644 (file)
index 03cf895..0000000
Binary files a/img/3.gif and /dev/null differ
diff --git a/img/bg-front.gif b/img/bg-front.gif
deleted file mode 100644 (file)
index f0ad699..0000000
Binary files a/img/bg-front.gif and /dev/null differ
diff --git a/img/bg_faux.png b/img/bg_faux.png
deleted file mode 100644 (file)
index 51c15d9..0000000
Binary files a/img/bg_faux.png and /dev/null differ
diff --git a/img/bird.png b/img/bird.png
deleted file mode 100644 (file)
index 24df7c3..0000000
Binary files a/img/bird.png and /dev/null differ
diff --git a/img/faved.png b/img/faved.png
deleted file mode 100644 (file)
index e6ff4c4..0000000
Binary files a/img/faved.png and /dev/null differ
diff --git a/img/nexus_intro.png b/img/nexus_intro.png
deleted file mode 100644 (file)
index 1f36c1f..0000000
Binary files a/img/nexus_intro.png and /dev/null differ
diff --git a/img/nexus_logo.png b/img/nexus_logo.png
deleted file mode 100644 (file)
index 5e1c25a..0000000
Binary files a/img/nexus_logo.png and /dev/null differ
diff --git a/img/rabr_cry.gif b/img/rabr_cry.gif
deleted file mode 100644 (file)
index cacb63f..0000000
Binary files a/img/rabr_cry.gif and /dev/null differ
diff --git a/img/rabr_login.jpg b/img/rabr_login.jpg
deleted file mode 100644 (file)
index 2ae53cb..0000000
Binary files a/img/rabr_login.jpg and /dev/null differ
diff --git a/img/rabr_logo.png b/img/rabr_logo.png
deleted file mode 100644 (file)
index e272759..0000000
Binary files a/img/rabr_logo.png and /dev/null differ
diff --git a/inc/followingWall.php b/inc/followingWall.php
deleted file mode 100644 (file)
index 67b8730..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-<?php\r
-       if(!isset($_SESSION)){\r
-               session_start();\r
-       }\r
-       include('../lib/twitese.php');\r
-\r
-       $t = getTwitter();\r
-       $friends = $t->friends()->users;\r
-       $html = '<div id="following_list">';\r
-       foreach($friends as $friend){\r
-               $html .= '<span class="vcard">\r
-                       <a class="url" title="'.$friend->name.'" rel="contact" href="../user.php?id='.$friend->screen_name.'">\r
-                       <img class="photo fn" width="24" height="24" src="'.getAvatar($friend->profile_image_url).'" alt="'.$friend->name.'" />\r
-                       </a>\r
-                       </span>';\r
-       }\r
-       echo $html.'</div>';\r
-?>\r
index 7958d65..ccafcd8 100644 (file)
@@ -1,19 +1,19 @@
-                       </tr>\r
-          </tbody>\r
-        </table>\r
-               <div class="clear"></div>\r
-                       <footer class="round">\r
-                       <ul>\r
-                       <li>&copy; 2013 Contributors incl. <a href="profile.php" title="It is you that make it!" target="_blank"><?php echo getEncryptCookie('twitese_name')?></a></li>\r
-                       <?php if (BLOG_SITE) { ?><li><a href="<?php echo BLOG_SITE ?>" title="Site Owner's Blog" target="_blank">Blog</a></li><?php }?>\r
-                       <li><a href="http://code.google.com/p/tuite/" target="_blank" title="Embr is proundly powered by the Open Source project - Twitese & Rabr">Twitese</a></li>\r
-                       <li><a href="http://code.google.com/p/embr/" target="_blank">Open Source</a></li>\r
-                       <?php if (SITE_OWNER) { ?><li>Run by <a href="https://twitter.com/<?php echo SITE_OWNER ?>" target="_blank"><?php echo SITE_OWNER ?></a></li><?php }?>\r
-                       </ul>\r
-                       </footer>\r
-               </div>\r
-       </div>\r
-<script>var nav=document.getElementById("primary_nav");var links=nav.getElementsByTagName("a");var currenturl=document.location.href;for(var i=0;i<links.length;i++){var linkurl=links[i].getAttribute("href");if(currenturl==links[i]){links[i].className="active";}}</script>\r
-</body>\r
-</html>\r
+                       </tr>
+          </tbody>
+        </table>
+               <div class="clear"></div>
+                       <footer class="round">
+                       <ul>
+                       <li>&copy; 2010-2013 Contributors incl. <a href="profile.php" title="It is you that make it!" target="_blank"><?php echo getEncryptCookie('twitese_name')?></a></li>
+                       <?php if (BLOG_SITE) { ?><li><a href="<?php echo BLOG_SITE ?>" title="Site Owner's Blog" target="_blank">Blog</a></li><?php }?>
+                       <li><a href="http://code.google.com/p/tuite/" target="_blank" title="Embr is proundly powered by the Open Source project - Twitese & Rabr">Twitese</a></li>
+                       <li><a href="https://github.com/AstroProfundis/embrr" target="_blank">Open Source</a></li>
+                       <?php if (SITE_OWNER) { ?><li>Run by <a href="https://twitter.com/<?php echo SITE_OWNER ?>" target="_blank"><?php echo SITE_OWNER ?></a></li><?php }?>
+                       </ul>
+                       </footer>
+               </div>
+       </div>
+<script>var nav=document.getElementById("primary_nav");var links=nav.getElementsByTagName("a");var currenturl=document.location.href;for(var i=0;i<links.length;i++){var linkurl=links[i].getAttribute("href");if(currenturl==links[i]){links[i].className="active";}}</script>
+</body>
+</html>
 <?php ob_end_flush(); ?>
\ No newline at end of file
index 1be5161..636809e 100644 (file)
@@ -1,72 +1,71 @@
-<?php\r
-       ob_start();\r
-       if(!isset($_SESSION)){\r
-               session_start();\r
-       }\r
-?>\r
-<!DOCTYPE HTML>\r
-<html>\r
-<head>\r
-<meta http-equiv="Content-Type" content="text/html" charset="utf-8" />\r
-<meta name="keywords" content="embr, open source, php, twitter, oauth" />\r
-<meta name="description" content="Vivid Interface for Twitter" />\r
-<meta name="author" content="Contributors" />\r
-<link rel="icon" href="img/favicon.ico" />\r
-<link id="css" href="css/main.css" rel="stylesheet" />\r
-<title>Embr / <?php echo $title ?></title>\r
-<?php \r
-       $myCSS = getDefCookie("myCSS");\r
-       $theme = getDefCookie("theme");\r
-       $old_css = "ul.sidebar-menu li.active a";\r
-       $new_css = "ul.sidebar-menu a.active";\r
-       $myCSS = str_replace($old_css,$new_css,$myCSS);\r
-       $fontsize = getDefCookie("fontsize","13px");\r
-       $Bgcolor = getDefCookie("Bgcolor");\r
-       $Bgimage = getAvatar(getDefCookie("Bgimage"));\r
-       $Bgrepeat = getDefCookie("Bgrepeat","no-repeat");\r
-       \r
-       if ($title != 'Error' ){\r
-               setcookie('loginPage',$_SERVER['PHP_SELF'],$_SERVER['REQUEST_TIME']+3600*24);\r
-       }\r
-?>\r
-<style type="text/css">\r
-<?php echo $theme;echo $myCSS ?>\r
-a:active,a:focus {outline:none}\r
-body {font-size:<?php echo $fontsize ?> !important;<?php \r
-       if ($Bgcolor != "") echo 'background-color:'.$Bgcolor.';';\r
-       if ($Bgimage != "") echo 'background-image: url("'.$Bgimage.'");';\r
- ?>background-repeat:<?php echo $Bgrepeat ?>}\r
-</style>\r
-<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>\r
-<script src="js/jquery.js"></script>\r
-<script src="js/mediaPreview.js"></script>\r
-<script src="js/public.js"></script>\r
-</head>\r
-<body>\r
-<div id="shortcutTip" style="display:none"></div>\r
-       <header>\r
-               <div class="wrapper">\r
-               <div id="sentTip" style="display:none"></div>\r
-                       <a href="index.php"><img id="logo" style="float:left" width="155" height="49" src="img/logo.png" /></a>\r
-                       <nav class="round">\r
-                       <ul>\r
-                               <?php $scheme=(!isset($_SERVER['HTTPS']) || $_SERVER['HTTPS'] != "on") ? 'http://' : 'https://';\r
-                               $base_url=str_replace('http://',$scheme,BASE_URL);\r
-                               ?> \r
-                               <li><a class="share" title="Drag me to share!" href="javascript:var%20d=document,w=window,f='<?php echo $base_url."/share.php" ?>',l=d.location,e=encodeURIComponent,p='?u='+e(l.href)+'&t='+e(d.title)+'&d='+e(w.getSelection?w.getSelection().toString():d.getSelection?d.getSelection():d.selection.createRange().text)+'&s=bm';a=function(){if(!w.open(f+p,'sharer','toolbar=0,status=0,resizable=0,width=600,height=300,left=175,top=150'))l.href=f+'.new'+p};if(/Firefox/.test(navigator.userAgent))setTimeout(a,0);else{a()}void(0);">Share</a></li>\r
-                               <li><a href="index.php">Home</a></li>\r
-                               <li><a href="profile.php">Profile</a></li>\r
-                               <li><a href="browse.php">Public</a></li>\r
-                               <li><a href="setting.php">Settings</a></li>\r
-                               <li><a href="logout.php">Logout</a></li>                        \r
-                       </ul>\r
-                       </nav>\r
-               </div>\r
-       </header>\r
-       <div id="content">\r
-               <div class="wrapper">\r
-                       <div class="content-bubble-arrow"></div>\r
-                               <table cellspacing="0" class="columns">\r
-                                       <tbody>\r
-                                               <tr>\r
+<?php
+       ob_start();
+       if(!isset($_SESSION)){
+               session_start();
+       }
+?>
+<!DOCTYPE HTML>
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html" charset="utf-8" />
+<meta name="keywords" content="embr, open source, php, twitter, oauth" />
+<meta name="description" content="Vivid Interface for Twitter" />
+<meta name="author" content="Contributors" />
+<link rel="icon" href="img/favicon.ico" />
+<link id="css" href="css/main.css" rel="stylesheet" />
+<title>Embr / <?php echo $title ?></title>
+<?php 
+       $myCSS = getDefCookie("myCSS");
+       $theme = getDefCookie("theme");
+       $old_css = "ul.sidebar-menu li.active a";
+       $new_css = "ul.sidebar-menu a.active";
+       $myCSS = str_replace($old_css,$new_css,$myCSS);
+       $fontsize = getDefCookie("fontsize","13px");
+       $Bgcolor = getDefCookie("Bgcolor");
+       $Bgimage = getAvatar(getDefCookie("Bgimage"));
+       $Bgrepeat = getDefCookie("Bgrepeat","no-repeat");
+       
+       if ($title != 'Error' ){
+               setcookie('loginPage',$_SERVER['PHP_SELF'],$_SERVER['REQUEST_TIME']+3600*24);
+       }
+?>
+<style type="text/css">
+<?php echo $theme;echo $myCSS ?>
+a:active,a:focus {outline:none}
+body {font-size:<?php echo $fontsize ?> !important;<?php 
+       if ($Bgcolor != "") echo 'background-color:'.$Bgcolor.';';
+       if ($Bgimage != "") echo 'background-image: url("'.$Bgimage.'");';
+ ?>background-repeat:<?php echo $Bgrepeat ?>}
+</style>
+<script src="https://ajax.aspnetcdn.com/ajax/jquery/jquery-1.8.3.min.js"></script>
+<script src="js/jquery.js"></script>
+<script src="js/mediaPreview.js"></script>
+<script src="js/public.js"></script>
+</head>
+<body>
+<div id="shortcutTip" style="display:none"></div>
+       <header>
+               <div class="wrapper">
+               <div id="sentTip" style="display:none"></div>
+                       <a href="index.php"><img id="logo" style="float:left" width="155" height="49" src="img/logo.png" /></a>
+                       <nav class="round">
+                       <ul>
+                               <?php $scheme=(!isset($_SERVER['HTTPS']) || $_SERVER['HTTPS'] != "on") ? 'http://' : 'https://';
+                               $base_url=str_replace('http://',$scheme,BASE_URL);
+                               ?> 
+                               <li><a class="share" title="Drag me to share!" href="javascript:var%20d=document,w=window,f='<?php echo $base_url."/share.php" ?>',l=d.location,e=encodeURIComponent,p='?u='+e(l.href)+'&t='+e(d.title)+'&d='+e(w.getSelection?w.getSelection().toString():d.getSelection?d.getSelection():d.selection.createRange().text)+'&s=bm';a=function(){if(!w.open(f+p,'sharer','toolbar=0,status=0,resizable=0,width=600,height=300,left=175,top=150'))l.href=f+'.new'+p};if(/Firefox/.test(navigator.userAgent))setTimeout(a,0);else{a()}void(0);">Share</a></li>
+                               <li><a href="index.php">Home</a></li>
+                               <li><a href="profile.php">Profile</a></li>
+                               <li><a href="setting.php">Settings</a></li>
+                               <li><a href="logout.php">Logout</a></li>                        
+                       </ul>
+                       </nav>
+               </div>
+       </header>
+       <div id="content">
+               <div class="wrapper">
+                       <div class="content-bubble-arrow"></div>
+                               <table cellspacing="0" class="columns">
+                                       <tbody>
+                                               <tr>
                                                        <td id="left" class="column round-left">
\ No newline at end of file
diff --git a/inc/onlineUsers.php b/inc/onlineUsers.php
deleted file mode 100644 (file)
index b6dfbd3..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-<?php\r
-$online_log="rabr_online_users.txt";\r
-$timeout=300;\r
-$entries=file($online_log);\r
-$temp=array();\r
-for($i=0;$i<count($entries);$i++){\r
-$entry=explode(",",trim($entries[$i]));\r
-if(($entry[0]!=getenv('REMOTE_ADDR'))&&($entry[1]>time())){\r
-array_push($temp,$entry[0].",".$entry[1]."\n");\r
-}\r
-}\r
-array_push($temp,getenv('REMOTE_ADDR').",".(time()+($timeout))."\n");\r
-$users_online=count($temp);\r
-$entries=implode("",$temp);\r
-$fp=fopen($online_log,"w");\r
-flock($fp,LOCK_EX);\r
-fputs($fp,$entries);\r
-flock($fp,LOCK_UN);\r
-fclose($fp);\r
-if($users_online==1){\r
-echo "Just you online!";\r
-}else{\r
-echo $users_online."  Users Online";\r
-}\r
-?>
\ No newline at end of file
index 7f8b2c9..ecc90e2 100644 (file)
        <?php if (strrpos($_SERVER['PHP_SELF'], 'profile')) {
                $t = getTwitter();
        $user = $t->showUser();
+       $expanded_url = $user->entities->url->urls[0]->expanded_url ? $user->entities->url->urls[0]->expanded_url : $user->url;
 ?>
        <ul id="user_info_profile">
                <li><span>Name</span> <?php echo $user->name ?></li>
                <?php if ($user->location) echo "<li><span>Location</span> $user->location</li>"; ?>
-               <?php if (($user->url) and (strlen($user->url)>20)) echo '<li><span>Web</span> <a href="' .$user->url. '" target="_blank">' .substr($user->url, 0, 20). '...</a></li>'; else if (($user->url) and (strlen($user->url)<=20)) echo '<li><span>Web</span> <a href="' .$user->url. '" target="_blank">' .$user->url. '</a></li>';?>
+               <?php if (($expanded_url) and (strlen($expanded_url)>20)) echo '<li><span>Web</span> <a href="' .$expanded_url. '" target="_blank">' .substr($expanded_url, 0, 20). '...</a></li>'; else if (($expanded_url) and (strlen($expanded_url)<=20)) echo '<li><span>Web</span> <a href="' .$expanded_url. '" target="_blank">' .$expanded_url. '</a></li>';?>
                <?php if ($user->description) echo "<li><span>Bio</span> ".formatText($user->description)."</li>"; ?>
                </ul>
        <?php }?>
index 6604a96..e706631 100644 (file)
@@ -26,7 +26,6 @@
 </div>
 </div>
 <hr />
-<!-- 
 <div id="apiquota">
 <h2 id="apiquota_title">
 <span>API Quota</span>
 <ul id="apiquota_list" class="sidebar-menu">
 </ul>
 </div>
-!-->
+<hr />
+<div id="version">
+<h2 id="version_title"><span>Version: 0.6.2 (f-99)</span></h2>
+</div>
 <!--Preload Start-->
 <div class="preload" style="position: absolute; left: -9999em; top: -9999em;">
 <img src="img/spinner.gif" width="14" height="14"/>
@@ -46,4 +48,4 @@
 </td>
 </tr>
 </table>
-</td>
\ No newline at end of file
+</td>
index 5776966..2211138 100644 (file)
-<span title="花蕾无语">╮(╯_╰)╭</span>\r
-<span title=" 嗷~~">┗|`O′|┛</span>\r
-<span title="~你给我回来!">o(°▽、°o)....+(( ̄﹏ ̄m )</span>\r
-<span title="“不明真相的围观群众”">槑槑槑槑呆槑槑槑槑槑槑槑槑……</span>\r
-<span title="『家』">~o(▽` o) =3 =3 =3</span>\r
-<span title="【TEL】"><铃铃铃~ヾ( ̄  ̄*)==3=3=3</span>\r
-<span title="【小黑屋】">ヽ( ̄︿ ̄ )—C<(/;◇;)/ </span>\r
-<span title="555~他不起来……">ヾ( ┬o┬)┌θθθθ(;;_ _).o○</span>\r
-<span title="aaa">o((>ω< ))o</span>\r
-<span title="aaa">o(≧口≦)o</span>\r
-<span title="ai">╮( ̄▽ ̄")╭ </span>\r
-<span title="bai">m(_ _)m</span>\r
-<span title="bai">ヾ( ̄▽ ̄)Bye~Bye~</span>\r
-<span title="baotou">▄︻┻┳═一…… ☆(>○<)</span>\r
-<span title="baoxiao">o(*≧▽≦)ツ</span>\r
-<span title="baoxiao">ヾ(≧▽≦*)o</span>\r
-<span title="bengkui">o(≧口≦)o</span>\r
-<span title="BINGO!">(o゜▽゜)o☆</span>\r
-<span title="biti">( ̄ ‘i  ̄;)</span>\r
-<span title="biti">( ̄ ii  ̄;) ( ̄" ̄;)</span>\r
-<span title="bizui">(⊙x⊙;)</span>\r
-<span title="bo">(*^ ^*)(^ *)</span>\r
-<span title="bqlz">(◎_x)</span>\r
-<span title="buhaoyisi">o( ̄┰ ̄*)ゞ</span>\r
-<span title="buyao">°.°·(((p(≧□≦)q)))·°.°。</span>\r
-<span title="canle">X﹏X 惨了!</span>\r
-<span title="chaoxiao">q(≧▽≦q)</span>\r
-<span title="chouyan">( ̄ c ̄)y▂ξ。。。</span>\r
-<span title="chuai"><(  ̄^ ̄)(θ(θ☆( >_< </span>\r
-<span title="dai">( ̄△ ̄;)</span>\r
-<span title="dai">( ̄旦 ̄;)</span>\r
-<span title="dai">━┳━ ━┳━</span>\r
-<span title="dao">Σ(`д′*ノ)ノ</span>\r
-<span title="dao">Σ(っ °Д °;)っ</span>\r
-<span title="dese">~( ̄▽ ̄~)(~ ̄▽ ̄)~</span>\r
-<span title="deyi"><( ̄ˇ ̄)/</span>\r
-<span title="duo">┬┴┤_·)</span>\r
-<span title="e">("▔□▔)</span>\r
-<span title="e">(⊙﹏⊙)</span>\r
-<span title="e">-________-''</span>\r
-<span title="e">o(` · ~ · ′。)o</span>\r
-<span title="EXIT">______λ......_____</span>\r
-<span title="EXIT">λ…λλ…λ…λλλ…</span>\r
-<span title="fangp">○| ̄|_ =3</span>\r
-<span title="fanzhuo">(╯′□`)╯ ┫:·'∵:.┻┻:·'.:┣∵·:. ┳┳☆</span>\r
-<span title="fanzhuo">(╯‵□′)╯""┻━┻☆))>○<)</span>\r
-<span title="fanzhuo">┻━┻︵╰(‵□′)╯︵┻━┻ </span>\r
-<span title="fei">︿( ̄︶ ̄)︿</span>\r
-<span title="fen">ヾ(≧奋≦)〃</span>\r
-<span title="fk">French (* ̄( ̄ *) Kiss!</span>\r
-<span title="fufu">( ̄ˇ ̄)v</span>\r
-<span title="fufu">fufu~ ^u^</span>\r
-<span title="gaozhuang">( σ'ω')σ </span>\r
-<span title="gaozhuang">o(>O<;; )σ</span>\r
-<span title="gfw">┳G┻┳F┳┻W┫</span>\r
-<span title="GiveMeFive!">(┘ ̄︶ ̄)┘└( ̄︶ ̄└)</span>\r
-<span title="GO!"><( ̄︶ ̄)↗</span>\r
-<span title="GO!"><( ̄OO, ̄)/</span>\r
-<span title="good">Good! o( ̄▽ ̄)d</span>\r
-<span title="gudan">______λ......_____</span>\r
-<span title="guilian">( ̄┰ ̄*)</span>\r
-<span title="ha">(#°Д°) </span>\r
-<span title="ha">O口O!</span>\r
-<span title="ha">Σ(⊙▽⊙"a...</span>\r
-<span title="haha">o(*≧▽≦)ツ</span>\r
-<span title="han">( ̄_ ̄|||)</span>\r
-<span title="han">( ̄▽ ̄")</span>\r
-<span title="han">(寒 ̄ii ̄)彡…彡…彡</span>\r
-<span title="hehe">o(* ̄▽ ̄*)o</span>\r
-<span title="heiban">【】\(·ω·`)o</span>\r
-<span title="heihei">o(* ̄▽ ̄*)ゞ</span>\r
-<span title="heng">( -з)</span>\r
-<span title="heng">(;′⌒`)</span>\r
-<span title="heng">(ε- )</span>\r
-<span title="heng">o( ̄ヘ ̄o#) </span>\r
-<span title="hh">( ̄▽ ̄")</span>\r
-<span title="hh">o(* ̄▽ ̄*)o</span>\r
-<span title="hhh">^-^</span>\r
-<span title="hhh">^O^</span>\r
-<span title="hi">Hi~ o(* ̄▽ ̄*)ブ</span>\r
-<span title="Hi~Hitler!">( ·_·)ノ_·)ノ_·)ノ_·)ノ_·)ノ</span>\r
-<span title="hiahia">○( ^皿^)っHiahiahia.... </span>\r
-<span title="hoho">( ̄y▽ ̄)╭ Ohohoho.....</span>\r
-<span title="hoho">hoho ^O^</span>\r
-<span title="huhu">(_ _)。゜zzZ</span>\r
-<span title="jing">Σ( ° △ °|||)︴</span>\r
-<span title="jing">Σ(`д′*ノ)ノ</span>\r
-<span title="jing">Σ(っ °Д °;)っ</span>\r
-<span title="jirou">┗|*`0′*|┛</span>\r
-<span title="jiujie">( -'`-; ) </span>\r
-<span title="jiujie">o(′益`)o</span>\r
-<span title="jizhang">(  ̄ー ̄)人(^▽^ )</span>\r
-<span title="keai">n(*≧▽≦*)n</span>\r
-<span title="kedou">(°°)~ (°°)~ (°°)~ (°°)~</span>\r
-<span title="Kiss!"> (* ̄( ̄ *)</span>\r
-<span title="koushui">ˋ( ° ▽、° ) 口水ing...</span>\r
-<span title="K歌"> ...φ(0 ̄*)啦啦啦_φ(* ̄0 ̄)></span>\r
-<span title="laohu">m( =∩王∩= )m</span>\r
-<span title="lei">(┳_┳)...</span>\r
-<span title="lei">/(ㄒoㄒ)/~~</span>\r
-<span title="luanma">卐~%?…,# *'☆&℃$︿★?</span>\r
-<span title="manzu">o(* ̄︶ ̄*)o</span>\r
-<span title="manzu">o( ̄ˇ ̄)o</span>\r
-<span title="mao">o( =·ω·= )m </span>\r
-<span title="mao">o(=·ェ·=)m</span>\r
-<span title="max">MIN■■■■■□□MAX</span>\r
-<span title="miehhh">(/ ̄ˇ ̄)/</span>\r
-<span title="mimi">(。人。) </span>\r
-<span title="mmm">mmm...f('︶︿︶)o</span>\r
-<span title="mmm">mmm.....</span>\r
-<span title="mojiezuo">Capricorn</span>\r
-<span title="mua">mua! (*╯3╰)</span>\r
-<span title="niao">--\(˙<>˙)/--</span>\r
-<span title="nie">~( ̄▽ ̄)~* </span>\r
-<span title="nu">(#‵′) </span>\r
-<span title="nu">(o#゜ 曲゜)o</span>\r
-<span title="nu">MIN■■■■■□□MAX(╯‵□′)╯︵┻━┻</span>\r
-<span title="nu">ε=怒ε=怒ε=怒ε=怒ε=( o`ω′)ノ</span>\r
-<span title="o">(⊙o⊙)?</span>\r
-<span title="ohno">Oh~ no!!!!</span>\r
-<span title="ohye">Oh yeah!\(^&^)/</span>\r
-<span title="ok">OK</span>\r
-<span title="paidui">λ…λλ…λ…入λλ…</span>\r
-<span title="pao">ε = = (づ′▽`)づ</span>\r
-<span title="pao">ε=ε=ε=(~ ̄▽ ̄)~</span>\r
-<span title="pao">ヾ(*′▽`*)ノ彡☆ノヽノヽノヽ</span>\r
-<span title="pdr">ヾ(′▽`* )ノ~</span>\r
-<span title="pia">( ̄ε(# ̄)☆╰╮o( ̄▽ ̄///) </span>\r
-<span title="pia">Pia!(o ‵-′)ノ”(ノ﹏<。)</span>\r
-<span title="piao">(~ ̄▽ ̄)~</span>\r
-<span title="piao">(~o ̄3 ̄)~</span>\r
-<span title="piao">.....((/- -)/</span>\r
-<span title="qiang">▄︻┻┳═一……</span>\r
-<span title="qie">(ˉ▽ ̄~) 切~~</span>\r
-<span title="qing">( ^ ^) _U~~</span>\r
-<span title="quan">(╬ ̄皿 ̄)=○#( ̄#)3 ̄)</span>\r
-<span title="quan">(Д゜(○=(゜ 皿゜)=○)゜Д゜)</span>\r
-<span title="shengqi"><(-︿-)></span>\r
-<span title="shy">shy~ o(*////▽////*)q</span>\r
-<span title="sigh">( ′ 3`) sigh~</span>\r
-<span title="S奥特曼">三三三三三三三三三4(o|o ) </span>\r
-<span title="S小孩!"> (o ‵-′)ノ”(ノ_<。)</span>\r
-<span title="t"><(  ̄^ ̄)(θ(θ☆( >_< </span>\r
-<span title="tanshou">╮( ╯ 3 ╰ )╭</span>\r
-<span title="tanshou">╮( ̄▽ ̄")╭ </span>\r
-<span title="tanshou">╮(╯-╰)╭</span>\r
-<span title="tanshou">ㄟ( ▔, ▔ )ㄏ</span>\r
-<span title="tao">ε=ε=┏( >_<)┛</span>\r
-<span title="tao">ε=ε=ε=┏(゜ロ゜;)┛ </span>\r
-<span title="tao">ε=ε=ε=ε=ヽ(* ̄o ̄)ノ</span>\r
-<span title="tat">o(≧∩≦)o</span>\r
-<span title="tat">o(TヘTo)</span>\r
-<span title="thx">☆⌒(*^-゜)v THX!!</span>\r
-<span title="toukui">|壁|_☆)</span>\r
-<span title="toukui">┬┴┤_·)</span>\r
-<span title="touxiang">n(→_←)┛</span>\r
-<span title="touxiang">o( >﹏<。)┛</span>\r
-<span title="tun">0^)吞!</span>\r
-<span title="tushetou">( ̄┰ ̄*)</span>\r
-<span title="wa">(PД`q。)·。'゜</span>\r
-<span title="wakkk"><( ̄▽ ̄)/</span>\r
-<span title="wc">∥wc∥ o(- -o) =з =з =з</span>\r
-<span title="weiguan">(﹁"﹁)</span>\r
-<span title="weiqu">╥﹏╥...</span>\r
-<span title="wo">σ(⌒ー⌒)</span>\r
-<span title="woniu">@/"</span>\r
-<span title="wow">wow~⊙o⊙</span>\r
-<span title="xiaoxin">ㄟ( ▔, ▔ )ㄏ</span>\r
-<span title="xiey">( ﹁ ﹁ ) ~→</span>\r
-<span title="xiey">( ̄. ̄)+</span>\r
-<span title="xiey">(﹁"﹁)</span>\r
-<span title="xiezi">...ψ(。。 )</span>\r
-<span title="xingfu">o(* ̄▽ ̄*)o</span>\r
-<span title="xiong">(* ̄(エ) ̄)</span>\r
-<span title="xiong">(+(工)+╬)</span>\r
-<span title="xiu">o(*////▽////*)q</span>\r
-<span title="xiu">p(# ̄▽ ̄#)o</span>\r
-<span title="xxoo">卐~%?…,# *'☆&℃$︿★?……</span>\r
-<span title="xxoo">╳╳○○</span>\r
-<span title="y">(* ̄︶ ̄)y</span>\r
-<span title="y">(* ̄▽ ̄)y</span>\r
-<span title="y">^_^)y</span>\r
-<span title="yanshen">━┳━ ━┳━</span>\r
-<span title="yanwenzi">ag108lau</span>\r
-<span title="yessir">Yes,sir! <( ̄O ̄)/</span>\r
-<span title="yiqi">╭(′▽`)╭(′▽`)╯</span>\r
-<span title="yiqi">ヽ( ̄ω ̄( ̄ω ̄〃)ゝ</span>\r
-<span title="yo">(^U^)ノ~YO </span>\r
-<span title="yu">>°)))>彡</span>\r
-<span title="yun">(((φ(◎ロ◎;)φ)))</span>\r
-<span title="zhaoxiang">Σ[ ◎ ]}</span>\r
-<span title="zhi"><( ̄ ﹌  ̄)@m</span>\r
-<span title="zhu">^(* ̄(oo) ̄)^</span>\r
-<span title="zhua">W( ̄_ ̄)W</span>\r
-<span title="zhuangqiang">┳G┻F┳W┫☆(ノ﹏<。)</span>\r
-<span title="zhuisha">--==≡≡〈〈《( / ̄皿 ̄)=O));>o<)/</span>\r
-<span title="zuomeng">ZZzz…(。-ω-)..ooO((【·:*:~夢~:*:·】))</span>\r
-<span title="哎哟哟……">( ̄y▽, ̄)╭ </span>\r
-<span title="安安啦~~~"> o(* ̄▽ ̄*)ブ</span>\r
-<span title="凹凸曼……">(o|o)</span>\r
-<span title="嗷~">ヾ(≧O≦)〃</span>\r
-<span title="奥特曼……">(o|o) </span>\r
-<span title="拜佛">(-人-) </span>\r
-<span title="拜托啦……">(^人^)</span>\r
-<span title="包在我身上!">ヾ(′▽`*)ゝ</span>\r
-<span title="包在我身上!">ヾ(′▽`*)ゝ</span>\r
-<span title="抱抱">━((*′ ▽`)爻(′▽`*))━!!!</span>\r
-<span title="抱抱">━((*′д`)爻(′д`*))━!!!!</span>\r
-<span title="抱抱~">\( ̄︶ ̄)/</span>\r
-<span title="抱抱~">\( ̄︶ ̄*\))</span>\r
-<span title="鼻毛">(′゜c_,゜` ) </span>\r
-<span title="鄙视你!">╭∩╮(︶︿︶)╭∩╮</span>\r
-<span title="壁">(  ̄  ̄)σ…( _ _)ノ|</span>\r
-<span title="壁">(  ̄  ̄)σ…( _ _)ノ|</span>\r
-<span title="壁">ノ ̄ー ̄)ノ ⌒ >┼○"☆||</span>\r
-<span title="便秘">o(′益`)o </span>\r
-<span title="辫子">§(* ̄▽ ̄*)§</span>\r
-<span title="表!"><( ̄3 ̄)> </span>\r
-<span title="别走啊~~">______λ......___丬</span>\r
-<span title="瘪嘴">(* ̄︿ ̄) </span>\r
-<span title="冰天雪地掩面泪奔……">(PД`q。)·。'゜</span>\r
-<span title="啵啵">(*  ̄3)(ε ̄ *) </span>\r
-<span title="不吃!">( *^-^)ρ(*╯^╰)</span>\r
-<span title="不懂">(@_@;)? </span>\r
-<span title="不满">(* ̄︿ ̄) </span>\r
-<span title="不是我干的">ㄟ( ▔, ▔ )ㄏ </span>\r
-<span title="不屑">( ̄_, ̄ )</span>\r
-<span title="擦眼泪……">(ノへ ̄、)</span>\r
-<span title="财神爷">(o′┏▽┓`o) </span>\r
-<span title="草泥马">( ·ェ·)(·ェ· )</span>\r
-<span title="蹭">(*≧︶≦))( ̄▽ ̄* )ゞ</span>\r
-<span title="蹭">( * ̄▽ ̄)((≧︶≦*) </span>\r
-<span title="叉腰"><)。(> </span>\r
-<span title="超强风扇吹">ε~( ~( ~ ( 卍 )\( ̄▽ ̄ \)</span>\r
-<span title="超远程BB枪!">(# ̄□ ̄)o―∈‥oo━━━━━━━☆ </span>\r
-<span title="車">●┻┓⌒ Σ┌┘車└┐=3 =3 =3</span>\r
-<span title="吃饭去鸟">.....(((((ヾ( o=^·ェ·)o ┏━┓</span>\r
-<span title="吃我一鞭!">( `0‘)ノ~~~~~~~~~ν</span>\r
-<span title="吃药">(。>︿<)_θ</span>\r
-<span title="冲出!!">___*\(  ̄皿 ̄)/#____</span>\r
-<span title="抽!!">( ̄ε(# ̄)☆╰╮( ̄▽ ̄///)</span>\r
-<span title="抽泣">(ノへ ̄、)</span>\r
-<span title="抽泣">(ノへ ̄、)</span>\r
-<span title="臭蚊子!">Pia!(o ‵-′)ノ” </span>\r
-<span title="穿墙过去!">ε=ε┣G┻F┳ε=ヽ(* ̄▽ ̄)ノ┻W┫</span>\r
-<span title="戳">→)╥﹏╥) </span>\r
-<span title="赐予你力量!">( * ̄▽ ̄)o ─═≡※:☆▆▅▄▃▂_</span>\r
-<span title="打呵欠">(_ _)( - . - )(~O~) ……( - . - ) </span>\r
-<span title="大鼻子">(′台` ) </span>\r
-<span title="呆滞"> ━┳━ ━┳━</span>\r
-<span title="淡定">━━( ̄ー ̄*|||━━</span>\r
-<span title="当然!"><(ˉ^ˉ)></span>\r
-<span title="刀疤">(-_-メ)</span>\r
-<span title="等等我…我……我…………">...(* ̄0 ̄)ノ</span>\r
-<span title="低落"> (#`-_ゝ-)</span>\r
-<span title="低头">(。﹏。) </span>\r
-<span title="低头">(。_。) </span>\r
-<span title="点头">( ̄ー ̄(_ _( ̄ー ̄(_ _ </span>\r
-<span title="跌">(┬_┬)↘ </span>\r
-<span title="顶!">d=====( ̄▽ ̄*)b </span>\r
-<span title="动感光波">!!!(  ̄O ̄)ノノ……∞∞OOO)))</span>\r
-<span title="动感光波">!!!(  ̄O ̄)ノノ……∞∞OOO)))</span>\r
-<span title="抖">o((⊙﹏⊙))o. </span>\r
-<span title="嘟嘴">o( ̄ε ̄*) </span>\r
-<span title="嘟嘴">(○` 3′○) </span>\r
-<span title="对不起~"> <(_ _)></span>\r
-<span title="呃~被发现了......">(ˉ▽ˉ;)</span>\r
-<span title="呃~我……">σ(-_-メ)</span>\r
-<span title="翻桌!">(╯‵□′)╯︵┻━┻</span>\r
-<span title="防御!">(((\( ̄一 ̄)/)))</span>\r
-<span title="放我出去~~~"> ||Φ|(|T|Д|T|)|Φ|| </span>\r
-<span title="飞吻"> (* ̄3 ̄)╭</span>\r
-<span title="分裂">>( ̄▽ ̄ =  ̄︿ ̄)<</span>\r
-<span title="风魔法!"> (/-_-)/ξ ξ ξ ξ ξ ξ (+_+ /)/~~~</span>\r
-<span title="去去去~">乀ˉεˉ乀...</span>\r
-<span title="扶眼镜">(-@y@) </span>\r
-<span title="扶眼镜">(-@y@) </span>\r
-<span title="复活!">...:.;::..;::: .:.;::….;: ̄)…:.;:□ ̄)( ̄□ ̄*)</span>\r
-<span title="嘎~嘎~嘎~">.<{=....</span>\r
-<span title="干杯">( ̄▽ ̄)~■□~( ̄▽ ̄)</span>\r
-<span title="干杯!">~( ̄▽ ̄)~* </span>\r
-<span title="感动!">o(*≧▽≦*)m</span>\r
-<span title="高~实在是高!">(* ̄▽)u┌┐ d(▽ ̄*)</span>\r
-<span title="告状">(′д`σ)σ </span>\r
-<span title="跟你说厚~">╰( ̄▽ ̄)╭</span>\r
-<span title="狗狗">U·ェ·*U </span>\r
-<span title="狗狗">U·ェ·U </span>\r
-<span title="鼓掌">””\\( ̄ー ̄) ( ̄ー ̄)//””</span>\r
-<span title="鼓掌">└( ̄  ̄└)(┘ ̄  ̄)┘</span>\r
-<span title="乖~">o(*^@^*)o</span>\r
-<span title="滚来滚去">……~(~o ̄▽ ̄)~o 。。。……o~(_△_o~) ~。。。</span>\r
-<span title="含泪挥手帕">(ToT)/~~~</span>\r
-<span title="好~~">o(*^▽^*)o </span>\r
-<span title="好吧">╮╯-╰╭"</span>\r
-<span title="好苦~">( >﹏<)</span>\r
-<span title="好香~~">(╯▽╰ )</span>\r
-<span title="好主意!">(o゜▽゜)o☆</span>\r
-<span title="喝西北风">( ′Д`)彡</span>\r
-<span title="河马">( ̄。。 ̄)</span>\r
-<span title="黑客帝国下腰!"> ┌(_Д_┌ )┐</span>\r
-<span title="黑客帝国下腰!"> ┌(_Д_┌ )┐</span>\r
-<span title="呼~幸好幸好……">ε=( ̄。 ̄;A</span>\r
-<span title="呼唤">(/0 ̄)o </span>\r
-<span title="坏人……"> ~( TロT)σ</span>\r
-<span title="幻影术!">((( ̄( ̄( ̄( ̄ー ̄) ̄) ̄) ̄))) </span>\r
-<span title="挥手帕">(@^^)/~~~</span>\r
-<span title="火箭筒,发射!">(* ̄皿 ̄)=Σ口>=Σ口>=Σ口></span>\r
-<span title="获胜者是……">ヾ( ̄ー ̄)X(^▽^)ゞ</span>\r
-<span title="击掌">(〃 ̄︶ ̄)人( ̄︶ ̄〃)</span>\r
-<span title="加油">o^^oo^^o</span>\r
-<span title="交通志愿老大妈指挥ing..."> (o^~^)尸"</span>\r
-<span title="金盾!">||┣(—_\) </span>\r
-<span title="就你!"><( ̄ ﹌  ̄)@m</span>\r
-<span title="就你好了~"> (@゜▽゜)</span>\r
-<span title="就是他!"> (@`д′)</span>\r
-<span title="举手">o(*^▽^*)┛</span>\r
-<span title="举手投降">┗( T﹏T )┛</span>\r
-<span title="嚼!">( ̄~ ̄)</span>\r
-<span title="卡拉OK"> ...φ(0 ̄*)啦啦啦_φ(* ̄0 ̄)′</span>\r
-<span title="看">(°ー°〃) </span>\r
-<span title="看好你哦!">(@^0^)</span>\r
-<span title="看我忍者镖!">( ‵▽′)ノ'卍卍卍卍卍卍 Σ(゜д゜;)</span>\r
-<span title="靠!什么东西?!"> ( `д′)</span>\r
-<span title="咳咳">><</span>\r
-<span title="苦恼"> ( -'`-; )</span>\r
-<span title="快使用双截棍,">┗(`o′)┓哼┏(`○′)┛哼┏(`o′)┓哈┗(`O′)┛兮!!</span>\r
-<span title="困,揉眼睛……">(o-ωq)).oO</span>\r
-<span title="啦啦啦">...φ(0 ̄*)_φ(* ̄0 ̄)></span>\r
-<span title="来啦~">(~o ̄▽ ̄)~o ~。。。</span>\r
-<span title="来人呐~">(o ;′Д`)ノ゛</span>\r
-<span title="冷笑">(  ̄ー ̄)</span>\r
-<span title="脸红掩面">(*/ω\*)</span>\r
-<span title="脸红掩面">(*/ω\*)</span>\r
-<span title="两罐纸星星">(*ˉ﹃ˉ)_☆☆</span>\r
-<span title="列队">(* ̄^ ̄(* ̄^ ̄(* ̄^ ̄)</span>\r
-<span title="铃铃铃">☆{{{Д}}} ☆!! </span>\r
-<span title="毛毛虫">(· ·)nnn </span>\r
-<span title="没办法~">╮( ̄▽ ̄")╭</span>\r
-<span title="没人在哦?">||o(*°ω°*)o|Ю </span>\r
-<span title="媚眼">ο(=·ω<=)ρ⌒☆</span>\r
-<span title="秘密">(一-一) </span>\r
-<span title="喵~">o( =∩ω∩= )m </span>\r
-<span title="喵~">>▽<</span>\r
-<span title="咩哈哈哈哈……"><(* ̄▽ ̄*)/</span>\r
-<span title="蔑视">( ̄_, ̄ )</span>\r
-<span title="命苦...">ε(┬┬﹏┬┬)3</span>\r
-<span title="摸摸头">(~ ̄▽ ̄)ノ</span>\r
-<span title="摸摸头">╰( ̄ω ̄o) </span>\r
-<span title="膜拜">_| ̄|○ → _|\○_ → _/\○_ → ____○_</span>\r
-<span title="墓">┏┛墓┗┓...(((m -__-)m</span>\r
-<span title="哪~里跑?!">(/// ̄皿 ̄)○~</span>\r
-<span title="那边那个">(﹁ ﹁ )σ</span>\r
-<span title="嗯!">ヾ(≧へ≦)〃</span>\r
-<span title="嗯!">o( ̄︶ ̄)n</span>\r
-<span title="嗯~">o(* ̄▽ ̄*)o</span>\r
-<span title="你!!">Σ(  ̄д ̄;)</span>\r
-<span title="你回来啦~~">ヾ(^▽^*)))</span>\r
-<span title="你你你……"> ~( TロT)σ</span>\r
-<span title="你你你……"> ~( TロT)σ</span>\r
-<span title="溺水">゜゜┌┴o゜゜゜゜°</span>\r
-<span title="念力~"> ( -人-)···-~=~≡~≡ ((+o+)))</span>\r
-<span title="念咒">((( (-h-) )))</span>\r
-<span title="念咒">……(((\( ̄一 ̄)/)))</span>\r
-<span title="捏耳朵!"><( ‵□′)>───Cε(┬﹏┬)3</span>\r
-<span title="怒">ε=怒ε=怒ε=怒ε=怒ε=( o`ω′)/</span>\r
-<span title="哦~">_( ̄0 ̄)_</span>\r
-<span title="啪叽~摔一跟头……">((o_ _)'彡☆</span>\r
-<span title="怕怕">━((*′д`)爻(′д`*))━!!!!</span>\r
-<span title="拍手">└( ̄  ̄└)(┘ ̄  ̄)┘</span>\r
-<span title="拍手拍手">””\\( ̄ー ̄) ( ̄ー ̄)//””</span>\r
-<span title="拍桌狂笑!">o(*≧▽≦)ツ┏━┓</span>\r
-<span title="飘飘然……">︿( ̄︶ ̄)︿</span>\r
-<span title="乒乓球">( ^o)ρ┳┻┳°σ(o^ ) </span>\r
-<span title="期待"> (☆▽☆)</span>\r
-<span title="起床">(o ̄Д ̄)<起床! ※=○☆(__*)Zzz</span>\r
-<span title="起床啦!">( *′д)/o(_ _)ozzZZ…</span>\r
-<span title="切~~">( ﹁ ﹁ ) ~~~</span>\r
-<span title="亲亲">o(* ̄3 ̄)o</span>\r
-<span title="亲亲">(*  ̄)( ̄▽ ̄*)ゞ</span>\r
-<span title="去去去~">(づ ̄ 3 ̄)づ...</span>\r
-<span title="去下厕厕……">∥WC||_·)╯</span>\r
-<span title="忍术~隐!"> ( ̄人 ̄)( ̄人:.;:…( ̄...:.;::..;::: .:;.…::;.:..:;.:...</span>\r
-<span title="撒花!">( ̄▽ ̄)o∠※PAN!=.:*:'☆.:*:'★':* </span>\r
-<span title="撒花!">*★,°*:.☆\( ̄▽ ̄)/$:*.°★* 。</span>\r
-<span title="散弹发射!!">▄︻┻┳═一∵∴∷∶∵ (∵_,∵)>>>></span>\r
-<span title="杀虫剂!">( ▼▼)/鹵〈 巛巛巛 ( ◎_x)/</span>\r
-<span title="闪人">(* ̄▽ ̄)( ̄▽:;.…::;.:.:::;..::;.:... </span>\r
-<span title="伤心">(;′⌒`)</span>\r
-<span title="蛇拳">z(-_-z)).....((s-_-)s</span>\r
-<span title="射箭">(  ̄ー ̄)——)-=======>-->></span>\r
-<span title="神啊~">\( ̄0 ̄)/</span>\r
-<span title="失落">(。_。) </span>\r
-<span title="石化">━━∑( ̄□ ̄*|||━━化</span>\r
-<span title="石化ing~">(ˉ▽ˉ;)...</span>\r
-<span title="视力表">┫♀旦 ̄)σ(呃……)</span>\r
-<span title="是不是你?!">(σ`д′)σ</span>\r
-<span title="是不是你?!">(σ`д′)σ</span>\r
-<span title="手榴弹!">σ~ (`′メ </span>\r
-<span title="手指戳戳">(~ ̄▽ ̄)→))* ̄▽ ̄*)o </span>\r
-<span title="手肘戳戳">o( ̄▽ ̄*)ゞ)) ̄▽ ̄*)o </span>\r
-<span title="衰">(′д` )…彡…彡</span>\r
-<span title="死亡中">(:D)┼─┤</span>\r
-<span title="太好笑了!!">……o((≧▽≦o)</span>\r
-<span title="太可怕了">ヽ(*。>Д<)o゜</span>\r
-<span title="逃命啊~~">\("▔□▔)/\("▔□▔)/ </span>\r
-<span title="陶醉">( *︾▽︾)</span>\r
-<span title="讨厌啦~">(ノω<。)ノ))☆.。</span>\r
-<span title="天旋地转">ヾ(   )ノ゛ヾ( °д)ノ゛ヾ(°д°)ノ゛ヾ(д° )ノ゛ヾ(  )ノ゛</span>\r
-<span title="天助我也~"> ヾ(*′▽`*)彡</span>\r
-<span title="挑衅"><(* ̄ー ̄)ゞ来呀~</span>\r
-<span title="挑衅"><(* ̄ー ̄)ゞ来啊~</span>\r
-<span title="偷看">(/ω\*)……… (/ω·\*) </span>\r
-<span title="偷看">(/ω·\*) </span>\r
-<span title="偷拍 ">Σ[ ◎ ]}ー′)</span>\r
-<span title="怒">凸艹皿艹</span>\r
-<span title="靠">凸゜皿゜メ</span>\r
-<span title="吐">( >ρ < ”)</span>\r
-<span title="推推~起床啦!">(o ̄ω ̄)○))o(__*)Zzz</span>\r
-<span title="拖走">ヽ(゜▽゜ )-C<(/;◇;)/~</span>\r
-<span title="哇卡卡卡卡卡……">o((≧▽≦o) 太好笑了!!</span>\r
-<span title="哇咧!">Σ(⊙▽⊙"a...</span>\r
-<span title="挖鼻屎"> (* ̄rǒ ̄)</span>\r
-<span title="万岁!">*★,°*:.☆\( ̄▽ ̄)/$:*.°★* 。</span>\r
-<span title="围观!">(← ← )</span>\r
-<span title="围观!">( → →) </span>\r
-<span title="畏罪自杀…">…〒_〒…‵o′-一┳═┻︻▄</span>\r
-<span title="喂!">(#`O′)</span>\r
-<span title="喂饭">( *^-^)ρ(^0^* )</span>\r
-<span title="吻别">(* ̄;( ̄ *)</span>\r
-<span title="我?">σ(· ·?)</span>\r
-<span title="我不看……">(/▽\)</span>\r
-<span title="我错了……">(。﹏。*)</span>\r
-<span title="我回来啦~">||ヽ(* ̄▽ ̄*)ノミ|Ю</span>\r
-<span title="我来了~">(~ ̄▽ ̄)~</span>\r
-<span title="我忍!">o(-"-;) </span>\r
-<span title="我闪!">|(·_·) |·_·) |_·) |·) | )</span>\r
-<span title="握拳!">o( ̄ヘ ̄o* )</span>\r
-<span title="握拳!">o( ̄ヘ ̄o#)</span>\r
-<span title="呜呜呜……">( >﹏<。)~</span>\r
-<span title="无敌!">↑↑↓↓←→←→BA...┗( -o-)┛</span>\r
-<span title="无敌弹簧拳!">( ‵Д′)=○))~~~~~~Ю))>o<)/ </span>\r
-<span title="无敌幻影脚!">ヽ(ヽ `д′)ヽ`д′)ヽ`д′)┌┛┌┛┌┛★)`з゜)y</span>\r
-<span title="无敌捏脸功!"><( ‵□′)───C<─___-)|| </span>\r
-<span title="无敌肉包拳!">(o  ̄3)==@))゜ロ゜((@==(′ε′ )o </span>\r
-<span title="无敌肉包拳!">(o  ̄3)==@))゜ロ゜((@==(′ε′ )o</span>\r
-<span title="无敌影分身!">((≧(≧▽(≧▽≦(≧▽≦)≧▽≦)▽≦)≦))) </span>\r
-<span title="无力扶墙..."> ( _ _)ノ|壁</span>\r
-<span title="无奈">╮(╯-╰)╭ </span>\r
-<span title="无影脚!"><(  ̄︿ ̄)︵θ︵θ︵θ︵θ︵☆(>口<-)</span>\r
-<span title="无影脚!"><(  ̄︿ ̄)︵θ︵θ︵θ︵θ︵☆(>口<-)</span>\r
-<span title="享受">(╯▽╰ ) </span>\r
-<span title="消失">(* ̄□ ̄)( ̄□:;.…::;.:.:::;..::;.:...</span>\r
-<span title="小新"><( ̄︶ ̄)↗</span>\r
-<span title="邪恶">( ‵▽′)ψ</span>\r
-<span title="谢啦!!">☆⌒(*^-゜)v </span>\r
-<span title="心神不宁...">(゜゜ )(。。)(゜゜ )(。。)</span>\r
-<span title="欣慰">( ╯▽╰)</span>\r
-<span title="要">不>( ̄ε ̄ =  ̄3 ̄)<</span>\r
-<span title="噎死">( *⊙~⊙) </span>\r
-<span title="噎住">( *⊙~⊙) </span>\r
-<span title="隐身!">(* ̄□ ̄)( ̄□:;.…::;.:.:::;..::;.:...</span>\r
-<span title="鹰钩鼻">( ̄ム ̄) </span>\r
-<span title="哟西!">(9 ̄^ ̄)9</span>\r
-<span title="有了!">(o゜▽゜)o☆</span>\r
-<span title="有人吗?">||o(*°▽°*)o|Ю </span>\r
-<span title="御风_凌"></span>\r
-<span title="怨.念....">o(一︿一+)o</span>\r
-<span title="运动">╔囧╗╔囧╝╚囧╝╚囧╗</span>\r
-<span title="晕!">@o@"</span>\r
-<span title="糟糕!">X﹏X</span>\r
-<span title="早安呀~~~"> o(* ̄▽ ̄*)ブ</span>\r
-<span title="早点回来哦~">(~ ̄(OO) ̄)ブ</span>\r
-<span title="炸弹!">(╯‵□′)╯···*~●</span>\r
-<span title="斩!!">ˋ( ° ▽、° ) (o( ̄▽ ̄///</span>\r
-<span title="涨">( ̄︶ ̄)↗</span>\r
-<span title="这个……呃~~">-______-"</span>\r
-<span title="真哒?!"> o(〃'▽'〃)o</span>\r
-<span title="真空波动拳!">( `o′){ ···-=≡))</span>\r
-<span title="真空波动拳!">( `o′){ ···-=≡))</span>\r
-<span title="振奋">(o>ε(o>u(≧∩≦) </span>\r
-<span title="振作!">━━(o_ _)o━━(o―_―)o━━(9 ̄ー ̄)9</span>\r
-<span title="痣长毛">( ゜,_ゝ゜) </span>\r
-<span title="皱眉">(-"-)</span>\r
-<span title="抓狂">o((>ω< ))o</span>\r
-<span title="抓狂">o(>@<)o</span>\r
-<span title="足球">( · ·)L☆ .....○ 冂 </span>\r
-<span title="醉拳">ヨロ (*~▽~)ノ ヨロ ヽ(~▽~*)ヨロ (*~▽~)―〇 ☆ バシ ))>口<)</span>\r
-<p style="display: block; float: left; margin-top: 25px; margin-bottom: -40px;">&copy; 2010 @ag108lau<br>Thanks @OnlyTiny<br />\r
-Last Update: 2010-11-13\r
+<span title="花蕾无语">╮(╯_╰)╭</span>
+<span title=" 嗷~~">┗|`O′|┛</span>
+<span title="~你给我回来!">o(°▽、°o)....+(( ̄﹏ ̄m )</span>
+<span title="“不明真相的围观群众”">槑槑槑槑呆槑槑槑槑槑槑槑槑……</span>
+<span title="『家』">~o(▽` o) =3 =3 =3</span>
+<span title="【TEL】"><铃铃铃~ヾ( ̄  ̄*)==3=3=3</span>
+<span title="【小黑屋】">ヽ( ̄︿ ̄ )—C<(/;◇;)/ </span>
+<span title="555~他不起来……">ヾ( ┬o┬)┌θθθθ(;;_ _).o○</span>
+<span title="aaa">o((>ω< ))o</span>
+<span title="aaa">o(≧口≦)o</span>
+<span title="ai">╮( ̄▽ ̄")╭ </span>
+<span title="bai">m(_ _)m</span>
+<span title="bai">ヾ( ̄▽ ̄)Bye~Bye~</span>
+<span title="baotou">▄︻┻┳═一…… ☆(>○<)</span>
+<span title="baoxiao">o(*≧▽≦)ツ</span>
+<span title="baoxiao">ヾ(≧▽≦*)o</span>
+<span title="bengkui">o(≧口≦)o</span>
+<span title="BINGO!">(o゜▽゜)o☆</span>
+<span title="biti">( ̄ ‘i  ̄;)</span>
+<span title="biti">( ̄ ii  ̄;) ( ̄" ̄;)</span>
+<span title="bizui">(⊙x⊙;)</span>
+<span title="bo">(*^ ^*)(^ *)</span>
+<span title="bqlz">(◎_x)</span>
+<span title="buhaoyisi">o( ̄┰ ̄*)ゞ</span>
+<span title="buyao">°.°·(((p(≧□≦)q)))·°.°。</span>
+<span title="canle">X﹏X 惨了!</span>
+<span title="chaoxiao">q(≧▽≦q)</span>
+<span title="chouyan">( ̄ c ̄)y▂ξ。。。</span>
+<span title="chuai"><(  ̄^ ̄)(θ(θ☆( >_< </span>
+<span title="dai">( ̄△ ̄;)</span>
+<span title="dai">( ̄旦 ̄;)</span>
+<span title="dai">━┳━ ━┳━</span>
+<span title="dao">Σ(`д′*ノ)ノ</span>
+<span title="dao">Σ(っ °Д °;)っ</span>
+<span title="dese">~( ̄▽ ̄~)(~ ̄▽ ̄)~</span>
+<span title="deyi"><( ̄ˇ ̄)/</span>
+<span title="duo">┬┴┤_·)</span>
+<span title="e">("▔□▔)</span>
+<span title="e">(⊙﹏⊙)</span>
+<span title="e">-________-''</span>
+<span title="e">o(` · ~ · ′。)o</span>
+<span title="EXIT">______λ......_____</span>
+<span title="EXIT">λ…λλ…λ…λλλ…</span>
+<span title="fangp">○| ̄|_ =3</span>
+<span title="fanzhuo">(╯′□`)╯ ┫:·'∵:.┻┻:·'.:┣∵·:. ┳┳☆</span>
+<span title="fanzhuo">(╯‵□′)╯""┻━┻☆))>○<)</span>
+<span title="fanzhuo">┻━┻︵╰(‵□′)╯︵┻━┻ </span>
+<span title="fei">︿( ̄︶ ̄)︿</span>
+<span title="fen">ヾ(≧奋≦)〃</span>
+<span title="fk">French (* ̄( ̄ *) Kiss!</span>
+<span title="fufu">( ̄ˇ ̄)v</span>
+<span title="fufu">fufu~ ^u^</span>
+<span title="gaozhuang">( σ'ω')σ </span>
+<span title="gaozhuang">o(>O<;; )σ</span>
+<span title="gfw">┳G┻┳F┳┻W┫</span>
+<span title="GiveMeFive!">(┘ ̄︶ ̄)┘└( ̄︶ ̄└)</span>
+<span title="GO!"><( ̄︶ ̄)↗</span>
+<span title="GO!"><( ̄OO, ̄)/</span>
+<span title="good">Good! o( ̄▽ ̄)d</span>
+<span title="gudan">______λ......_____</span>
+<span title="guilian">( ̄┰ ̄*)</span>
+<span title="ha">(#°Д°) </span>
+<span title="ha">O口O!</span>
+<span title="ha">Σ(⊙▽⊙"a...</span>
+<span title="haha">o(*≧▽≦)ツ</span>
+<span title="han">( ̄_ ̄|||)</span>
+<span title="han">( ̄▽ ̄")</span>
+<span title="han">(寒 ̄ii ̄)彡…彡…彡</span>
+<span title="hehe">o(* ̄▽ ̄*)o</span>
+<span title="heiban">【】\(·ω·`)o</span>
+<span title="heihei">o(* ̄▽ ̄*)ゞ</span>
+<span title="heng">( -з)</span>
+<span title="heng">(;′⌒`)</span>
+<span title="heng">(ε- )</span>
+<span title="heng">o( ̄ヘ ̄o#) </span>
+<span title="hh">( ̄▽ ̄")</span>
+<span title="hh">o(* ̄▽ ̄*)o</span>
+<span title="hhh">^-^</span>
+<span title="hhh">^O^</span>
+<span title="hi">Hi~ o(* ̄▽ ̄*)ブ</span>
+<span title="Hi~Hitler!">( ·_·)ノ_·)ノ_·)ノ_·)ノ_·)ノ</span>
+<span title="hiahia">○( ^皿^)っHiahiahia.... </span>
+<span title="hoho">( ̄y▽ ̄)╭ Ohohoho.....</span>
+<span title="hoho">hoho ^O^</span>
+<span title="huhu">(_ _)。゜zzZ</span>
+<span title="jing">Σ( ° △ °|||)︴</span>
+<span title="jing">Σ(`д′*ノ)ノ</span>
+<span title="jing">Σ(っ °Д °;)っ</span>
+<span title="jirou">┗|*`0′*|┛</span>
+<span title="jiujie">( -'`-; ) </span>
+<span title="jiujie">o(′益`)o</span>
+<span title="jizhang">(  ̄ー ̄)人(^▽^ )</span>
+<span title="keai">n(*≧▽≦*)n</span>
+<span title="kedou">(°°)~ (°°)~ (°°)~ (°°)~</span>
+<span title="Kiss!"> (* ̄( ̄ *)</span>
+<span title="koushui">ˋ( ° ▽、° ) 口水ing...</span>
+<span title="K歌"> ...φ(0 ̄*)啦啦啦_φ(* ̄0 ̄)></span>
+<span title="laohu">m( =∩王∩= )m</span>
+<span title="lei">(┳_┳)...</span>
+<span title="lei">/(ㄒoㄒ)/~~</span>
+<span title="luanma">卐~%?…,# *'☆&℃$︿★?</span>
+<span title="manzu">o(* ̄︶ ̄*)o</span>
+<span title="manzu">o( ̄ˇ ̄)o</span>
+<span title="mao">o( =·ω·= )m </span>
+<span title="mao">o(=·ェ·=)m</span>
+<span title="max">MIN■■■■■□□MAX</span>
+<span title="miehhh">(/ ̄ˇ ̄)/</span>
+<span title="mimi">(。人。) </span>
+<span title="mmm">mmm...f('︶︿︶)o</span>
+<span title="mmm">mmm.....</span>
+<span title="mojiezuo">Capricorn</span>
+<span title="mua">mua! (*╯3╰)</span>
+<span title="niao">--\(˙<>˙)/--</span>
+<span title="nie">~( ̄▽ ̄)~* </span>
+<span title="nu">(#‵′) </span>
+<span title="nu">(o#゜ 曲゜)o</span>
+<span title="nu">MIN■■■■■□□MAX(╯‵□′)╯︵┻━┻</span>
+<span title="nu">ε=怒ε=怒ε=怒ε=怒ε=( o`ω′)ノ</span>
+<span title="o">(⊙o⊙)?</span>
+<span title="ohno">Oh~ no!!!!</span>
+<span title="ohye">Oh yeah!\(^&^)/</span>
+<span title="ok">OK</span>
+<span title="paidui">λ…λλ…λ…入λλ…</span>
+<span title="pao">ε = = (づ′▽`)づ</span>
+<span title="pao">ε=ε=ε=(~ ̄▽ ̄)~</span>
+<span title="pao">ヾ(*′▽`*)ノ彡☆ノヽノヽノヽ</span>
+<span title="pdr">ヾ(′▽`* )ノ~</span>
+<span title="pia">( ̄ε(# ̄)☆╰╮o( ̄▽ ̄///) </span>
+<span title="pia">Pia!(o ‵-′)ノ”(ノ﹏<。)</span>
+<span title="piao">(~ ̄▽ ̄)~</span>
+<span title="piao">(~o ̄3 ̄)~</span>
+<span title="piao">.....((/- -)/</span>
+<span title="qiang">▄︻┻┳═一……</span>
+<span title="qie">(ˉ▽ ̄~) 切~~</span>
+<span title="qing">( ^ ^) _U~~</span>
+<span title="quan">(╬ ̄皿 ̄)=○#( ̄#)3 ̄)</span>
+<span title="quan">(Д゜(○=(゜ 皿゜)=○)゜Д゜)</span>
+<span title="shengqi"><(-︿-)></span>
+<span title="shy">shy~ o(*////▽////*)q</span>
+<span title="sigh">( ′ 3`) sigh~</span>
+<span title="S奥特曼">三三三三三三三三三4(o|o ) </span>
+<span title="S小孩!"> (o ‵-′)ノ”(ノ_<。)</span>
+<span title="t"><(  ̄^ ̄)(θ(θ☆( >_< </span>
+<span title="tanshou">╮( ╯ 3 ╰ )╭</span>
+<span title="tanshou">╮( ̄▽ ̄")╭ </span>
+<span title="tanshou">╮(╯-╰)╭</span>
+<span title="tanshou">ㄟ( ▔, ▔ )ㄏ</span>
+<span title="tao">ε=ε=┏( >_<)┛</span>
+<span title="tao">ε=ε=ε=┏(゜ロ゜;)┛ </span>
+<span title="tao">ε=ε=ε=ε=ヽ(* ̄o ̄)ノ</span>
+<span title="tat">o(≧∩≦)o</span>
+<span title="tat">o(TヘTo)</span>
+<span title="thx">☆⌒(*^-゜)v THX!!</span>
+<span title="toukui">|壁|_☆)</span>
+<span title="toukui">┬┴┤_·)</span>
+<span title="touxiang">n(→_←)┛</span>
+<span title="touxiang">o( >﹏<。)┛</span>
+<span title="tun">0^)吞!</span>
+<span title="tushetou">( ̄┰ ̄*)</span>
+<span title="wa">(PД`q。)·。'゜</span>
+<span title="wakkk"><( ̄▽ ̄)/</span>
+<span title="wc">∥wc∥ o(- -o) =з =з =з</span>
+<span title="weiguan">(﹁"﹁)</span>
+<span title="weiqu">╥﹏╥...</span>
+<span title="wo">σ(⌒ー⌒)</span>
+<span title="woniu">@/"</span>
+<span title="wow">wow~⊙o⊙</span>
+<span title="xiaoxin">ㄟ( ▔, ▔ )ㄏ</span>
+<span title="xiey">( ﹁ ﹁ ) ~→</span>
+<span title="xiey">( ̄. ̄)+</span>
+<span title="xiey">(﹁"﹁)</span>
+<span title="xiezi">...ψ(。。 )</span>
+<span title="xingfu">o(* ̄▽ ̄*)o</span>
+<span title="xiong">(* ̄(エ) ̄)</span>
+<span title="xiong">(+(工)+╬)</span>
+<span title="xiu">o(*////▽////*)q</span>
+<span title="xiu">p(# ̄▽ ̄#)o</span>
+<span title="xxoo">卐~%?…,# *'☆&℃$︿★?……</span>
+<span title="xxoo">╳╳○○</span>
+<span title="y">(* ̄︶ ̄)y</span>
+<span title="y">(* ̄▽ ̄)y</span>
+<span title="y">^_^)y</span>
+<span title="yanshen">━┳━ ━┳━</span>
+<span title="yanwenzi">ag108lau</span>
+<span title="yessir">Yes,sir! <( ̄O ̄)/</span>
+<span title="yiqi">╭(′▽`)╭(′▽`)╯</span>
+<span title="yiqi">ヽ( ̄ω ̄( ̄ω ̄〃)ゝ</span>
+<span title="yo">(^U^)ノ~YO </span>
+<span title="yu">>°)))>彡</span>
+<span title="yun">(((φ(◎ロ◎;)φ)))</span>
+<span title="zhaoxiang">Σ[ ◎ ]}</span>
+<span title="zhi"><( ̄ ﹌  ̄)@m</span>
+<span title="zhu">^(* ̄(oo) ̄)^</span>
+<span title="zhua">W( ̄_ ̄)W</span>
+<span title="zhuangqiang">┳G┻F┳W┫☆(ノ﹏<。)</span>
+<span title="zhuisha">--==≡≡〈〈《( / ̄皿 ̄)=O));>o<)/</span>
+<span title="zuomeng">ZZzz…(。-ω-)..ooO((【·:*:~夢~:*:·】))</span>
+<span title="哎哟哟……">( ̄y▽, ̄)╭ </span>
+<span title="安安啦~~~"> o(* ̄▽ ̄*)ブ</span>
+<span title="凹凸曼……">(o|o)</span>
+<span title="嗷~">ヾ(≧O≦)〃</span>
+<span title="奥特曼……">(o|o) </span>
+<span title="拜佛">(-人-) </span>
+<span title="拜托啦……">(^人^)</span>
+<span title="包在我身上!">ヾ(′▽`*)ゝ</span>
+<span title="包在我身上!">ヾ(′▽`*)ゝ</span>
+<span title="抱抱">━((*′ ▽`)爻(′▽`*))━!!!</span>
+<span title="抱抱">━((*′д`)爻(′д`*))━!!!!</span>
+<span title="抱抱~">\( ̄︶ ̄)/</span>
+<span title="抱抱~">\( ̄︶ ̄*\))</span>
+<span title="鼻毛">(′゜c_,゜` ) </span>
+<span title="鄙视你!">╭∩╮(︶︿︶)╭∩╮</span>
+<span title="壁">(  ̄  ̄)σ…( _ _)ノ|</span>
+<span title="壁">(  ̄  ̄)σ…( _ _)ノ|</span>
+<span title="壁">ノ ̄ー ̄)ノ ⌒ >┼○"☆||</span>
+<span title="便秘">o(′益`)o </span>
+<span title="辫子">§(* ̄▽ ̄*)§</span>
+<span title="表!"><( ̄3 ̄)> </span>
+<span title="别走啊~~">______λ......___丬</span>
+<span title="瘪嘴">(* ̄︿ ̄) </span>
+<span title="冰天雪地掩面泪奔……">(PД`q。)·。'゜</span>
+<span title="啵啵">(*  ̄3)(ε ̄ *) </span>
+<span title="不吃!">( *^-^)ρ(*╯^╰)</span>
+<span title="不懂">(@_@;)? </span>
+<span title="不满">(* ̄︿ ̄) </span>
+<span title="不是我干的">ㄟ( ▔, ▔ )ㄏ </span>
+<span title="不屑">( ̄_, ̄ )</span>
+<span title="擦眼泪……">(ノへ ̄、)</span>
+<span title="财神爷">(o′┏▽┓`o) </span>
+<span title="草泥马">( ·ェ·)(·ェ· )</span>
+<span title="蹭">(*≧︶≦))( ̄▽ ̄* )ゞ</span>
+<span title="蹭">( * ̄▽ ̄)((≧︶≦*) </span>
+<span title="叉腰"><)。(> </span>
+<span title="超强风扇吹">ε~( ~( ~ ( 卍 )\( ̄▽ ̄ \)</span>
+<span title="超远程BB枪!">(# ̄□ ̄)o―∈‥oo━━━━━━━☆ </span>
+<span title="車">●┻┓⌒ Σ┌┘車└┐=3 =3 =3</span>
+<span title="吃饭去鸟">.....(((((ヾ( o=^·ェ·)o ┏━┓</span>
+<span title="吃我一鞭!">( `0‘)ノ~~~~~~~~~ν</span>
+<span title="吃药">(。>︿<)_θ</span>
+<span title="冲出!!">___*\(  ̄皿 ̄)/#____</span>
+<span title="抽!!">( ̄ε(# ̄)☆╰╮( ̄▽ ̄///)</span>
+<span title="抽泣">(ノへ ̄、)</span>
+<span title="抽泣">(ノへ ̄、)</span>
+<span title="臭蚊子!">Pia!(o ‵-′)ノ” </span>
+<span title="穿墙过去!">ε=ε┣G┻F┳ε=ヽ(* ̄▽ ̄)ノ┻W┫</span>
+<span title="戳">→)╥﹏╥) </span>
+<span title="赐予你力量!">( * ̄▽ ̄)o ─═≡※:☆▆▅▄▃▂_</span>
+<span title="打呵欠">(_ _)( - . - )(~O~) ……( - . - ) </span>
+<span title="大鼻子">(′台` ) </span>
+<span title="呆滞"> ━┳━ ━┳━</span>
+<span title="淡定">━━( ̄ー ̄*|||━━</span>
+<span title="当然!"><(ˉ^ˉ)></span>
+<span title="刀疤">(-_-メ)</span>
+<span title="等等我…我……我…………">...(* ̄0 ̄)ノ</span>
+<span title="低落"> (#`-_ゝ-)</span>
+<span title="低头">(。﹏。) </span>
+<span title="低头">(。_。) </span>
+<span title="点头">( ̄ー ̄(_ _( ̄ー ̄(_ _ </span>
+<span title="跌">(┬_┬)↘ </span>
+<span title="顶!">d=====( ̄▽ ̄*)b </span>
+<span title="动感光波">!!!(  ̄O ̄)ノノ……∞∞OOO)))</span>
+<span title="动感光波">!!!(  ̄O ̄)ノノ……∞∞OOO)))</span>
+<span title="抖">o((⊙﹏⊙))o. </span>
+<span title="嘟嘴">o( ̄ε ̄*) </span>
+<span title="嘟嘴">(○` 3′○) </span>
+<span title="对不起~"> <(_ _)></span>
+<span title="呃~被发现了......">(ˉ▽ˉ;)</span>
+<span title="呃~我……">σ(-_-メ)</span>
+<span title="翻桌!">(╯‵□′)╯︵┻━┻</span>
+<span title="防御!">(((\( ̄一 ̄)/)))</span>
+<span title="放我出去~~~"> ||Φ|(|T|Д|T|)|Φ|| </span>
+<span title="飞吻"> (* ̄3 ̄)╭</span>
+<span title="分裂">>( ̄▽ ̄ =  ̄︿ ̄)<</span>
+<span title="风魔法!"> (/-_-)/ξ ξ ξ ξ ξ ξ (+_+ /)/~~~</span>
+<span title="去去去~">乀ˉεˉ乀...</span>
+<span title="扶眼镜">(-@y@) </span>
+<span title="扶眼镜">(-@y@) </span>
+<span title="复活!">...:.;::..;::: .:.;::….;: ̄)…:.;:□ ̄)( ̄□ ̄*)</span>
+<span title="嘎~嘎~嘎~">.<{=....</span>
+<span title="干杯">( ̄▽ ̄)~■□~( ̄▽ ̄)</span>
+<span title="干杯!">~( ̄▽ ̄)~* </span>
+<span title="感动!">o(*≧▽≦*)m</span>
+<span title="高~实在是高!">(* ̄▽)u┌┐ d(▽ ̄*)</span>
+<span title="告状">(′д`σ)σ </span>
+<span title="跟你说厚~">╰( ̄▽ ̄)╭</span>
+<span title="狗狗">U·ェ·*U </span>
+<span title="狗狗">U·ェ·U </span>
+<span title="鼓掌">””\\( ̄ー ̄) ( ̄ー ̄)//””</span>
+<span title="鼓掌">└( ̄  ̄└)(┘ ̄  ̄)┘</span>
+<span title="乖~">o(*^@^*)o</span>
+<span title="滚来滚去">……~(~o ̄▽ ̄)~o 。。。……o~(_△_o~) ~。。。</span>
+<span title="含泪挥手帕">(ToT)/~~~</span>
+<span title="好~~">o(*^▽^*)o </span>
+<span title="好吧">╮╯-╰╭"</span>
+<span title="好苦~">( >﹏<)</span>
+<span title="好香~~">(╯▽╰ )</span>
+<span title="好主意!">(o゜▽゜)o☆</span>
+<span title="喝西北风">( ′Д`)彡</span>
+<span title="河马">( ̄。。 ̄)</span>
+<span title="黑客帝国下腰!"> ┌(_Д_┌ )┐</span>
+<span title="黑客帝国下腰!"> ┌(_Д_┌ )┐</span>
+<span title="呼~幸好幸好……">ε=( ̄。 ̄;A</span>
+<span title="呼唤">(/0 ̄)o </span>
+<span title="坏人……"> ~( TロT)σ</span>
+<span title="幻影术!">((( ̄( ̄( ̄( ̄ー ̄) ̄) ̄) ̄))) </span>
+<span title="挥手帕">(@^^)/~~~</span>
+<span title="火箭筒,发射!">(* ̄皿 ̄)=Σ口>=Σ口>=Σ口></span>
+<span title="获胜者是……">ヾ( ̄ー ̄)X(^▽^)ゞ</span>
+<span title="击掌">(〃 ̄︶ ̄)人( ̄︶ ̄〃)</span>
+<span title="加油">o^^oo^^o</span>
+<span title="交通志愿老大妈指挥ing..."> (o^~^)尸"</span>
+<span title="金盾!">||┣(—_\) </span>
+<span title="就你!"><( ̄ ﹌  ̄)@m</span>
+<span title="就你好了~"> (@゜▽゜)</span>
+<span title="就是他!"> (@`д′)</span>
+<span title="举手">o(*^▽^*)┛</span>
+<span title="举手投降">┗( T﹏T )┛</span>
+<span title="嚼!">( ̄~ ̄)</span>
+<span title="卡拉OK"> ...φ(0 ̄*)啦啦啦_φ(* ̄0 ̄)′</span>
+<span title="看">(°ー°〃) </span>
+<span title="看好你哦!">(@^0^)</span>
+<span title="看我忍者镖!">( ‵▽′)ノ'卍卍卍卍卍卍 Σ(゜д゜;)</span>
+<span title="靠!什么东西?!"> ( `д′)</span>
+<span title="咳咳">><</span>
+<span title="苦恼"> ( -'`-; )</span>
+<span title="快使用双截棍,">┗(`o′)┓哼┏(`○′)┛哼┏(`o′)┓哈┗(`O′)┛兮!!</span>
+<span title="困,揉眼睛……">(o-ωq)).oO</span>
+<span title="啦啦啦">...φ(0 ̄*)_φ(* ̄0 ̄)></span>
+<span title="来啦~">(~o ̄▽ ̄)~o ~。。。</span>
+<span title="来人呐~">(o ;′Д`)ノ゛</span>
+<span title="冷笑">(  ̄ー ̄)</span>
+<span title="脸红掩面">(*/ω\*)</span>
+<span title="脸红掩面">(*/ω\*)</span>
+<span title="两罐纸星星">(*ˉ﹃ˉ)_☆☆</span>
+<span title="列队">(* ̄^ ̄(* ̄^ ̄(* ̄^ ̄)</span>
+<span title="铃铃铃">☆{{{Д}}} ☆!! </span>
+<span title="毛毛虫">(· ·)nnn </span>
+<span title="没办法~">╮( ̄▽ ̄")╭</span>
+<span title="没人在哦?">||o(*°ω°*)o|Ю </span>
+<span title="媚眼">ο(=·ω<=)ρ⌒☆</span>
+<span title="秘密">(一-一) </span>
+<span title="喵~">o( =∩ω∩= )m </span>
+<span title="喵~">>▽<</span>
+<span title="咩哈哈哈哈……"><(* ̄▽ ̄*)/</span>
+<span title="蔑视">( ̄_, ̄ )</span>
+<span title="命苦...">ε(┬┬﹏┬┬)3</span>
+<span title="摸摸头">(~ ̄▽ ̄)ノ</span>
+<span title="摸摸头">╰( ̄ω ̄o) </span>
+<span title="膜拜">_| ̄|○ → _|\○_ → _/\○_ → ____○_</span>
+<span title="墓">┏┛墓┗┓...(((m -__-)m</span>
+<span title="哪~里跑?!">(/// ̄皿 ̄)○~</span>
+<span title="那边那个">(﹁ ﹁ )σ</span>
+<span title="嗯!">ヾ(≧へ≦)〃</span>
+<span title="嗯!">o( ̄︶ ̄)n</span>
+<span title="嗯~">o(* ̄▽ ̄*)o</span>
+<span title="你!!">Σ(  ̄д ̄;)</span>
+<span title="你回来啦~~">ヾ(^▽^*)))</span>
+<span title="你你你……"> ~( TロT)σ</span>
+<span title="你你你……"> ~( TロT)σ</span>
+<span title="溺水">゜゜┌┴o゜゜゜゜°</span>
+<span title="念力~"> ( -人-)···-~=~≡~≡ ((+o+)))</span>
+<span title="念咒">((( (-h-) )))</span>
+<span title="念咒">……(((\( ̄一 ̄)/)))</span>
+<span title="捏耳朵!"><( ‵□′)>───Cε(┬﹏┬)3</span>
+<span title="怒">ε=怒ε=怒ε=怒ε=怒ε=( o`ω′)/</span>
+<span title="哦~">_( ̄0 ̄)_</span>
+<span title="啪叽~摔一跟头……">((o_ _)'彡☆</span>
+<span title="怕怕">━((*′д`)爻(′д`*))━!!!!</span>
+<span title="拍手">└( ̄  ̄└)(┘ ̄  ̄)┘</span>
+<span title="拍手拍手">””\\( ̄ー ̄) ( ̄ー ̄)//””</span>
+<span title="拍桌狂笑!">o(*≧▽≦)ツ┏━┓</span>
+<span title="飘飘然……">︿( ̄︶ ̄)︿</span>
+<span title="乒乓球">( ^o)ρ┳┻┳°σ(o^ ) </span>
+<span title="期待"> (☆▽☆)</span>
+<span title="起床">(o ̄Д ̄)<起床! ※=○☆(__*)Zzz</span>
+<span title="起床啦!">( *′д)/o(_ _)ozzZZ…</span>
+<span title="切~~">( ﹁ ﹁ ) ~~~</span>
+<span title="亲亲">o(* ̄3 ̄)o</span>
+<span title="亲亲">(*  ̄)( ̄▽ ̄*)ゞ</span>
+<span title="去去去~">(づ ̄ 3 ̄)づ...</span>
+<span title="去下厕厕……">∥WC||_·)╯</span>
+<span title="忍术~隐!"> ( ̄人 ̄)( ̄人:.;:…( ̄...:.;::..;::: .:;.…::;.:..:;.:...</span>
+<span title="撒花!">( ̄▽ ̄)o∠※PAN!=.:*:'☆.:*:'★':* </span>
+<span title="撒花!">*★,°*:.☆\( ̄▽ ̄)/$:*.°★* 。</span>
+<span title="散弹发射!!">▄︻┻┳═一∵∴∷∶∵ (∵_,∵)>>>></span>
+<span title="杀虫剂!">( ▼▼)/鹵〈 巛巛巛 ( ◎_x)/</span>
+<span title="闪人">(* ̄▽ ̄)( ̄▽:;.…::;.:.:::;..::;.:... </span>
+<span title="伤心">(;′⌒`)</span>
+<span title="蛇拳">z(-_-z)).....((s-_-)s</span>
+<span title="射箭">(  ̄ー ̄)——)-=======>-->></span>
+<span title="神啊~">\( ̄0 ̄)/</span>
+<span title="失落">(。_。) </span>
+<span title="石化">━━∑( ̄□ ̄*|||━━化</span>
+<span title="石化ing~">(ˉ▽ˉ;)...</span>
+<span title="视力表">┫♀旦 ̄)σ(呃……)</span>
+<span title="是不是你?!">(σ`д′)σ</span>
+<span title="是不是你?!">(σ`д′)σ</span>
+<span title="手榴弹!">σ~ (`′メ </span>
+<span title="手指戳戳">(~ ̄▽ ̄)→))* ̄▽ ̄*)o </span>
+<span title="手肘戳戳">o( ̄▽ ̄*)ゞ)) ̄▽ ̄*)o </span>
+<span title="衰">(′д` )…彡…彡</span>
+<span title="死亡中">(:D)┼─┤</span>
+<span title="太好笑了!!">……o((≧▽≦o)</span>
+<span title="太可怕了">ヽ(*。>Д<)o゜</span>
+<span title="逃命啊~~">\("▔□▔)/\("▔□▔)/ </span>
+<span title="陶醉">( *︾▽︾)</span>
+<span title="讨厌啦~">(ノω<。)ノ))☆.。</span>
+<span title="天旋地转">ヾ(   )ノ゛ヾ( °д)ノ゛ヾ(°д°)ノ゛ヾ(д° )ノ゛ヾ(  )ノ゛</span>
+<span title="天助我也~"> ヾ(*′▽`*)彡</span>
+<span title="挑衅"><(* ̄ー ̄)ゞ来呀~</span>
+<span title="挑衅"><(* ̄ー ̄)ゞ来啊~</span>
+<span title="偷看">(/ω\*)……… (/ω·\*) </span>
+<span title="偷看">(/ω·\*) </span>
+<span title="偷拍 ">Σ[ ◎ ]}ー′)</span>
+<span title="怒">凸艹皿艹</span>
+<span title="靠">凸゜皿゜メ</span>
+<span title="吐">( >ρ < ”)</span>
+<span title="推推~起床啦!">(o ̄ω ̄)○))o(__*)Zzz</span>
+<span title="拖走">ヽ(゜▽゜ )-C<(/;◇;)/~</span>
+<span title="哇卡卡卡卡卡……">o((≧▽≦o) 太好笑了!!</span>
+<span title="哇咧!">Σ(⊙▽⊙"a...</span>
+<span title="挖鼻屎"> (* ̄rǒ ̄)</span>
+<span title="万岁!">*★,°*:.☆\( ̄▽ ̄)/$:*.°★* 。</span>
+<span title="围观!">(← ← )</span>
+<span title="围观!">( → →) </span>
+<span title="畏罪自杀…">…〒_〒…‵o′-一┳═┻︻▄</span>
+<span title="喂!">(#`O′)</span>
+<span title="喂饭">( *^-^)ρ(^0^* )</span>
+<span title="吻别">(* ̄;( ̄ *)</span>
+<span title="我?">σ(· ·?)</span>
+<span title="我不看……">(/▽\)</span>
+<span title="我错了……">(。﹏。*)</span>
+<span title="我回来啦~">||ヽ(* ̄▽ ̄*)ノミ|Ю</span>
+<span title="我来了~">(~ ̄▽ ̄)~</span>
+<span title="我忍!">o(-"-;) </span>
+<span title="我闪!">|(·_·) |·_·) |_·) |·) | )</span>
+<span title="握拳!">o( ̄ヘ ̄o* )</span>
+<span title="握拳!">o( ̄ヘ ̄o#)</span>
+<span title="呜呜呜……">( >﹏<。)~</span>
+<span title="无敌!">↑↑↓↓←→←→BA...┗( -o-)┛</span>
+<span title="无敌弹簧拳!">( ‵Д′)=○))~~~~~~Ю))>o<)/ </span>
+<span title="无敌幻影脚!">ヽ(ヽ `д′)ヽ`д′)ヽ`д′)┌┛┌┛┌┛★)`з゜)y</span>
+<span title="无敌捏脸功!"><( ‵□′)───C<─___-)|| </span>
+<span title="无敌肉包拳!">(o  ̄3)==@))゜ロ゜((@==(′ε′ )o </span>
+<span title="无敌肉包拳!">(o  ̄3)==@))゜ロ゜((@==(′ε′ )o</span>
+<span title="无敌影分身!">((≧(≧▽(≧▽≦(≧▽≦)≧▽≦)▽≦)≦))) </span>
+<span title="无力扶墙..."> ( _ _)ノ|壁</span>
+<span title="无奈">╮(╯-╰)╭ </span>
+<span title="无影脚!"><(  ̄︿ ̄)︵θ︵θ︵θ︵θ︵☆(>口<-)</span>
+<span title="无影脚!"><(  ̄︿ ̄)︵θ︵θ︵θ︵θ︵☆(>口<-)</span>
+<span title="享受">(╯▽╰ ) </span>
+<span title="消失">(* ̄□ ̄)( ̄□:;.…::;.:.:::;..::;.:...</span>
+<span title="小新"><( ̄︶ ̄)↗</span>
+<span title="邪恶">( ‵▽′)ψ</span>
+<span title="谢啦!!">☆⌒(*^-゜)v </span>
+<span title="心神不宁...">(゜゜ )(。。)(゜゜ )(。。)</span>
+<span title="欣慰">( ╯▽╰)</span>
+<span title="要">不>( ̄ε ̄ =  ̄3 ̄)<</span>
+<span title="噎死">( *⊙~⊙) </span>
+<span title="噎住">( *⊙~⊙) </span>
+<span title="隐身!">(* ̄□ ̄)( ̄□:;.…::;.:.:::;..::;.:...</span>
+<span title="鹰钩鼻">( ̄ム ̄) </span>
+<span title="哟西!">(9 ̄^ ̄)9</span>
+<span title="有了!">(o゜▽゜)o☆</span>
+<span title="有人吗?">||o(*°▽°*)o|Ю </span>
+<span title="御风_凌"></span>
+<span title="怨.念....">o(一︿一+)o</span>
+<span title="运动">╔囧╗╔囧╝╚囧╝╚囧╗</span>
+<span title="晕!">@o@"</span>
+<span title="糟糕!">X﹏X</span>
+<span title="早安呀~~~"> o(* ̄▽ ̄*)ブ</span>
+<span title="早点回来哦~">(~ ̄(OO) ̄)ブ</span>
+<span title="炸弹!">(╯‵□′)╯···*~●</span>
+<span title="斩!!">ˋ( ° ▽、° ) (o( ̄▽ ̄///</span>
+<span title="涨">( ̄︶ ̄)↗</span>
+<span title="这个……呃~~">-______-"</span>
+<span title="真哒?!"> o(〃'▽'〃)o</span>
+<span title="真空波动拳!">( `o′){ ···-=≡))</span>
+<span title="真空波动拳!">( `o′){ ···-=≡))</span>
+<span title="振奋">(o>ε(o>u(≧∩≦) </span>
+<span title="振作!">━━(o_ _)o━━(o―_―)o━━(9 ̄ー ̄)9</span>
+<span title="痣长毛">( ゜,_ゝ゜) </span>
+<span title="皱眉">(-"-)</span>
+<span title="抓狂">o((>ω< ))o</span>
+<span title="抓狂">o(>@<)o</span>
+<span title="足球">( · ·)L☆ .....○ 冂 </span>
+<span title="醉拳">ヨロ (*~▽~)ノ ヨロ ヽ(~▽~*)ヨロ (*~▽~)―〇 ☆ バシ ))>口<)</span>
+<p style="display: block; float: left; margin-top: 25px; margin-bottom: -40px;">&copy; 2010 @ag108lau<br>Thanks @OnlyTiny<br />
+Last Update: 2010-11-13
 </p>
\ No newline at end of file
diff --git a/inc/symbols.php b/inc/symbols.php
deleted file mode 100644 (file)
index 60959dd..0000000
+++ /dev/null
@@ -1,489 +0,0 @@
-<span title=" 嗷~~">┗|`O′|┛</span>\r
-<span title="~你给我回来!">o(°▽、°o)....+(( ̄﹏ ̄m )</span>\r
-<span title="“不明真相的围观群众”">槑槑槑槑呆槑槑槑槑槑槑槑槑……</span>\r
-<span title="『家』">~o(▽` o) =3 =3 =3</span>\r
-<span title="【TEL】"><铃铃铃~ヾ( ̄  ̄*)==3=3=3</span>\r
-<span title="【小黑屋】">ヽ( ̄︿ ̄ )—C<(/;◇;)/ </span>\r
-<span title="555~他不起来……">ヾ( ┬o┬)┌θθθθ(;;_ _).o○</span>\r
-<span title="aaa">o((>ω< ))o</span>\r
-<span title="aaa">o(≧口≦)o</span>\r
-<span title="ai">╮( ̄▽ ̄")╭ </span>\r
-<span title="bai">m(_ _)m</span>\r
-<span title="bai">ヾ( ̄▽ ̄)Bye~Bye~</span>\r
-<span title="baotou">▄︻┻┳═一…… ☆(>○<)</span>\r
-<span title="baoxiao">o(*≧▽≦)ツ</span>\r
-<span title="baoxiao">ヾ(≧▽≦*)o</span>\r
-<span title="bengkui">o(≧口≦)o</span>\r
-<span title="BINGO!">(o゜▽゜)o☆</span>\r
-<span title="biti">( ̄ ‘i  ̄;)</span>\r
-<span title="biti">( ̄ ii  ̄;) ( ̄" ̄;)</span>\r
-<span title="bizui">(⊙x⊙;)</span>\r
-<span title="bo">(*^ ^*)(^ *)</span>\r
-<span title="bqlz">(◎_x)</span>\r
-<span title="buhaoyisi">o( ̄┰ ̄*)ゞ</span>\r
-<span title="buyao">°.°·(((p(≧□≦)q)))·°.°。</span>\r
-<span title="canle">X﹏X 惨了!</span>\r
-<span title="chaoxiao">q(≧▽≦q)</span>\r
-<span title="chouyan">( ̄ c ̄)y▂ξ。。。</span>\r
-<span title="chuai"><(  ̄^ ̄)(θ(θ☆( >_< </span>\r
-<span title="dai">( ̄△ ̄;)</span>\r
-<span title="dai">( ̄旦 ̄;)</span>\r
-<span title="dai">━┳━ ━┳━</span>\r
-<span title="dao">Σ(`д′*ノ)ノ</span>\r
-<span title="dao">Σ(っ °Д °;)っ</span>\r
-<span title="dese">~( ̄▽ ̄~)(~ ̄▽ ̄)~</span>\r
-<span title="deyi"><( ̄ˇ ̄)/</span>\r
-<span title="duo">┬┴┤_·)</span>\r
-<span title="e">("▔□▔)</span>\r
-<span title="e">(⊙﹏⊙)</span>\r
-<span title="e">-________-''</span>\r
-<span title="e">o(` · ~ · ′。)o</span>\r
-<span title="EXIT">______λ......_____</span>\r
-<span title="EXIT">λ…λλ…λ…λλλ…</span>\r
-<span title="fangp">○| ̄|_ =3</span>\r
-<span title="fanzhuo">(╯′□`)╯ ┫:·'∵:.┻┻:·'.:┣∵·:. ┳┳☆</span>\r
-<span title="fanzhuo">(╯‵□′)╯""┻━┻☆))>○<)</span>\r
-<span title="fanzhuo">┻━┻︵╰(‵□′)╯︵┻━┻ </span>\r
-<span title="fei">︿( ̄︶ ̄)︿</span>\r
-<span title="fen">ヾ(≧奋≦)〃</span>\r
-<span title="fk">French (* ̄( ̄ *) Kiss!</span>\r
-<span title="fufu">( ̄ˇ ̄)v</span>\r
-<span title="fufu">fufu~ ^u^</span>\r
-<span title="gaozhuang">( σ'ω')σ </span>\r
-<span title="gaozhuang">o(>O<;; )σ</span>\r
-<span title="gfw">┳G┻┳F┳┻W┫</span>\r
-<span title="GiveMeFive!">(┘ ̄︶ ̄)┘└( ̄︶ ̄└)</span>\r
-<span title="GO!"><( ̄︶ ̄)↗</span>\r
-<span title="GO!"><( ̄OO, ̄)/</span>\r
-<span title="good">Good! o( ̄▽ ̄)d</span>\r
-<span title="gudan">______λ......_____</span>\r
-<span title="guilian">( ̄┰ ̄*)</span>\r
-<span title="ha">(#°Д°) </span>\r
-<span title="ha">O口O!</span>\r
-<span title="ha">Σ(⊙▽⊙"a...</span>\r
-<span title="haha">o(*≧▽≦)ツ</span>\r
-<span title="han">( ̄_ ̄|||)</span>\r
-<span title="han">( ̄▽ ̄")</span>\r
-<span title="han">(寒 ̄ii ̄)彡…彡…彡</span>\r
-<span title="hehe">o(* ̄▽ ̄*)o</span>\r
-<span title="heiban">【】\(·ω·`)o</span>\r
-<span title="heihei">o(* ̄▽ ̄*)ゞ</span>\r
-<span title="heng">( -з)</span>\r
-<span title="heng">(;′⌒`)</span>\r
-<span title="heng">(ε- )</span>\r
-<span title="heng">o( ̄ヘ ̄o#) </span>\r
-<span title="hh">( ̄▽ ̄")</span>\r
-<span title="hh">o(* ̄▽ ̄*)o</span>\r
-<span title="hhh">^-^</span>\r
-<span title="hhh">^O^</span>\r
-<span title="hi">Hi~ o(* ̄▽ ̄*)ブ</span>\r
-<span title="Hi~Hitler!">( ·_·)ノ_·)ノ_·)ノ_·)ノ_·)ノ</span>\r
-<span title="hiahia">○( ^皿^)っHiahiahia.... </span>\r
-<span title="hoho">( ̄y▽ ̄)╭ Ohohoho.....</span>\r
-<span title="hoho">hoho ^O^</span>\r
-<span title="huhu">(_ _)。゜zzZ</span>\r
-<span title="jing">Σ( ° △ °|||)︴</span>\r
-<span title="jing">Σ(`д′*ノ)ノ</span>\r
-<span title="jing">Σ(っ °Д °;)っ</span>\r
-<span title="jirou">┗|*`0′*|┛</span>\r
-<span title="jiujie">( -'`-; ) </span>\r
-<span title="jiujie">o(′益`)o</span>\r
-<span title="jizhang">(  ̄ー ̄)人(^▽^ )</span>\r
-<span title="keai">n(*≧▽≦*)n</span>\r
-<span title="kedou">(°°)~ (°°)~ (°°)~ (°°)~</span>\r
-<span title="Kiss!"> (* ̄( ̄ *)</span>\r
-<span title="koushui">ˋ( ° ▽、° ) 口水ing...</span>\r
-<span title="K歌"> ...φ(0 ̄*)啦啦啦_φ(* ̄0 ̄)></span>\r
-<span title="laohu">m( =∩王∩= )m</span>\r
-<span title="lei">(┳_┳)...</span>\r
-<span title="lei">/(ㄒoㄒ)/~~</span>\r
-<span title="luanma">卐~%?…,# *'☆&℃$︿★?</span>\r
-<span title="manzu">o(* ̄︶ ̄*)o</span>\r
-<span title="manzu">o( ̄ˇ ̄)o</span>\r
-<span title="mao">o( =·ω·= )m </span>\r
-<span title="mao">o(=·ェ·=)m</span>\r
-<span title="max">MIN■■■■■□□MAX</span>\r
-<span title="miehhh">(/ ̄ˇ ̄)/</span>\r
-<span title="mimi">(。人。) </span>\r
-<span title="mmm">mmm...f('︶︿︶)o</span>\r
-<span title="mmm">mmm.....</span>\r
-<span title="mojiezuo">Capricorn</span>\r
-<span title="mua">mua! (*╯3╰)</span>\r
-<span title="niao">--\(˙<>˙)/--</span>\r
-<span title="nie">~( ̄▽ ̄)~* </span>\r
-<span title="nu">(#‵′) </span>\r
-<span title="nu">(o#゜ 曲゜)o</span>\r
-<span title="nu">MIN■■■■■□□MAX(╯‵□′)╯︵┻━┻</span>\r
-<span title="nu">ε=怒ε=怒ε=怒ε=怒ε=( o`ω′)ノ</span>\r
-<span title="o">(⊙o⊙)?</span>\r
-<span title="ohno">Oh~ no!!!!</span>\r
-<span title="ohye">Oh yeah!\(^&^)/</span>\r
-<span title="ok">OK</span>\r
-<span title="paidui">λ…λλ…λ…入λλ…</span>\r
-<span title="pao">ε = = (づ′▽`)づ</span>\r
-<span title="pao">ε=ε=ε=(~ ̄▽ ̄)~</span>\r
-<span title="pao">ヾ(*′▽`*)ノ彡☆ノヽノヽノヽ</span>\r
-<span title="pdr">ヾ(′▽`* )ノ~</span>\r
-<span title="pia">( ̄ε(# ̄)☆╰╮o( ̄▽ ̄///) </span>\r
-<span title="pia">Pia!(o ‵-′)ノ”(ノ﹏<。)</span>\r
-<span title="piao">(~ ̄▽ ̄)~</span>\r
-<span title="piao">(~o ̄3 ̄)~</span>\r
-<span title="piao">.....((/- -)/</span>\r
-<span title="qiang">▄︻┻┳═一……</span>\r
-<span title="qie">(ˉ▽ ̄~) 切~~</span>\r
-<span title="qing">( ^ ^) _U~~</span>\r
-<span title="quan">(╬ ̄皿 ̄)=○#( ̄#)3 ̄)</span>\r
-<span title="quan">(Д゜(○=(゜ 皿゜)=○)゜Д゜)</span>\r
-<span title="shengqi"><(-︿-)></span>\r
-<span title="shy">shy~ o(*////▽////*)q</span>\r
-<span title="sigh">( ′ 3`) sigh~</span>\r
-<span title="S奥特曼">三三三三三三三三三4(o|o ) </span>\r
-<span title="S小孩!"> (o ‵-′)ノ”(ノ_<。)</span>\r
-<span title="t"><(  ̄^ ̄)(θ(θ☆( >_< </span>\r
-<span title="tanshou">╮( ╯ 3 ╰ )╭</span>\r
-<span title="tanshou">╮( ̄▽ ̄")╭ </span>\r
-<span title="tanshou">╮(╯-╰)╭</span>\r
-<span title="tanshou">ㄟ( ▔, ▔ )ㄏ</span>\r
-<span title="tao">ε=ε=┏( >_<)┛</span>\r
-<span title="tao">ε=ε=ε=┏(゜ロ゜;)┛ </span>\r
-<span title="tao">ε=ε=ε=ε=ヽ(* ̄o ̄)ノ</span>\r
-<span title="tat">o(≧∩≦)o</span>\r
-<span title="tat">o(TヘTo)</span>\r
-<span title="thx">☆⌒(*^-゜)v THX!!</span>\r
-<span title="toukui">|壁|_☆)</span>\r
-<span title="toukui">┬┴┤_·)</span>\r
-<span title="touxiang">n(→_←)┛</span>\r
-<span title="touxiang">o( >﹏<。)┛</span>\r
-<span title="tun">0^)吞!</span>\r
-<span title="tushetou">( ̄┰ ̄*)</span>\r
-<span title="wa">(PД`q。)·。'゜</span>\r
-<span title="wakkk"><( ̄▽ ̄)/</span>\r
-<span title="wc">∥wc∥ o(- -o) =з =з =з</span>\r
-<span title="weiguan">(﹁"﹁)</span>\r
-<span title="weiqu">╥﹏╥...</span>\r
-<span title="wo">σ(⌒ー⌒)</span>\r
-<span title="woniu">@/"</span>\r
-<span title="wow">wow~⊙o⊙</span>\r
-<span title="xiaoxin">ㄟ( ▔, ▔ )ㄏ</span>\r
-<span title="xiey">( ﹁ ﹁ ) ~→</span>\r
-<span title="xiey">( ̄. ̄)+</span>\r
-<span title="xiey">(﹁"﹁)</span>\r
-<span title="xiezi">...ψ(。。 )</span>\r
-<span title="xingfu">o(* ̄▽ ̄*)o</span>\r
-<span title="xiong">(* ̄(エ) ̄)</span>\r
-<span title="xiong">(+(工)+╬)</span>\r
-<span title="xiu">o(*////▽////*)q</span>\r
-<span title="xiu">p(# ̄▽ ̄#)o</span>\r
-<span title="xxoo">卐~%?…,# *'☆&℃$︿★?……</span>\r
-<span title="xxoo">╳╳○○</span>\r
-<span title="y">(* ̄︶ ̄)y</span>\r
-<span title="y">(* ̄▽ ̄)y</span>\r
-<span title="y">^_^)y</span>\r
-<span title="yanshen">━┳━ ━┳━</span>\r
-<span title="yanwenzi">ag108lau</span>\r
-<span title="yessir">Yes,sir! <( ̄O ̄)/</span>\r
-<span title="yiqi">╭(′▽`)╭(′▽`)╯</span>\r
-<span title="yiqi">ヽ( ̄ω ̄( ̄ω ̄〃)ゝ</span>\r
-<span title="yo">(^U^)ノ~YO </span>\r
-<span title="yu">>°)))>彡</span>\r
-<span title="yun">(((φ(◎ロ◎;)φ)))</span>\r
-<span title="zhaoxiang">Σ[ ◎ ]}</span>\r
-<span title="zhi"><( ̄ ﹌  ̄)@m</span>\r
-<span title="zhu">^(* ̄(oo) ̄)^</span>\r
-<span title="zhua">W( ̄_ ̄)W</span>\r
-<span title="zhuangqiang">┳G┻F┳W┫☆(ノ﹏<。)</span>\r
-<span title="zhuisha">--==≡≡〈〈《( / ̄皿 ̄)=O));>o<)/</span>\r
-<span title="zuomeng">ZZzz…(。-ω-)..ooO((【·:*:~夢~:*:·】))</span>\r
-<span title="哎哟哟……">( ̄y▽, ̄)╭ </span>\r
-<span title="安安啦~~~"> o(* ̄▽ ̄*)ブ</span>\r
-<span title="凹凸曼……">(o|o)</span>\r
-<span title="嗷~">ヾ(≧O≦)〃</span>\r
-<span title="奥特曼……">(o|o) </span>\r
-<span title="拜佛">(-人-) </span>\r
-<span title="拜托啦……">(^人^)</span>\r
-<span title="包在我身上!">ヾ(′▽`*)ゝ</span>\r
-<span title="包在我身上!">ヾ(′▽`*)ゝ</span>\r
-<span title="抱抱">━((*′ ▽`)爻(′▽`*))━!!!</span>\r
-<span title="抱抱">━((*′д`)爻(′д`*))━!!!!</span>\r
-<span title="抱抱~">\( ̄︶ ̄)/</span>\r
-<span title="抱抱~">\( ̄︶ ̄*\))</span>\r
-<span title="鼻毛">(′゜c_,゜` ) </span>\r
-<span title="鄙视你!">╭∩╮(︶︿︶)╭∩╮</span>\r
-<span title="壁">(  ̄  ̄)σ…( _ _)ノ|</span>\r
-<span title="壁">(  ̄  ̄)σ…( _ _)ノ|</span>\r
-<span title="壁">ノ ̄ー ̄)ノ ⌒ >┼○"☆||</span>\r
-<span title="便秘">o(′益`)o </span>\r
-<span title="辫子">§(* ̄▽ ̄*)§</span>\r
-<span title="表!"><( ̄3 ̄)> </span>\r
-<span title="别走啊~~">______λ......___丬</span>\r
-<span title="瘪嘴">(* ̄︿ ̄) </span>\r
-<span title="冰天雪地掩面泪奔……">(PД`q。)·。'゜</span>\r
-<span title="啵啵">(*  ̄3)(ε ̄ *) </span>\r
-<span title="不吃!">( *^-^)ρ(*╯^╰)</span>\r
-<span title="不懂">(@_@;)? </span>\r
-<span title="不满">(* ̄︿ ̄) </span>\r
-<span title="不是我干的">ㄟ( ▔, ▔ )ㄏ </span>\r
-<span title="不屑">( ̄_, ̄ )</span>\r
-<span title="擦眼泪……">(ノへ ̄、)</span>\r
-<span title="财神爷">(o′┏▽┓`o) </span>\r
-<span title="草泥马">( ·ェ·)(·ェ· )</span>\r
-<span title="蹭">(*≧︶≦))( ̄▽ ̄* )ゞ</span>\r
-<span title="蹭">( * ̄▽ ̄)((≧︶≦*) </span>\r
-<span title="叉腰"><)。(> </span>\r
-<span title="超强风扇吹">ε~( ~( ~ ( 卍 )\( ̄▽ ̄ \)</span>\r
-<span title="超远程BB枪!">(# ̄□ ̄)o―∈‥oo━━━━━━━☆ </span>\r
-<span title="車">●┻┓⌒ Σ┌┘車└┐=3 =3 =3</span>\r
-<span title="吃饭去鸟">.....(((((ヾ( o=^·ェ·)o ┏━┓</span>\r
-<span title="吃我一鞭!">( `0‘)ノ~~~~~~~~~ν</span>\r
-<span title="吃药">(。>︿<)_θ</span>\r
-<span title="冲出!!">___*\(  ̄皿 ̄)/#____</span>\r
-<span title="抽!!">( ̄ε(# ̄)☆╰╮( ̄▽ ̄///)</span>\r
-<span title="抽泣">(ノへ ̄、)</span>\r
-<span title="抽泣">(ノへ ̄、)</span>\r
-<span title="臭蚊子!">Pia!(o ‵-′)ノ” </span>\r
-<span title="穿墙过去!">ε=ε┣G┻F┳ε=ヽ(* ̄▽ ̄)ノ┻W┫</span>\r
-<span title="戳">→)╥﹏╥) </span>\r
-<span title="赐予你力量!">( * ̄▽ ̄)o ─═≡※:☆▆▅▄▃▂_</span>\r
-<span title="打呵欠">(_ _)( - . - )(~O~) ……( - . - ) </span>\r
-<span title="大鼻子">(′台` ) </span>\r
-<span title="呆滞"> ━┳━ ━┳━</span>\r
-<span title="淡定">━━( ̄ー ̄*|||━━</span>\r
-<span title="当然!"><(ˉ^ˉ)></span>\r
-<span title="刀疤">(-_-メ)</span>\r
-<span title="等等我…我……我…………">...(* ̄0 ̄)ノ</span>\r
-<span title="低落"> (#`-_ゝ-)</span>\r
-<span title="低头">(。﹏。) </span>\r
-<span title="低头">(。_。) </span>\r
-<span title="点头">( ̄ー ̄(_ _( ̄ー ̄(_ _ </span>\r
-<span title="跌">(┬_┬)↘ </span>\r
-<span title="顶!">d=====( ̄▽ ̄*)b </span>\r
-<span title="动感光波">!!!(  ̄O ̄)ノノ……∞∞OOO)))</span>\r
-<span title="动感光波">!!!(  ̄O ̄)ノノ……∞∞OOO)))</span>\r
-<span title="抖">o((⊙﹏⊙))o. </span>\r
-<span title="嘟嘴">o( ̄ε ̄*) </span>\r
-<span title="嘟嘴">(○` 3′○) </span>\r
-<span title="对不起~"> <(_ _)></span>\r
-<span title="呃~被发现了......">(ˉ▽ˉ;)</span>\r
-<span title="呃~我……">σ(-_-メ)</span>\r
-<span title="翻桌!">(╯‵□′)╯︵┻━┻</span>\r
-<span title="防御!">(((\( ̄一 ̄)/)))</span>\r
-<span title="放我出去~~~"> ||Φ|(|T|Д|T|)|Φ|| </span>\r
-<span title="飞吻"> (* ̄3 ̄)╭</span>\r
-<span title="分裂">>( ̄▽ ̄ =  ̄︿ ̄)<</span>\r
-<span title="风魔法!"> (/-_-)/ξ ξ ξ ξ ξ ξ (+_+ /)/~~~</span>\r
-<span title="去去去~">乀ˉεˉ乀...</span>\r
-<span title="扶眼镜">(-@y@) </span>\r
-<span title="扶眼镜">(-@y@) </span>\r
-<span title="复活!">...:.;::..;::: .:.;::….;: ̄)…:.;:□ ̄)( ̄□ ̄*)</span>\r
-<span title="嘎~嘎~嘎~">.<{=....</span>\r
-<span title="干杯">( ̄▽ ̄)~■□~( ̄▽ ̄)</span>\r
-<span title="干杯!">~( ̄▽ ̄)~* </span>\r
-<span title="感动!">o(*≧▽≦*)m</span>\r
-<span title="高~实在是高!">(* ̄▽)u┌┐ d(▽ ̄*)</span>\r
-<span title="告状">(′д`σ)σ </span>\r
-<span title="跟你说厚~">╰( ̄▽ ̄)╭</span>\r
-<span title="狗狗">U·ェ·*U </span>\r
-<span title="狗狗">U·ェ·U </span>\r
-<span title="鼓掌">””\\( ̄ー ̄) ( ̄ー ̄)//””</span>\r
-<span title="鼓掌">└( ̄  ̄└)(┘ ̄  ̄)┘</span>\r
-<span title="乖~">o(*^@^*)o</span>\r
-<span title="滚来滚去">……~(~o ̄▽ ̄)~o 。。。……o~(_△_o~) ~。。。</span>\r
-<span title="含泪挥手帕">(ToT)/~~~</span>\r
-<span title="好~~">o(*^▽^*)o </span>\r
-<span title="好吧">╮╯-╰╭"</span>\r
-<span title="好苦~">( >﹏<)</span>\r
-<span title="好香~~">(╯▽╰ )</span>\r
-<span title="好主意!">(o゜▽゜)o☆</span>\r
-<span title="喝西北风">( ′Д`)彡</span>\r
-<span title="河马">( ̄。。 ̄)</span>\r
-<span title="黑客帝国下腰!"> ┌(_Д_┌ )┐</span>\r
-<span title="黑客帝国下腰!"> ┌(_Д_┌ )┐</span>\r
-<span title="呼~幸好幸好……">ε=( ̄。 ̄;A</span>\r
-<span title="呼唤">(/0 ̄)o </span>\r
-<span title="坏人……"> ~( TロT)σ</span>\r
-<span title="幻影术!">((( ̄( ̄( ̄( ̄ー ̄) ̄) ̄) ̄))) </span>\r
-<span title="挥手帕">(@^^)/~~~</span>\r
-<span title="火箭筒,发射!">(* ̄皿 ̄)=Σ口>=Σ口>=Σ口></span>\r
-<span title="获胜者是……">ヾ( ̄ー ̄)X(^▽^)ゞ</span>\r
-<span title="击掌">(〃 ̄︶ ̄)人( ̄︶ ̄〃)</span>\r
-<span title="加油">o^^oo^^o</span>\r
-<span title="交通志愿老大妈指挥ing..."> (o^~^)尸"</span>\r
-<span title="金盾!">||┣(—_\) </span>\r
-<span title="就你!"><( ̄ ﹌  ̄)@m</span>\r
-<span title="就你好了~"> (@゜▽゜)</span>\r
-<span title="就是他!"> (@`д′)</span>\r
-<span title="举手">o(*^▽^*)┛</span>\r
-<span title="举手投降">┗( T﹏T )┛</span>\r
-<span title="嚼!">( ̄~ ̄)</span>\r
-<span title="卡拉OK"> ...φ(0 ̄*)啦啦啦_φ(* ̄0 ̄)′</span>\r
-<span title="看">(°ー°〃) </span>\r
-<span title="看好你哦!">(@^0^)</span>\r
-<span title="看我忍者镖!">( ‵▽′)ノ'卍卍卍卍卍卍 Σ(゜д゜;)</span>\r
-<span title="靠!什么东西?!"> ( `д′)</span>\r
-<span title="咳咳">><</span>\r
-<span title="苦恼"> ( -'`-; )</span>\r
-<span title="快使用双截棍,">┗(`o′)┓哼┏(`○′)┛哼┏(`o′)┓哈┗(`O′)┛兮!!</span>\r
-<span title="困,揉眼睛……">(o-ωq)).oO</span>\r
-<span title="啦啦啦">...φ(0 ̄*)_φ(* ̄0 ̄)></span>\r
-<span title="来啦~">(~o ̄▽ ̄)~o ~。。。</span>\r
-<span title="来人呐~">(o ;′Д`)ノ゛</span>\r
-<span title="冷笑">(  ̄ー ̄)</span>\r
-<span title="脸红掩面">(*/ω\*)</span>\r
-<span title="脸红掩面">(*/ω\*)</span>\r
-<span title="两罐纸星星">(*ˉ﹃ˉ)_☆☆</span>\r
-<span title="列队">(* ̄^ ̄(* ̄^ ̄(* ̄^ ̄)</span>\r
-<span title="铃铃铃">☆{{{Д}}} ☆!! </span>\r
-<span title="毛毛虫">(· ·)nnn </span>\r
-<span title="没办法~">╮( ̄▽ ̄")╭</span>\r
-<span title="没人在哦?">||o(*°ω°*)o|Ю </span>\r
-<span title="媚眼">ο(=·ω<=)ρ⌒☆</span>\r
-<span title="秘密">(一-一) </span>\r
-<span title="喵~">o( =∩ω∩= )m </span>\r
-<span title="喵~">>▽<</span>\r
-<span title="咩哈哈哈哈……"><(* ̄▽ ̄*)/</span>\r
-<span title="蔑视">( ̄_, ̄ )</span>\r
-<span title="命苦...">ε(┬┬﹏┬┬)3</span>\r
-<span title="摸摸头">(~ ̄▽ ̄)ノ</span>\r
-<span title="摸摸头">╰( ̄ω ̄o) </span>\r
-<span title="膜拜">_| ̄|○ → _|\○_ → _/\○_ → ____○_</span>\r
-<span title="墓">┏┛墓┗┓...(((m -__-)m</span>\r
-<span title="哪~里跑?!">(/// ̄皿 ̄)○~</span>\r
-<span title="那边那个">(﹁ ﹁ )σ</span>\r
-<span title="嗯!">ヾ(≧へ≦)〃</span>\r
-<span title="嗯!">o( ̄︶ ̄)n</span>\r
-<span title="嗯~">o(* ̄▽ ̄*)o</span>\r
-<span title="你!!">Σ(  ̄д ̄;)</span>\r
-<span title="你回来啦~~">ヾ(^▽^*)))</span>\r
-<span title="你你你……"> ~( TロT)σ</span>\r
-<span title="你你你……"> ~( TロT)σ</span>\r
-<span title="溺水">゜゜┌┴o゜゜゜゜°</span>\r
-<span title="念力~"> ( -人-)···-~=~≡~≡ ((+o+)))</span>\r
-<span title="念咒">((( (-h-) )))</span>\r
-<span title="念咒">……(((\( ̄一 ̄)/)))</span>\r
-<span title="捏耳朵!"><( ‵□′)>───Cε(┬﹏┬)3</span>\r
-<span title="怒">ε=怒ε=怒ε=怒ε=怒ε=( o`ω′)/</span>\r
-<span title="哦~">_( ̄0 ̄)_</span>\r
-<span title="啪叽~摔一跟头……">((o_ _)'彡☆</span>\r
-<span title="怕怕">━((*′д`)爻(′д`*))━!!!!</span>\r
-<span title="拍手">└( ̄  ̄└)(┘ ̄  ̄)┘</span>\r
-<span title="拍手拍手">””\\( ̄ー ̄) ( ̄ー ̄)//””</span>\r
-<span title="拍桌狂笑!">o(*≧▽≦)ツ┏━┓</span>\r
-<span title="飘飘然……">︿( ̄︶ ̄)︿</span>\r
-<span title="乒乓球">( ^o)ρ┳┻┳°σ(o^ ) </span>\r
-<span title="期待"> (☆▽☆)</span>\r
-<span title="起床">(o ̄Д ̄)<起床! ※=○☆(__*)Zzz</span>\r
-<span title="起床啦!">( *′д)/o(_ _)ozzZZ…</span>\r
-<span title="切~~">( ﹁ ﹁ ) ~~~</span>\r
-<span title="亲亲">o(* ̄3 ̄)o</span>\r
-<span title="亲亲">(*  ̄)( ̄▽ ̄*)ゞ</span>\r
-<span title="去去去~">(づ ̄ 3 ̄)づ...</span>\r
-<span title="去下厕厕……">∥WC||_·)╯</span>\r
-<span title="忍术~隐!"> ( ̄人 ̄)( ̄人:.;:…( ̄...:.;::..;::: .:;.…::;.:..:;.:...</span>\r
-<span title="撒花!">( ̄▽ ̄)o∠※PAN!=.:*:'☆.:*:'★':* </span>\r
-<span title="撒花!">*★,°*:.☆\( ̄▽ ̄)/$:*.°★* 。</span>\r
-<span title="散弹发射!!">▄︻┻┳═一∵∴∷∶∵ (∵_,∵)>>>></span>\r
-<span title="杀虫剂!">( ▼▼)/鹵〈 巛巛巛 ( ◎_x)/</span>\r
-<span title="闪人">(* ̄▽ ̄)( ̄▽:;.…::;.:.:::;..::;.:... </span>\r
-<span title="伤心">(;′⌒`)</span>\r
-<span title="蛇拳">z(-_-z)).....((s-_-)s</span>\r
-<span title="射箭">(  ̄ー ̄)——)-=======>-->></span>\r
-<span title="神啊~">\( ̄0 ̄)/</span>\r
-<span title="失落">(。_。) </span>\r
-<span title="石化">━━∑( ̄□ ̄*|||━━化</span>\r
-<span title="石化ing~">(ˉ▽ˉ;)...</span>\r
-<span title="视力表">┫♀旦 ̄)σ(呃……)</span>\r
-<span title="是不是你?!">(σ`д′)σ</span>\r
-<span title="是不是你?!">(σ`д′)σ</span>\r
-<span title="手榴弹!">σ~ (`′メ </span>\r
-<span title="手指戳戳">(~ ̄▽ ̄)→))* ̄▽ ̄*)o </span>\r
-<span title="手肘戳戳">o( ̄▽ ̄*)ゞ)) ̄▽ ̄*)o </span>\r
-<span title="衰">(′д` )…彡…彡</span>\r
-<span title="死亡中">(:D)┼─┤</span>\r
-<span title="太好笑了!!">……o((≧▽≦o)</span>\r
-<span title="太可怕了">ヽ(*。>Д<)o゜</span>\r
-<span title="逃命啊~~">\("▔□▔)/\("▔□▔)/ </span>\r
-<span title="陶醉">( *︾▽︾)</span>\r
-<span title="讨厌啦~">(ノω<。)ノ))☆.。</span>\r
-<span title="天旋地转">ヾ(   )ノ゛ヾ( °д)ノ゛ヾ(°д°)ノ゛ヾ(д° )ノ゛ヾ(  )ノ゛</span>\r
-<span title="天助我也~"> ヾ(*′▽`*)彡</span>\r
-<span title="挑衅"><(* ̄ー ̄)ゞ来呀~</span>\r
-<span title="挑衅"><(* ̄ー ̄)ゞ来啊~</span>\r
-<span title="偷看">(/ω\*)……… (/ω·\*) </span>\r
-<span title="偷看">(/ω·\*) </span>\r
-<span title="偷拍 ">Σ[ ◎ ]}ー′)</span>\r
-<span title="怒">凸艹皿艹</span>\r
-<span title="靠">凸゜皿゜メ</span>\r
-<span title="吐">( >ρ < ”)</span>\r
-<span title="推推~起床啦!">(o ̄ω ̄)○))o(__*)Zzz</span>\r
-<span title="拖走">ヽ(゜▽゜ )-C<(/;◇;)/~</span>\r
-<span title="哇卡卡卡卡卡……">o((≧▽≦o) 太好笑了!!</span>\r
-<span title="哇咧!">Σ(⊙▽⊙"a...</span>\r
-<span title="挖鼻屎"> (* ̄rǒ ̄)</span>\r
-<span title="万岁!">*★,°*:.☆\( ̄▽ ̄)/$:*.°★* 。</span>\r
-<span title="围观!">(← ← )</span>\r
-<span title="围观!">( → →) </span>\r
-<span title="畏罪自杀…">…〒_〒…‵o′-一┳═┻︻▄</span>\r
-<span title="喂!">(#`O′)</span>\r
-<span title="喂饭">( *^-^)ρ(^0^* )</span>\r
-<span title="吻别">(* ̄;( ̄ *)</span>\r
-<span title="我?">σ(· ·?)</span>\r
-<span title="我不看……">(/▽\)</span>\r
-<span title="我错了……">(。﹏。*)</span>\r
-<span title="我回来啦~">||ヽ(* ̄▽ ̄*)ノミ|Ю</span>\r
-<span title="我来了~">(~ ̄▽ ̄)~</span>\r
-<span title="我忍!">o(-"-;) </span>\r
-<span title="我闪!">|(·_·) |·_·) |_·) |·) | )</span>\r
-<span title="握拳!">o( ̄ヘ ̄o* )</span>\r
-<span title="握拳!">o( ̄ヘ ̄o#)</span>\r
-<span title="呜呜呜……">( >﹏<。)~</span>\r
-<span title="无敌!">↑↑↓↓←→←→BA...┗( -o-)┛</span>\r
-<span title="无敌弹簧拳!">( ‵Д′)=○))~~~~~~Ю))>o<)/ </span>\r
-<span title="无敌幻影脚!">ヽ(ヽ `д′)ヽ`д′)ヽ`д′)┌┛┌┛┌┛★)`з゜)y</span>\r
-<span title="无敌捏脸功!"><( ‵□′)───C<─___-)|| </span>\r
-<span title="无敌肉包拳!">(o  ̄3)==@))゜ロ゜((@==(′ε′ )o </span>\r
-<span title="无敌肉包拳!">(o  ̄3)==@))゜ロ゜((@==(′ε′ )o</span>\r
-<span title="无敌影分身!">((≧(≧▽(≧▽≦(≧▽≦)≧▽≦)▽≦)≦))) </span>\r
-<span title="无力扶墙..."> ( _ _)ノ|壁</span>\r
-<span title="无奈">╮(╯-╰)╭ </span>\r
-<span title="无影脚!"><(  ̄︿ ̄)︵θ︵θ︵θ︵θ︵☆(>口<-)</span>\r
-<span title="无影脚!"><(  ̄︿ ̄)︵θ︵θ︵θ︵θ︵☆(>口<-)</span>\r
-<span title="享受">(╯▽╰ ) </span>\r
-<span title="消失">(* ̄□ ̄)( ̄□:;.…::;.:.:::;..::;.:...</span>\r
-<span title="小新"><( ̄︶ ̄)↗</span>\r
-<span title="邪恶">( ‵▽′)ψ</span>\r
-<span title="谢啦!!">☆⌒(*^-゜)v </span>\r
-<span title="心神不宁"...">(゜゜ )(。。)(゜゜ )(。。)</span>\r
-<span title="欣慰">( ╯▽╰)</span>\r
-<span title="要">不>( ̄ε ̄ =  ̄3 ̄)<</span>\r
-<span title="噎死">( *⊙~⊙) </span>\r
-<span title="噎住">( *⊙~⊙) </span>\r
-<span title="隐身!">(* ̄□ ̄)( ̄□:;.…::;.:.:::;..::;.:...</span>\r
-<span title="鹰钩鼻">( ̄ム ̄) </span>\r
-<span title="哟西!">(9 ̄^ ̄)9</span>\r
-<span title="有了!">(o゜▽゜)o☆</span>\r
-<span title="有人吗?">||o(*°▽°*)o|Ю </span>\r
-<span title="御风_凌"></span>\r
-<span title="怨.念....">o(一︿一+)o</span>\r
-<span title="运动">╔囧╗╔囧╝╚囧╝╚囧╗</span>\r
-<span title="晕!">@o@"</span>\r
-<span title="糟糕!">X﹏X</span>\r
-<span title="早安呀~~~"> o(* ̄▽ ̄*)ブ</span>\r
-<span title="早点回来哦~">(~ ̄(OO) ̄)ブ</span>\r
-<span title="炸弹!">(╯‵□′)╯···*~●</span>\r
-<span title="斩!!">ˋ( ° ▽、° ) (o( ̄▽ ̄///</span>\r
-<span title="涨">( ̄︶ ̄)↗</span>\r
-<span title="这个……呃~~">-______-"</span>\r
-<span title="真哒?!"> o(〃'▽'〃)o</span>\r
-<span title="真空波动拳!">( `o′){ ···-=≡))</span>\r
-<span title="真空波动拳!">( `o′){ ···-=≡))</span>\r
-<span title="振奋">(o>ε(o>u(≧∩≦) </span>\r
-<span title="振作!">━━(o_ _)o━━(o―_―)o━━(9 ̄ー ̄)9</span>\r
-<span title="痣长毛">( ゜,_ゝ゜) </span>\r
-<span title="皱眉">(-"-)</span>\r
-<span title="抓狂">o((>ω< ))o</span>\r
-<span title="抓狂">o(>@<)o</span>\r
-<span title="足球">( · ·)L☆ .....○ 冂 </span>\r
-<span title="醉拳">ヨロ (*~▽~)ノ ヨロ ヽ(~▽~*)ヨロ (*~▽~)―〇 ☆ バシ ))>口<)</span>\r
-<p style="display: block; float: left; margin-top: 25px; margin-bottom: -40px;">&copy; 2010 @ag108lau<br>Thanks @OnlyTiny<br />\r
-Last Update: 2010-03-12\r
-</p>
\ No newline at end of file
index 8e767db..8a9b6cf 100644 (file)
@@ -1,29 +1,29 @@
-<?php\r
-       include_once('../lib/twitese.php');\r
-       function getTrends($format = 'json'){\r
-               if($format !== 'json' && $format !== 'xml'){\r
-                       return false;\r
-               }\r
-               $url = 'http://search.twitter.com/trends.'.$format;\r
-               $response = objectifyJson(processCurl($url));\r
-               return $response;\r
-       }\r
-\r
-       function outputTrends($format = 'json'){\r
-               $trends = getTrends($format);\r
-               if(!isset($trends->trends)){\r
-                       return false;\r
-               }\r
-               $html = '';\r
-               foreach ($trends->trends as $trend) {\r
-                       $li = '\r
-                               <li>\r
-                               <a href="search.php?q='.rawurlencode($trend->name).'">'.$trend->name.'</a>\r
-                               </li>\r
-                               ';\r
-                       $html .= $li;\r
-               }\r
-\r
-               return $html;\r
-       }\r
-?>\r
+<?php
+       include_once('../lib/twitese.php');
+       function getTrends($format = 'json'){
+               if($format !== 'json' && $format !== 'xml'){
+                       return false;
+               }
+               $url = 'http://search.twitter.com/trends.'.$format;
+               $response = objectifyJson(processCurl($url));
+               return $response;
+       }
+
+       function outputTrends($format = 'json'){
+               $trends = getTrends($format);
+               if(!isset($trends->trends)){
+                       return false;
+               }
+               $html = '';
+               foreach ($trends->trends as $trend) {
+                       $li = '
+                               <li>
+                               <a href="search.php?q='.rawurlencode($trend->name).'">'.$trend->name.'</a>
+                               </li>
+                               ';
+                       $html .= $li;
+               }
+
+               return $html;
+       }
+?>
index 34b9af8..c75edb6 100644 (file)
        }
 
        echo '<div class="clear"></div>';
-       $p = -1;
        switch ($type) {
                case 'blocks':
                        $userlist = $t->blockingList($id, $p);
-                       $next_page = $userlist->next_cursor;
-                       $previous_page = $userlist->previous_cursor;
+                       $next_page = $userlist->next_cursor_str;
+                       $previous_page = $userlist->previous_cursor_str;
                        $userlist = $userlist->users;
                        break;
                case 'friends':
                        $userlist = $t->friends($id, $p);
-                       $next_page = $userlist->next_cursor;
-                       $previous_page = $userlist->previous_cursor;
+                       $next_page = $userlist->next_cursor_str;
+                       $previous_page = $userlist->previous_cursor_str;
                        $userlist = $userlist->users;
                        break;
                case 'followers':
                        $userlist = $t->followers($id, $p);
-                       $next_page = $userlist->next_cursor;
-                       $previous_page = $userlist->previous_cursor;
+                       $next_page = $userlist->next_cursor_str;
+                       $previous_page = $userlist->previous_cursor_str;
                        $userlist = $userlist->users;
                        break;
                case 'list_members':
                        $userlist = $t->followers($id, $p);
                        break;
        }
-       $empty = count($userlist) == 0? true: false;
+       $empty = count($userlist) == 0 ? true : false;
        if ($empty) {
                echo "<div id=\"empty\">No user to display.</div>";
        } else {
                }
                $output .= "</ol><div id=\"pagination\">";
                if ($type == 'list_members' || $type == 'list_followers' || $type == 'blocks') {
-                       if ($prelist != 0) $output .= "<a id=\"more\" class=\"round more\" style=\"float: left;\" href=\"list_members.php?id=$id&c=$prelist\">Back</a>";
+                       if ($prelist != 0) $output .= "<a id=\"less\" class=\"round more\" style=\"float: left;\" href=\"list_members.php?id=$id&c=$prelist\">Back</a>";
                        if ($nextlist != 0) $output .= "<a id=\"more\" class=\"round more\" style=\"float: right;\" href=\"list_members.php?id=$id&c=$nextlist\">Next</a>";
                } else {
                        if ($id) {
-                               if ($p >0)
-                                       $output .= "<a id=\"more\" class=\"round more\" style=\"float: left;\" href=\"$type.php?id=$id&p=" . $previous_page . "\">Back</a>";
-                               if ($next_page != 0)
+                               if ($previous_page !== "0")
+                                       $output .= "<a id=\"less\" class=\"round more\" style=\"float: left;\" href=\"$type.php?id=$id&p=" . $previous_page . "\">Back</a>";
+                               if ($next_page !== "0")
                                        $output .= "<a id=\"more\" class=\"round more\" style=\"float: right;\" href=\"$type.php?id=$id&p=" . $next_page . "\">Next</a>";
                        } else {
-                               if ($p >0)
-                                       $output .= "<a id=\"more\" class=\"round more\" style=\"float: left;\" href=\"$type.php?p=" . $previous_page . "\">Back</a>";
-                               if ($next_page != 0)
+                               if ($previous_page !== "0")
+                                       $output .= "<a id=\"less\" class=\"round more\" style=\"float: left;\" href=\"$type.php?p=" . $previous_page . "\">Back</a>";
+                               if ($next_page !== "0")
                                        $output .= "<a id=\"more\" class=\"round more\" style=\"float: right;\" href=\"$type.php?p=" . $next_page . "\">Next</a>";
                        }
                }
index ed9dc2c..1b5efad 100644 (file)
--- a/index.php
+++ b/index.php
 <?php
   include('inc/sentForm.php'); 
   
-       $p = 1;
-       if (isset($_GET['p']))
-       {
-               $p = (int) $_GET['p'];
-               if ($p <= 0) $p = 1;
-       }
+       $since_id = isset($_GET['since_id']) ? $_GET['since_id'] : false;
+       $max_id = isset($_GET['max_id']) ? $_GET['max_id'] : false;
 
-       $statuses = $t->homeTimeline($p);
+       $statuses = $t->homeTimeline($since_id, $max_id);
        if ($statuses == false)
        {
                header('location: error.php');exit();
        }
        $count = count($statuses);
-       $empty = $count == 0 ? true: false;
+       $empty = $count == 0 ? true : false;
        if ($empty)
        {
                echo "<div id=\"empty\">No tweet to display.</div>";
-       }
-       else
-       {
+       } else if ($t->http_code == 429) {
+               echo "<div id=\"empty\">API quota is used out, please wait for a moment before next refresh.</div>";
+       } else {
                $output = '<ol class="timeline" id="allTimeline">';
 
                include('lib/timeline_format.php');
                $maxid = isset($_COOKIE['maxid']) ? $_COOKIE['maxid'] : '';
+               $firstid = false;
+               $lastid = false;
                foreach ($statuses as $status) {
+                       if (!$firstid) $firstid = $status->id_str;
+                       $lastid = $status->id_str;
                        if($maxid == '' || $p == 1 || strcmp($status->id_str,$maxid) < 0) {
                                if (isset($status->retweeted_status)) {
                                        $output .= format_retweet($status);
                                }
                        }
                }
+               $lastid = bcsub($lastid, "1");
 
                $output .= "</ol><div id=\"pagination\">";
                $time = $_SERVER['REQUEST_TIME']+3600;
                setcookie('maxid',$statuses[$count-1]->id_str,$time,'/');
 
-               if ($p >1) $output .= "<a id=\"more\" class=\"round more\" style=\"float: left;\" href=\"index.php?p=" . ($p-1) . "\">Back</a>";
-               if (!$empty) $output .= "<a id=\"more\" class=\"round more\" style=\"float: right;\" href=\"index.php?p=" . ($p+1) . "\">Next</a>";
+               $output .= "<a id=\"less\" class=\"round more\" style=\"float: left;\" href=\"index.php?since_id=" . $firstid . "\">Back</a>";
+               $output .= "<a id=\"more\" class=\"round more\" style=\"float: right;\" href=\"index.php?max_id=" . $lastid . "\">Next</a>";
+               $output .= "</div>";
                echo $output;
        }
 ?>
 </div>
-</div>
 <?php 
        include ('inc/sidebar.php');
        include ('inc/footer.php');
diff --git a/js/ajaxfileupload.js b/js/ajaxfileupload.js
deleted file mode 100644 (file)
index 94b7f0f..0000000
+++ /dev/null
@@ -1,152 +0,0 @@
-jQuery.extend({\r
-       createUploadIframe: function (id, uri) {\r
-               //create frame\r
-               var frameId = 'jUploadFrame' + id;\r
-               if (window.ActiveXObject) {\r
-                       var io = document.createElement('<iframe id="' + frameId + '" name="' + frameId + '" />');\r
-                       if (typeof uri == 'boolean') {\r
-                               io.src = 'javascript:false';\r
-                       }\r
-                       else if (typeof uri == 'string') {\r
-                               io.src = uri;\r
-                       }\r
-               }\r
-               else {\r
-                       var io = document.createElement('iframe');\r
-                       io.id = frameId;\r
-                       io.name = frameId;\r
-               }\r
-               io.style.position = 'absolute';\r
-               io.style.top = '-1000px';\r
-               io.style.left = '-1000px';\r
-               document.body.appendChild(io);\r
-               return io\r
-       },\r
-       createUploadForm: function (id, fileElementId) {\r
-               //create form   \r
-               var formId = 'jUploadForm' + id;\r
-               var fileId = 'jUploadFile' + id;\r
-               var form = $('<form  action="" method="POST" name="' + formId + '" id="' + formId + '" enctype="multipart/form-data"></form>');\r
-               var oldElement = $('#' + fileElementId);\r
-               var newElement = $(oldElement).clone();\r
-               $(oldElement).attr('id', fileId);\r
-               $(oldElement).before(newElement);\r
-               $(oldElement).appendTo(form);\r
-               //set attributes\r
-               $(form).css('position', 'absolute');\r
-               $(form).css('top', '-1200px');\r
-               $(form).css('left', '-1200px');\r
-               $(form).appendTo('body');\r
-               return form;\r
-       },\r
-       ajaxFileUpload: function (s) {\r
-               // TODO introduce global settings, allowing the client to modify them for all requests, not only timeout                \r
-               s = jQuery.extend({}, jQuery.ajaxSettings, s);\r
-               var id = new Date().getTime()\r
-               var form = jQuery.createUploadForm(id, s.fileElementId);\r
-               var io = jQuery.createUploadIframe(id, s.secureuri);\r
-               var frameId = 'jUploadFrame' + id;\r
-               var formId = 'jUploadForm' + id;\r
-               // Watch for a new set of requests\r
-               if (s.global && !jQuery.active++) {\r
-                       jQuery.event.trigger("ajaxStart");\r
-               }\r
-               var requestDone = false;\r
-               // Create the request object\r
-               var xml = {}\r
-               if (s.global) jQuery.event.trigger("ajaxSend", [xml, s]);\r
-               // Wait for a response to come back\r
-               var uploadCallback = function (isTimeout) {\r
-                       var io = document.getElementById(frameId);\r
-                       try {\r
-                               if (io.contentWindow) {\r
-                                       xml.responseText = io.contentWindow.document.body ? io.contentWindow.document.body.innerHTML : null;\r
-                                       xml.responseXML = io.contentWindow.document.XMLDocument ? io.contentWindow.document.XMLDocument : io.contentWindow.document;\r
-                               } else if (io.contentDocument) {\r
-                                       xml.responseText = io.contentDocument.document.body ? io.contentDocument.document.body.innerHTML : null;\r
-                                       xml.responseXML = io.contentDocument.document.XMLDocument ? io.contentDocument.document.XMLDocument : io.contentDocument.document;\r
-                               }\r
-                       } catch (e) {\r
-                               jQuery.handleError(s, xml, null, e);\r
-                       }\r
-                       if (xml || isTimeout == "timeout") {\r
-                               requestDone = true;\r
-                               var status;\r
-                               try {\r
-                                       status = isTimeout != "timeout" ? "success" : "error";\r
-                                       // Make sure that the request was successful or notmodified\r
-                                       if (status != "error") {\r
-                                               // process the data (runs the xml through httpData regardless of callback)\r
-                                               var data = jQuery.uploadHttpData(xml, s.dataType);\r
-                                               // If a local callback was specified, fire it and pass it the data\r
-                                               if (s.success) s.success(data, status);\r
-                                               // Fire the global callback\r
-                                               if (s.global) jQuery.event.trigger("ajaxSuccess", [xml, s]);\r
-                                       } else jQuery.handleError(s, xml, status);\r
-                               } catch (e) {\r
-                                       status = "error";\r
-                                       jQuery.handleError(s, xml, status, e);\r
-                               }\r
-                               // The request was completed\r
-                               if (s.global) jQuery.event.trigger("ajaxComplete", [xml, s]);\r
-                               // Handle the global AJAX counter\r
-                               if (s.global && !--jQuery.active) jQuery.event.trigger("ajaxStop");\r
-                               // Process result\r
-                               if (s.complete) s.complete(xml, status);\r
-                               jQuery(io).unbind()\r
-                               setTimeout(function () {\r
-                                       try {\r
-                                               $(io).remove();\r
-                                               $(form).remove();\r
-                                       } catch (e) {\r
-                                               jQuery.handleError(s, xml, null, e);\r
-                                       }\r
-                               }, 100)\r
-                               xml = null\r
-                       }\r
-               }\r
-               // Timeout checker\r
-               if (s.timeout > 0) {\r
-                       setTimeout(function () {\r
-                               // Check to see if the request is still happening\r
-                               if (!requestDone) uploadCallback("timeout");\r
-                       }, s.timeout);\r
-               }\r
-               try {\r
-                       // var io = $('#' + frameId);\r
-                       var form = $('#' + formId);\r
-                       $(form).attr('action', s.url);\r
-                       $(form).attr('method', 'POST');\r
-                       $(form).attr('target', frameId);\r
-                       if (form.encoding) {\r
-                               form.encoding = 'multipart/form-data';\r
-                       }\r
-                       else {\r
-                               form.enctype = 'multipart/form-data';\r
-                       }\r
-                       $(form).submit();\r
-               } catch (e) {\r
-                       jQuery.handleError(s, xml, null, e);\r
-               }\r
-               if (window.attachEvent) {\r
-                       document.getElementById(frameId).attachEvent('onload', uploadCallback);\r
-               }\r
-               else {\r
-                       document.getElementById(frameId).addEventListener('load', uploadCallback, false);\r
-               }\r
-               return {\r
-                       abort: function () {}\r
-               };\r
-       },\r
-       uploadHttpData: function (r, type) {\r
-               var data = !type;\r
-               data = type == "xml" || data ? r.responseXML : r.responseText;\r
-               // If the type is "script", eval it in global context\r
-               if (type == "script") jQuery.globalEval(data);\r
-               // Get the JavaScript object, if JSON is used.\r
-               if (type == "json") eval("data = " + data);\r
-               // evaluate scripts within html\r
-               if (type == "html") jQuery("<div>").html(data).evalScripts();\r
-               return data;\r
-       }\r
-})
\ No newline at end of file
index 663fdc7..004d12b 100644 (file)
@@ -1,50 +1,50 @@
-$(function(){\r
-               formFunc();\r
-               $("ol.timeline").live("click", function(e) {\r
-                       var $this = $(e.target);\r
-                       var type = $this.attr('class');\r
-                       switch(type) {\r
-                               case 'rt_btn':\r
-                                       e.preventDefault();\r
-                                       onRT($this);\r
-                                       break;\r
-                               case 'retw_btn':\r
-                                       e.preventDefault();\r
-                                       onNwRT($this);\r
-                                       break;\r
-                               case 'replie_btn':\r
-                                       e.preventDefault();\r
-                                       onReplie($this,e);\r
-                                       break;\r
-                               case 'favor_btn':\r
-                                       e.preventDefault();\r
-                                       onFavor($this);\r
-                                       break;\r
-                               case 'unfav_btn':\r
-                                       e.preventDefault();\r
-                                       UnFavor($this);\r
-                                       break;\r
-                               case 'delete_btn':\r
-                                       e.preventDefault();\r
-                                       onDelete($this);\r
-                                       break;\r
-                               case 'rt_undo':\r
-                               case 'unrt_btn':\r
-                                       e.preventDefault();\r
-                                       onUndoRt($this);\r
-                                       break;\r
-                               case 'msg_replie_btn':\r
-                                       e.preventDefault();\r
-                                       onReplieDM($this);\r
-                                       break;\r
-                               case 'msg_delete_btn':\r
-                                       e.preventDefault();\r
-                                       onDeleteMsg($this);\r
-                                       break;\r
-                       }\r
-               });\r
-               $("#submit_btn").click(function(e){\r
-                               updateStatus();\r
-                               e.preventDefault();\r
-                       });\r
-       });\r
+$(function(){
+               formFunc();
+               $("ol.timeline").live("click", function(e) {
+                       var $this = $(e.target);
+                       var type = $this.attr('class');
+                       switch(type) {
+                               case 'rt_btn':
+                                       e.preventDefault();
+                                       onRT($this);
+                                       break;
+                               case 'retw_btn':
+                                       e.preventDefault();
+                                       onNwRT($this);
+                                       break;
+                               case 'replie_btn':
+                                       e.preventDefault();
+                                       onReplie($this,e);
+                                       break;
+                               case 'favor_btn':
+                                       e.preventDefault();
+                                       onFavor($this);
+                                       break;
+                               case 'unfav_btn':
+                                       e.preventDefault();
+                                       UnFavor($this);
+                                       break;
+                               case 'delete_btn':
+                                       e.preventDefault();
+                                       onDelete($this);
+                                       break;
+                               case 'rt_undo':
+                               case 'unrt_btn':
+                                       e.preventDefault();
+                                       onUndoRt($this);
+                                       break;
+                               case 'msg_replie_btn':
+                                       e.preventDefault();
+                                       onReplieDM($this);
+                                       break;
+                               case 'msg_delete_btn':
+                                       e.preventDefault();
+                                       onDeleteMsg($this);
+                                       break;
+                       }
+               });
+               $("#submit_btn").click(function(e){
+                               updateStatus();
+                               e.preventDefault();
+                       });
+       });
diff --git a/js/colorpicker3.js b/js/colorpicker3.js
deleted file mode 100644 (file)
index 99b48ec..0000000
+++ /dev/null
@@ -1,484 +0,0 @@
-/**\r
- *\r
- * Color picker\r
- * Author: Stefan Petre www.eyecon.ro\r
- * \r
- * Dual licensed under the MIT and GPL licenses\r
- * \r
- */\r
-(function ($) {\r
-       var ColorPicker = function () {\r
-               var\r
-                       ids = {},\r
-                       inAction,\r
-                       charMin = 65,\r
-                       visible,\r
-                       tpl = '<div class="colorpicker"><div class="colorpicker_color"><div><div></div></div></div><div class="colorpicker_hue"><div></div></div><div class="colorpicker_new_color"></div><div class="colorpicker_current_color"></div><div class="colorpicker_hex"><input type="text" maxlength="6" size="6" /></div><div class="colorpicker_rgb_r colorpicker_field"><input type="text" maxlength="3" size="3" /><span></span></div><div class="colorpicker_rgb_g colorpicker_field"><input type="text" maxlength="3" size="3" /><span></span></div><div class="colorpicker_rgb_b colorpicker_field"><input type="text" maxlength="3" size="3" /><span></span></div><div class="colorpicker_hsb_h colorpicker_field"><input type="text" maxlength="3" size="3" /><span></span></div><div class="colorpicker_hsb_s colorpicker_field"><input type="text" maxlength="3" size="3" /><span></span></div><div class="colorpicker_hsb_b colorpicker_field"><input type="text" maxlength="3" size="3" /><span></span></div><div class="colorpicker_submit"><button type="button" name="submit">Done</button></div></div>',\r
-                       defaults = {\r
-                               eventName: 'click',\r
-                               onShow: function () {},\r
-                               onBeforeShow: function(){},\r
-                               onHide: function () {},\r
-                               onChange: function () {},\r
-                               onSubmit: function () {},\r
-                               color: 'ff0000',\r
-                               livePreview: true,\r
-                               flat: false\r
-                       },\r
-                       fillRGBFields = function  (hsb, cal) {\r
-                               var rgb = HSBToRGB(hsb);\r
-                               $(cal).data('colorpicker').fields\r
-                                       .eq(1).val(rgb.r).end()\r
-                                       .eq(2).val(rgb.g).end()\r
-                                       .eq(3).val(rgb.b).end();\r
-                       },\r
-                       fillHSBFields = function  (hsb, cal) {\r
-                               $(cal).data('colorpicker').fields\r
-                                       .eq(4).val(hsb.h).end()\r
-                                       .eq(5).val(hsb.s).end()\r
-                                       .eq(6).val(hsb.b).end();\r
-                       },\r
-                       fillHexFields = function (hsb, cal) {\r
-                               $(cal).data('colorpicker').fields\r
-                                       .eq(0).val(HSBToHex(hsb)).end();\r
-                       },\r
-                       setSelector = function (hsb, cal) {\r
-                               $(cal).data('colorpicker').selector.css('backgroundColor', '#' + HSBToHex({h: hsb.h, s: 100, b: 100}));\r
-                               $(cal).data('colorpicker').selectorIndic.css({\r
-                                       left: parseInt(150 * hsb.s/100, 10),\r
-                                       top: parseInt(150 * (100-hsb.b)/100, 10)\r
-                               });\r
-                       },\r
-                       setHue = function (hsb, cal) {\r
-                               $(cal).data('colorpicker').hue.css('top', parseInt(150 - 150 * hsb.h/360, 10));\r
-                       },\r
-                       setCurrentColor = function (hsb, cal) {\r
-                               $(cal).data('colorpicker').currentColor.css('backgroundColor', '#' + HSBToHex(hsb));\r
-                       },\r
-                       setNewColor = function (hsb, cal) {\r
-                               $(cal).data('colorpicker').newColor.css('backgroundColor', '#' + HSBToHex(hsb));\r
-                       },\r
-                       keyDown = function (ev) {\r
-                               var pressedKey = ev.charCode || ev.keyCode || -1;\r
-                               if ((pressedKey > charMin && pressedKey <= 90) || pressedKey == 32) {\r
-                                       return false;\r
-                               }\r
-                               var cal = $(this).parent().parent();\r
-                               if (cal.data('colorpicker').livePreview === true) {\r
-                                       change.apply(this);\r
-                               }\r
-                       },\r
-                       change = function (ev) {\r
-                               var cal = $(this).parent().parent(), col;\r
-                               if (this.parentNode.className.indexOf('_hex') > 0) {\r
-                                       cal.data('colorpicker').color = col = HexToHSB(fixHex(this.value));\r
-                               } else if (this.parentNode.className.indexOf('_hsb') > 0) {\r
-                                       cal.data('colorpicker').color = col = fixHSB({\r
-                                               h: parseInt(cal.data('colorpicker').fields.eq(4).val(), 10),\r
-                                               s: parseInt(cal.data('colorpicker').fields.eq(5).val(), 10),\r
-                                               b: parseInt(cal.data('colorpicker').fields.eq(6).val(), 10)\r
-                                       });\r
-                               } else {\r
-                                       cal.data('colorpicker').color = col = RGBToHSB(fixRGB({\r
-                                               r: parseInt(cal.data('colorpicker').fields.eq(1).val(), 10),\r
-                                               g: parseInt(cal.data('colorpicker').fields.eq(2).val(), 10),\r
-                                               b: parseInt(cal.data('colorpicker').fields.eq(3).val(), 10)\r
-                                       }));\r
-                               }\r
-                               if (ev) {\r
-                                       fillRGBFields(col, cal.get(0));\r
-                                       fillHexFields(col, cal.get(0));\r
-                                       fillHSBFields(col, cal.get(0));\r
-                               }\r
-                               setSelector(col, cal.get(0));\r
-                               setHue(col, cal.get(0));\r
-                               setNewColor(col, cal.get(0));\r
-                               cal.data('colorpicker').onChange.apply(cal, [col, HSBToHex(col), HSBToRGB(col)]);\r
-                       },\r
-                       blur = function (ev) {\r
-                               var cal = $(this).parent().parent();\r
-                               cal.data('colorpicker').fields.parent().removeClass('colorpicker_focus');\r
-                       },\r
-                       focus = function () {\r
-                               charMin = this.parentNode.className.indexOf('_hex') > 0 ? 70 : 65;\r
-                               $(this).parent().parent().data('colorpicker').fields.parent().removeClass('colorpicker_focus');\r
-                               $(this).parent().addClass('colorpicker_focus');\r
-                       },\r
-                       downIncrement = function (ev) {\r
-                               var field = $(this).parent().find('input').focus();\r
-                               var current = {\r
-                                       el: $(this).parent().addClass('colorpicker_slider'),\r
-                                       max: this.parentNode.className.indexOf('_hsb_h') > 0 ? 360 : (this.parentNode.className.indexOf('_hsb') > 0 ? 100 : 255),\r
-                                       y: ev.pageY,\r
-                                       field: field,\r
-                                       val: parseInt(field.val(), 10),\r
-                                       preview: $(this).parent().parent().data('colorpicker').livePreview                                      \r
-                               };\r
-                               $(document).bind('mouseup', current, upIncrement);\r
-                               $(document).bind('mousemove', current, moveIncrement);\r
-                       },\r
-                       moveIncrement = function (ev) {\r
-                               ev.data.field.val(Math.max(0, Math.min(ev.data.max, parseInt(ev.data.val + ev.pageY - ev.data.y, 10))));\r
-                               if (ev.data.preview) {\r
-                                       change.apply(ev.data.field.get(0), [true]);\r
-                               }\r
-                               return false;\r
-                       },\r
-                       upIncrement = function (ev) {\r
-                               change.apply(ev.data.field.get(0), [true]);\r
-                               ev.data.el.removeClass('colorpicker_slider').find('input').focus();\r
-                               $(document).unbind('mouseup', upIncrement);\r
-                               $(document).unbind('mousemove', moveIncrement);\r
-                               return false;\r
-                       },\r
-                       downHue = function (ev) {\r
-                               var current = {\r
-                                       cal: $(this).parent(),\r
-                                       y: $(this).offset().top\r
-                               };\r
-                               current.preview = current.cal.data('colorpicker').livePreview;\r
-                               $(document).bind('mouseup', current, upHue);\r
-                               $(document).bind('mousemove', current, moveHue);\r
-                       },\r
-                       moveHue = function (ev) {\r
-                               change.apply(\r
-                                       ev.data.cal.data('colorpicker')\r
-                                               .fields\r
-                                               .eq(4)\r
-                                               .val(parseInt(360*(150 - Math.max(0,Math.min(150,(ev.pageY - ev.data.y))))/150, 10))\r
-                                               .get(0),\r
-                                       [ev.data.preview]\r
-                               );\r
-                               return false;\r
-                       },\r
-                       upHue = function (ev) {\r
-                               fillRGBFields(ev.data.cal.data('colorpicker').color, ev.data.cal.get(0));\r
-                               fillHexFields(ev.data.cal.data('colorpicker').color, ev.data.cal.get(0));\r
-                               $(document).unbind('mouseup', upHue);\r
-                               $(document).unbind('mousemove', moveHue);\r
-                               return false;\r
-                       },\r
-                       downSelector = function (ev) {\r
-                               var current = {\r
-                                       cal: $(this).parent(),\r
-                                       pos: $(this).offset()\r
-                               };\r
-                               current.preview = current.cal.data('colorpicker').livePreview;\r
-                               $(document).bind('mouseup', current, upSelector);\r
-                               $(document).bind('mousemove', current, moveSelector);\r
-                       },\r
-                       moveSelector = function (ev) {\r
-                               change.apply(\r
-                                       ev.data.cal.data('colorpicker')\r
-                                               .fields\r
-                                               .eq(6)\r
-                                               .val(parseInt(100*(150 - Math.max(0,Math.min(150,(ev.pageY - ev.data.pos.top))))/150, 10))\r
-                                               .end()\r
-                                               .eq(5)\r
-                                               .val(parseInt(100*(Math.max(0,Math.min(150,(ev.pageX - ev.data.pos.left))))/150, 10))\r
-                                               .get(0),\r
-                                       [ev.data.preview]\r
-                               );\r
-                               return false;\r
-                       },\r
-                       upSelector = function (ev) {\r
-                               fillRGBFields(ev.data.cal.data('colorpicker').color, ev.data.cal.get(0));\r
-                               fillHexFields(ev.data.cal.data('colorpicker').color, ev.data.cal.get(0));\r
-                               $(document).unbind('mouseup', upSelector);\r
-                               $(document).unbind('mousemove', moveSelector);\r
-                               return false;\r
-                       },\r
-                       enterSubmit = function (ev) {\r
-                               $(this).addClass('colorpicker_focus');\r
-                       },\r
-                       leaveSubmit = function (ev) {\r
-                               $(this).removeClass('colorpicker_focus');\r
-                       },\r
-                       clickSubmit = function (ev) {\r
-                               var cal = $(this).parent();\r
-                               var col = cal.data('colorpicker').color;\r
-                               cal.data('colorpicker').origColor = col;\r
-                               setCurrentColor(col, cal.get(0));\r
-                               cal.data('colorpicker').onSubmit(col, HSBToHex(col), HSBToRGB(col), cal.data('colorpicker').el);\r
-                       },\r
-                       show = function (ev) {\r
-                               var cal = $('#' + $(this).data('colorpickerId'));\r
-                               cal.data('colorpicker').onBeforeShow.apply(this, [cal.get(0)]);\r
-                               var pos = $(this).offset();\r
-                               var viewPort = getViewport();\r
-                               var top = pos.top + this.offsetHeight;\r
-                               var left = pos.left;\r
-                               if (top + 176 > viewPort.t + viewPort.h) {\r
-                                       top -= this.offsetHeight + 176;\r
-                               }\r
-                               if (left + 356 > viewPort.l + viewPort.w) {\r
-                                       left -= 356;\r
-                               }\r
-                               cal.css({left: left + 'px', top: top + 'px'});\r
-                               if (cal.data('colorpicker').onShow.apply(this, [cal.get(0)]) != false) {\r
-                                       cal.show();\r
-                               }\r
-                               $(document).bind('mousedown', {cal: cal}, hide);\r
-                               return false;\r
-                       },\r
-                       hide = function (ev) {\r
-                               if (!isChildOf(ev.data.cal.get(0), ev.target, ev.data.cal.get(0))) {\r
-                                       if (ev.data.cal.data('colorpicker').onHide.apply(this, [ev.data.cal.get(0)]) != false) {\r
-                                               ev.data.cal.hide();\r
-                                       }\r
-                                       $(document).unbind('mousedown', hide);\r
-                               }\r
-                       },\r
-                       isChildOf = function(parentEl, el, container) {\r
-                               if (parentEl == el) {\r
-                                       return true;\r
-                               }\r
-                               if (parentEl.contains) {\r
-                                       return parentEl.contains(el);\r
-                               }\r
-                               if ( parentEl.compareDocumentPosition ) {\r
-                                       return !!(parentEl.compareDocumentPosition(el) & 16);\r
-                               }\r
-                               var prEl = el.parentNode;\r
-                               while(prEl && prEl != container) {\r
-                                       if (prEl == parentEl)\r
-                                               return true;\r
-                                       prEl = prEl.parentNode;\r
-                               }\r
-                               return false;\r
-                       },\r
-                       getViewport = function () {\r
-                               var m = document.compatMode == 'CSS1Compat';\r
-                               return {\r
-                                       l : window.pageXOffset || (m ? document.documentElement.scrollLeft : document.body.scrollLeft),\r
-                                       t : window.pageYOffset || (m ? document.documentElement.scrollTop : document.body.scrollTop),\r
-                                       w : window.innerWidth || (m ? document.documentElement.clientWidth : document.body.clientWidth),\r
-                                       h : window.innerHeight || (m ? document.documentElement.clientHeight : document.body.clientHeight)\r
-                               };\r
-                       },\r
-                       fixHSB = function (hsb) {\r
-                               return {\r
-                                       h: Math.min(360, Math.max(0, hsb.h)),\r
-                                       s: Math.min(100, Math.max(0, hsb.s)),\r
-                                       b: Math.min(100, Math.max(0, hsb.b))\r
-                               };\r
-                       }, \r
-                       fixRGB = function (rgb) {\r
-                               return {\r
-                                       r: Math.min(255, Math.max(0, rgb.r)),\r
-                                       g: Math.min(255, Math.max(0, rgb.g)),\r
-                                       b: Math.min(255, Math.max(0, rgb.b))\r
-                               };\r
-                       },\r
-                       fixHex = function (hex) {\r
-                               var len = 6 - hex.length;\r
-                               if (len > 0) {\r
-                                       var o = [];\r
-                                       for (var i=0; i<len; i++) {\r
-                                               o.push('0');\r
-                                       }\r
-                                       o.push(hex);\r
-                                       hex = o.join('');\r
-                               }\r
-                               return hex;\r
-                       }, \r
-                       HexToRGB = function (hex) {\r
-                               var hex = parseInt(((hex.indexOf('#') > -1) ? hex.substring(1) : hex), 16);\r
-                               return {r: hex >> 16, g: (hex & 0x00FF00) >> 8, b: (hex & 0x0000FF)};\r
-                       },\r
-                       HexToHSB = function (hex) {\r
-                               return RGBToHSB(HexToRGB(hex));\r
-                       },\r
-                       RGBToHSB = function (rgb) {\r
-                               var hsb = {\r
-                                       h: 0,\r
-                                       s: 0,\r
-                                       b: 0\r
-                               };\r
-                               var min = Math.min(rgb.r, rgb.g, rgb.b);\r
-                               var max = Math.max(rgb.r, rgb.g, rgb.b);\r
-                               var delta = max - min;\r
-                               hsb.b = max;\r
-                               if (max != 0) {\r
-                                       \r
-                               }\r
-                               hsb.s = max != 0 ? 255 * delta / max : 0;\r
-                               if (hsb.s != 0) {\r
-                                       if (rgb.r == max) {\r
-                                               hsb.h = (rgb.g - rgb.b) / delta;\r
-                                       } else if (rgb.g == max) {\r
-                                               hsb.h = 2 + (rgb.b - rgb.r) / delta;\r
-                                       } else {\r
-                                               hsb.h = 4 + (rgb.r - rgb.g) / delta;\r
-                                       }\r
-                               } else {\r
-                                       hsb.h = -1;\r
-                               }\r
-                               hsb.h *= 60;\r
-                               if (hsb.h < 0) {\r
-                                       hsb.h += 360;\r
-                               }\r
-                               hsb.s *= 100/255;\r
-                               hsb.b *= 100/255;\r
-                               return hsb;\r
-                       },\r
-                       HSBToRGB = function (hsb) {\r
-                               var rgb = {};\r
-                               var h = Math.round(hsb.h);\r
-                               var s = Math.round(hsb.s*255/100);\r
-                               var v = Math.round(hsb.b*255/100);\r
-                               if(s == 0) {\r
-                                       rgb.r = rgb.g = rgb.b = v;\r
-                               } else {\r
-                                       var t1 = v;\r
-                                       var t2 = (255-s)*v/255;\r
-                                       var t3 = (t1-t2)*(h%60)/60;\r
-                                       if(h==360) h = 0;\r
-                                       if(h<60) {rgb.r=t1;     rgb.b=t2; rgb.g=t2+t3}\r
-                                       else if(h<120) {rgb.g=t1; rgb.b=t2;     rgb.r=t1-t3}\r
-                                       else if(h<180) {rgb.g=t1; rgb.r=t2;     rgb.b=t2+t3}\r
-                                       else if(h<240) {rgb.b=t1; rgb.r=t2;     rgb.g=t1-t3}\r
-                                       else if(h<300) {rgb.b=t1; rgb.g=t2;     rgb.r=t2+t3}\r
-                                       else if(h<360) {rgb.r=t1; rgb.g=t2;     rgb.b=t1-t3}\r
-                                       else {rgb.r=0; rgb.g=0; rgb.b=0}\r
-                               }\r
-                               return {r:Math.round(rgb.r), g:Math.round(rgb.g), b:Math.round(rgb.b)};\r
-                       },\r
-                       RGBToHex = function (rgb) {\r
-                               var hex = [\r
-                                       rgb.r.toString(16),\r
-                                       rgb.g.toString(16),\r
-                                       rgb.b.toString(16)\r
-                               ];\r
-                               $.each(hex, function (nr, val) {\r
-                                       if (val.length == 1) {\r
-                                               hex[nr] = '0' + val;\r
-                                       }\r
-                               });\r
-                               return hex.join('');\r
-                       },\r
-                       HSBToHex = function (hsb) {\r
-                               return RGBToHex(HSBToRGB(hsb));\r
-                       },\r
-                       restoreOriginal = function () {\r
-                               var cal = $(this).parent();\r
-                               var col = cal.data('colorpicker').origColor;\r
-                               cal.data('colorpicker').color = col;\r
-                               fillRGBFields(col, cal.get(0));\r
-                               fillHexFields(col, cal.get(0));\r
-                               fillHSBFields(col, cal.get(0));\r
-                               setSelector(col, cal.get(0));\r
-                               setHue(col, cal.get(0));\r
-                               setNewColor(col, cal.get(0));\r
-                       };\r
-               return {\r
-                       init: function (opt) {\r
-                               opt = $.extend({}, defaults, opt||{});\r
-                               if (typeof opt.color == 'string') {\r
-                                       opt.color = HexToHSB(opt.color);\r
-                               } else if (opt.color.r != undefined && opt.color.g != undefined && opt.color.b != undefined) {\r
-                                       opt.color = RGBToHSB(opt.color);\r
-                               } else if (opt.color.h != undefined && opt.color.s != undefined && opt.color.b != undefined) {\r
-                                       opt.color = fixHSB(opt.color);\r
-                               } else {\r
-                                       return this;\r
-                               }\r
-                               return this.each(function () {\r
-                                       if (!$(this).data('colorpickerId')) {\r
-                                               var options = $.extend({}, opt);\r
-                                               options.origColor = opt.color;\r
-                                               var id = 'collorpicker_' + parseInt(Math.random() * 1000);\r
-                                               $(this).data('colorpickerId', id);\r
-                                               var cal = $(tpl).attr('id', id);\r
-                                               if (options.flat) {\r
-                                                       cal.appendTo(this).show();\r
-                                               } else {\r
-                                                       cal.appendTo(document.body);\r
-                                               }\r
-                                               options.fields = cal\r
-                                                                                       .find('input')\r
-                                                                                               .bind('keyup', keyDown)\r
-                                                                                               .bind('change', change)\r
-                                                                                               .bind('blur', blur)\r
-                                                                                               .bind('focus', focus);\r
-                                               cal\r
-                                                       .find('span').bind('mousedown', downIncrement).end()\r
-                                                       .find('>div.colorpicker_current_color').bind('click', restoreOriginal);\r
-                                               options.selector = cal.find('div.colorpicker_color').bind('mousedown', downSelector);\r
-                                               options.selectorIndic = options.selector.find('div div');\r
-                                               options.el = this;\r
-                                               options.hue = cal.find('div.colorpicker_hue div');\r
-                                               cal.find('div.colorpicker_hue').bind('mousedown', downHue);\r
-                                               options.newColor = cal.find('div.colorpicker_new_color');\r
-                                               options.currentColor = cal.find('div.colorpicker_current_color');\r
-                                               cal.data('colorpicker', options);\r
-                                               cal.find('div.colorpicker_submit')\r
-                                                       .bind('mouseenter', enterSubmit)\r
-                                                       .bind('mouseleave', leaveSubmit)\r
-                                                       .bind('click', clickSubmit);\r
-                                               fillRGBFields(options.color, cal.get(0));\r
-                                               fillHSBFields(options.color, cal.get(0));\r
-                                               fillHexFields(options.color, cal.get(0));\r
-                                               setHue(options.color, cal.get(0));\r
-                                               setSelector(options.color, cal.get(0));\r
-                                               setCurrentColor(options.color, cal.get(0));\r
-                                               setNewColor(options.color, cal.get(0));\r
-                                               if (options.flat) {\r
-                                                       cal.css({\r
-                                                               position: 'relative',\r
-                                                               display: 'block'\r
-                                                       });\r
-                                               } else {\r
-                                                       $(this).bind(options.eventName, show);\r
-                                               }\r
-                                       }\r
-                               });\r
-                       },\r
-                       showPicker: function() {\r
-                               return this.each( function () {\r
-                                       if ($(this).data('colorpickerId')) {\r
-                                               show.apply(this);\r
-                                       }\r
-                               });\r
-                       },\r
-                       hidePicker: function() {\r
-                               return this.each( function () {\r
-                                       if ($(this).data('colorpickerId')) {\r
-                                               $('#' + $(this).data('colorpickerId')).hide();\r
-                                       }\r
-                               });\r
-                       },\r
-                       setColor: function(col) {\r
-                               if (typeof col == 'string') {\r
-                                       col = HexToHSB(col);\r
-                               } else if (col.r != undefined && col.g != undefined && col.b != undefined) {\r
-                                       col = RGBToHSB(col);\r
-                               } else if (col.h != undefined && col.s != undefined && col.b != undefined) {\r
-                                       col = fixHSB(col);\r
-                               } else {\r
-                                       return this;\r
-                               }\r
-                               return this.each(function(){\r
-                                       if ($(this).data('colorpickerId')) {\r
-                                               var cal = $('#' + $(this).data('colorpickerId'));\r
-                                               cal.data('colorpicker').color = col;\r
-                                               cal.data('colorpicker').origColor = col;\r
-                                               fillRGBFields(col, cal.get(0));\r
-                                               fillHSBFields(col, cal.get(0));\r
-                                               fillHexFields(col, cal.get(0));\r
-                                               setHue(col, cal.get(0));\r
-                                               setSelector(col, cal.get(0));\r
-                                               setCurrentColor(col, cal.get(0));\r
-                                               setNewColor(col, cal.get(0));\r
-                                       }\r
-                               });\r
-                       }\r
-               };\r
-       }();\r
-       $.fn.extend({\r
-               ColorPicker: ColorPicker.init,\r
-               ColorPickerHide: ColorPicker.hidePicker,\r
-               ColorPickerShow: ColorPicker.showPicker,\r
-               ColorPickerSetColor: ColorPicker.setColor\r
-       });\r
-})(jQuery)
\ No newline at end of file
diff --git a/js/favor.js b/js/favor.js
deleted file mode 100644 (file)
index e8930ba..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-$(function(){\r
-       formFunc();\r
-       $(".rt_btn").live("click", function(e){\r
-               e.preventDefault();\r
-               onRT($(this));\r
-       });\r
-       $(".replie_btn").live("click", function(e){\r
-               e.preventDefault();\r
-               onReplie($(this));\r
-       });\r
-       $(".delete_btn").click(function(e){\r
-               e.preventDefault();\r
-               onDelete($(this), "收藏");\r
-       });\r
-       $(".retw_btn").live("click", function(e){\r
-               e.preventDefault();\r
-               onNwRT($(this));\r
-       });     \r
-});\r
index 501e549..ac1e6ef 100644 (file)
@@ -114,6 +114,7 @@ $(function (){
                                                updateSentTip("Your image has been uploaded!", 3e3, "success");
                                                $("#photoArea").slideToggle(100);
                                        }else{
+                                               console.log(data);
                                                updateSentTip("Failed to upload, please try again.", 3e3, "failure");
                                                $("#photoArea").slideToggle(100);
                                        }
@@ -121,6 +122,7 @@ $(function (){
                                error: function (data, status, e){
                                        updateSentTip("Failed to upload, please try again.", 3e3, "failure");
                                        $("#photoArea").slideToggle(100);
+                                       console.log(data);
                                }
                        })
                return false;
index bb67c85..2f8f845 100644 (file)
@@ -29,11 +29,718 @@ jQuery.cookie=function(name,value,options){if(typeof value!='undefined'){options
 //Lazy Load
 (function(a){a.fn.lazyload=function(b){var c={threshold:0,failurelimit:0,event:"scroll",effect:"show",container:window};if(b){a.extend(c,b)}var d=this;if("scroll"==c.event){a(c.container).bind("scroll",function(b){var e=0;d.each(function(){if(a.abovethetop(this,c)||a.leftofbegin(this,c)){}else if(!a.belowthefold(this,c)&&!a.rightoffold(this,c)){a(this).trigger("appear")}else{if(e++>c.failurelimit){return false}}});var f=a.grep(d,function(a){return!a.loaded});d=a(f)})}this.each(function(){var b=this;if(undefined==a(b).attr("original")){a(b).attr("original",a(b).attr("src"))}if("scroll"!=c.event||undefined==a(b).attr("src")||c.placeholder==a(b).attr("src")||a.abovethetop(b,c)||a.leftofbegin(b,c)||a.belowthefold(b,c)||a.rightoffold(b,c)){if(c.placeholder){a(b).attr("src",c.placeholder)}else{a(b).removeAttr("src")}b.loaded=false}else{b.loaded=true}a(b).one("appear",function(){if(!this.loaded){a("<img />").bind("load",function(){a(b).hide().attr("src",a(b).attr("original"))[c.effect](c.effectspeed);b.loaded=true}).attr("src",a(b).attr("original"))}});if("scroll"!=c.event){a(b).bind(c.event,function(c){if(!b.loaded){a(b).trigger("appear")}})}});a(c.container).trigger(c.event);return this};a.belowthefold=function(b,c){if(c.container===undefined||c.container===window){var d=a(window).height()+a(window).scrollTop()}else{var d=a(c.container).offset().top+a(c.container).height()}return d<=a(b).offset().top-c.threshold};a.rightoffold=function(b,c){if(c.container===undefined||c.container===window){var d=a(window).width()+a(window).scrollLeft()}else{var d=a(c.container).offset().left+a(c.container).width()}return d<=a(b).offset().left-c.threshold};a.abovethetop=function(b,c){if(c.container===undefined||c.container===window){var d=a(window).scrollTop()}else{var d=a(c.container).offset().top}return d>=a(b).offset().top+c.threshold+a(b).height()};a.leftofbegin=function(b,c){if(c.container===undefined||c.container===window){var d=a(window).scrollLeft()}else{var d=a(c.container).offset().left}return d>=a(b).offset().left+c.threshold+a(b).width()};a.extend(a.expr[":"],{"below-the-fold":"$.belowthefold(a, {threshold : 0, container: window})","above-the-fold":"!$.belowthefold(a, {threshold : 0, container: window})","right-of-fold":"$.rightoffold(a, {threshold : 0, container: window})","left-of-fold":"!$.rightoffold(a, {threshold : 0, container: window})"})})(jQuery);
 
-//Infinite Scroll
-(function(a){a.fn.infinitescroll=function(b,c){function l(){if(n.isDone){i();return false}else{var b=o.children().get();if(b.length==0){return a.event.trigger("ajaxError",[{status:404}])}else{m.callback(o)}while(o[0].firstChild){p.appendChild(o[0].firstChild)}a(m.contentSelector)[0].appendChild(p);n.loadingMsg.fadeOut("normal");if(m.animate){var d=a(window).scrollTop()+a("#infscr-loading").height()+m.extraScrollPx+"px";a("html,body").animate({scrollTop:d},800,function(){n.isDuringAjax=false})}c.call(a(m.contentSelector)[0],b);if(!m.animate)n.isDuringAjax=false}}function k(){n.isDuringAjax=true;n.loadingMsg.appendTo(m.contentSelector).show();a(m.navSelector).hide();n.currPage++;d("heading into ajax",r);o=a(m.contentSelector).is("table")?a("<tbody/>"):a("<div/>");p=document.createDocumentFragment();o.load(r.join(n.currPage)+" "+m.itemSelector,null,l)}function j(){if(n.isDuringAjax||n.isInvalidPage||n.isDone)return;if(!h(m,n))return;a(document).trigger("retrieve.infscr")}function i(){n.loadingMsg.find("img").hide().parent().find("div").html(m.donetext).animate({opacity:1},2e3).fadeOut("normal");m.errorCallback()}function h(){var b=0+g()-(m.localMode?a(n.container).scrollTop():a(n.container).scrollTop()||a(n.container.ownerDocument.body).scrollTop())-a(m.localMode?n.container:window).height();d("math:",b,n.pixelsFromNavToBottom);var c=b;var e=n.pixelsFromNavToBottom;return b-m.bufferPx<n.pixelsFromNavToBottom}function g(){return m.localMode?a(n.container)[0].scrollHeight&&a(n.container)[0].scrollHeight:a(document).height()}function f(a){a.match(q)?a.match(q)[2]:a;if(a.match(/^(.*?)\b2\b(.*?$)/)){a=a.match(/^(.*?)\b2\b(.*?$)/).slice(1)}else if(a.match(/^(.*?)2(.*?$)/)){if(a.match(/^(.*?page=)2(\/.*|$)/)){a=a.match(/^(.*?page=)2(\/.*|$)/).slice(1);return a}d("Trying backup next selector parse technique. Treacherous waters here, matey.");a=a.match(/^(.*?)2(.*?$)/).slice(1)}else{if(a.match(/^(.*?page=)1(\/.*|$)/)){a=a.match(/^(.*?page=)1(\/.*|$)/).slice(1);return a}n.isInvalidPage=true}return a}function e(b){for(var c in b){if(c.indexOf&&c.indexOf("Selector")>-1&&a(b[c]).length===0){d("Your "+c+" found no elements.");return false}return true}}function d(){if(m.debug){window.console&&console.log.call(console,arguments)}}a.browser.ie6=a.browser.msie&&a.browser.version<7;var m=a.extend({},a.infinitescroll.defaults,b),n=a.infinitescroll,o,p;c=c||function(){};if(!e(m)){return false}n.container=m.localMode?this:document.documentElement;m.contentSelector=m.contentSelector||this;var q=/(.*?\/\/).*?(\/.*)/,r=a(m.nextSelector).attr("href");if(!r){d("Navigation selector not found");return}r=f(r);if(m.localMode)a(n.container)[0].scrollTop=0;n.pixelsFromNavToBottom=n.container==document.documentElement?300:g()+a(n.container).offset().top-a(m.navSelector).offset().top;n.loadingMsg=a('<li class="scro"><img alt="Loading..." src="'+m.loadingImg+'" /> '+m.loadingText+"</li>");(new Image).src=m.loadingImg;a(document).ajaxError(function(b,c,e){d("Page not found. Self-destructing...");if(c.status==404){i();n.isDone=true;a(m.localMode?this:window).unbind("scroll.infscr")}});a(m.localMode?this:window).bind("scroll.infscr",j).trigger("scroll.infscr");a(document).bind("retrieve.infscr",k);return this};a.infinitescroll={defaults:{debug:false,preload:false,nextSelector:"a#more:last",loadingImg:"img/square.gif",loadingText:" Please wait...",donetext:"Sorry, but we have no more loading for you!",navSelector:"div.navigation",contentSelector:null,extraScrollPx:150,itemSelector:"#allTimeline li",animate:false,localMode:false,bufferPx:400,errorCallback:function(){},callback:undefined},loadingImg:undefined,loadingMsg:undefined,container:undefined,currPage:1,currDOMChunk:null,isDuringAjax:false,isInvalidPage:false,isDone:false}})(jQuery);
+/*
+       --------------------------------
+       Infinite Scroll
+       --------------------------------
+       + https://github.com/paulirish/infinite-scroll
+       + version 2.0b2.111027
+       + Copyright 2011 Paul Irish & Luke Shumard
+       + Licensed under the MIT license
+       
+       + Documentation: http://infinite-scroll.com/
+       
+*/
+
+(function (window, $, undefined) {
+       
+       $.infinitescroll = function infscr(options, callback, element) {
+               
+               this.element = $(element);
+               this._create(options, callback);
+       
+       };
+       
+       $.infinitescroll.defaults = {
+               loading: {
+                       finished: undefined,
+                       finishedMsg: "<em>Congratulations, you've reached the edge of the timeline.</em>",
+                       img: "img/square.gif",
+                       msg: null,
+                       msgText: "<em>Loading more tweets...</em>",
+                       selector: null,
+                       speed: 'fast',
+                       start: undefined
+               },
+               state: {
+                       isDuringAjax: false,
+                       isInvalidPage: false,
+                       isDestroyed: false,
+                       isDone: false, // For when it goes all the way through the archive.
+                       isPaused: false,
+                       currPage: 1
+               },
+               callback: undefined,
+               debug: false,
+               behavior: undefined,
+               binder: $(window), // used to cache the selector
+               nextSelector: "div.navigation a:first",
+               navSelector: "div.navigation",
+               contentSelector: null, // rename to pageFragment
+               extraScrollPx: 150,
+               itemSelector: "div.post",
+               animate: false,
+               pathParse: undefined,
+               dataType: 'html',
+               appendCallback: true,
+               bufferPx: 40,
+               errorCallback: function () { },
+               infid: 0, //Instance ID
+               pixelsFromNavToBottom: undefined,
+               path: undefined
+       };
+
+
+    $.infinitescroll.prototype = {
+
+        /*     
+        ----------------------------
+        Private methods
+        ----------------------------
+        */
+
+        // Bind or unbind from scroll
+        _binding: function infscr_binding(binding) {
+
+            var instance = this,
+                               opts = instance.options;
+                               
+                       opts.v = '2.0b2.111027';
+
+            // if behavior is defined and this function is extended, call that instead of default
+                       if (!!opts.behavior && this['_binding_'+opts.behavior] !== undefined) {
+                               this['_binding_'+opts.behavior].call(this);
+                               return;
+                       }
+
+                       if (binding !== 'bind' && binding !== 'unbind') {
+                this._debug('Binding value  ' + binding + ' not valid')
+                return false;
+            }
+
+            if (binding == 'unbind') {
+
+                (this.options.binder).unbind('smartscroll.infscr.' + instance.options.infid);
+
+            } else {
+
+                (this.options.binder)[binding]('smartscroll.infscr.' + instance.options.infid, function () {
+                    instance.scroll();
+                });
+
+            };
+
+            this._debug('Binding', binding);
+
+        },
+
+               // Fundamental aspects of the plugin are initialized
+               _create: function infscr_create(options, callback) {
+
+            // If selectors from options aren't valid, return false
+            if (!this._validate(options)) { return false; }
+            // Define options and shorthand
+            var opts = this.options = $.extend(true, {}, $.infinitescroll.defaults, options),
+                               // get the relative URL - everything past the domain name.
+                               relurl = /(.*?\/\/).*?(\/.*)/,
+                               path = $(opts.nextSelector).attr('href');
+
+            // contentSelector is 'page fragment' option for .load() / .ajax() calls
+            opts.contentSelector = opts.contentSelector || this.element;
+
+            // loading.selector - if we want to place the load message in a specific selector, defaulted to the contentSelector
+            opts.loading.selector = opts.loading.selector || opts.contentSelector;
+
+            // if there's not path, return
+            if (!path) { this._debug('Navigation selector not found'); return; }
+
+            // Set the path to be a relative URL from root.
+            opts.path = this._determinepath(path);
+
+            // Define loading.msg
+            opts.loading.msg = $('<div id="infscr-loading"><img alt="Loading..." src="' + opts.loading.img + '" /><div>' + opts.loading.msgText + '</div></div>');
+
+            // Preload loading.img
+            (new Image()).src = opts.loading.img;
+
+            // distance from nav links to bottom
+            // computed as: height of the document + top offset of container - top offset of nav link
+            opts.pixelsFromNavToBottom = $(document).height() - $(opts.navSelector).offset().top;
+
+                       // determine loading.start actions
+            opts.loading.start = opts.loading.start || function() {
+                               
+                               $(opts.navSelector).hide();
+                               opts.loading.msg
+                                       .appendTo(opts.loading.selector)
+                                       .show(opts.loading.speed, function () {
+                               beginAjax(opts);
+                   });
+                       };
+                       
+                       // determine loading.finished actions
+                       opts.loading.finished = opts.loading.finished || function() {
+                               opts.loading.msg.fadeOut('normal');
+                       };
+
+            // callback loading
+            opts.callback = function(instance,data) {
+                               if (!!opts.behavior && instance['_callback_'+opts.behavior] !== undefined) {
+                                       instance['_callback_'+opts.behavior].call($(opts.contentSelector)[0], data);
+                               }
+                               if (callback) {
+                                       callback.call($(opts.contentSelector)[0], data, opts);
+                               }
+                       };
+
+            this._setup();
+
+        },
+
+        // Console log wrapper
+        _debug: function infscr_debug() {
+
+                       if (this.options && this.options.debug) {
+                return window.console && console.log.call(console, arguments);
+            }
+
+        },
+
+        // find the number to increment in the path.
+        _determinepath: function infscr_determinepath(path) {
+
+            var opts = this.options;
+
+                       // if behavior is defined and this function is extended, call that instead of default
+                       if (!!opts.behavior && this['_determinepath_'+opts.behavior] !== undefined) {
+                               this['_determinepath_'+opts.behavior].call(this,path);
+                               return;
+                       }
+
+            if (!!opts.pathParse) {
+
+                this._debug('pathParse manual');
+                return opts.pathParse(path, this.options.state.currPage+1);
+
+            } else if (path.match(/^(.*?)\b2\b(.*?$)/)) {
+                path = path.match(/^(.*?)\b2\b(.*?$)/).slice(1);
+
+                // if there is any 2 in the url at all.    
+            } else if (path.match(/^(.*?)2(.*?$)/)) {
+
+                // page= is used in django:
+                // http://www.infinite-scroll.com/changelog/comment-page-1/#comment-127
+                if (path.match(/^(.*?page=)2(\/.*|$)/)) {
+                    path = path.match(/^(.*?page=)2(\/.*|$)/).slice(1);
+                    return path;
+                }
+
+                path = path.match(/^(.*?)2(.*?$)/).slice(1);
+
+            } else {
+
+                // page= is used in drupal too but second page is page=1 not page=2:
+                // thx Jerod Fritz, vladikoff
+                if (path.match(/^(.*?page=)1(\/.*|$)/)) {
+                    path = path.match(/^(.*?page=)1(\/.*|$)/).slice(1);
+                    return path;
+                } else {
+                    this._debug('Sorry, we couldn\'t parse your Next (Previous Posts) URL. Verify your the css selector points to the correct A tag. If you still get this error: yell, scream, and kindly ask for help at infinite-scroll.com.');
+                    // Get rid of isInvalidPage to allow permalink to state
+                    opts.state.isInvalidPage = true;  //prevent it from running on this page.
+                }
+            }
+            this._debug('determinePath', path);
+            return path;
+
+        },
+
+        // Custom error
+        _error: function infscr_error(xhr) {
+
+            var opts = this.options;
+
+                       // if behavior is defined and this function is extended, call that instead of default
+                       if (!!opts.behavior && this['_error_'+opts.behavior] !== undefined) {
+                               this['_error_'+opts.behavior].call(this,xhr);
+                               return;
+                       }
+
+            if (xhr !== 'destroy' && xhr !== 'end') {
+                xhr = 'unknown';
+            }
+
+            this._debug('Error', xhr);
+
+            if (xhr == 'end') {
+                this._showdonemsg();
+            }
+
+            opts.state.isDone = true;
+            opts.state.currPage = 1; // if you need to go back to this instance
+            opts.state.isPaused = false;
+            this._binding('unbind');
+
+        },
+
+        // Load Callback
+        _loadcallback: function infscr_loadcallback(box, data) {
+
+            var opts = this.options,
+                       callback = this.options.callback, // GLOBAL OBJECT FOR CALLBACK
+                       result = (opts.state.isDone) ? 'done' : (!opts.appendCallback) ? 'no-append' : 'append',
+                       frag;
+       
+                       // if behavior is defined and this function is extended, call that instead of default
+                       if (!!opts.behavior && this['_loadcallback_'+opts.behavior] !== undefined) {
+                               this['_loadcallback_'+opts.behavior].call(this,box,data);
+                               return;
+                       }
+
+            switch (result) {
+
+                case 'done':
+
+                    this._showdonemsg();
+                    return false;
+
+                    break;
+
+                case 'no-append':
+
+                    if (opts.dataType == 'html') {
+                        data = '<div>' + data + '</div>';
+                        data = $(data).find(opts.itemSelector);
+                    };
+
+                    break;
+
+                case 'append':
+
+                    var children = box.children();
+
+                    // if it didn't return anything
+                    if (children.length == 0) {
+                        return this._error('end');
+                    }
+                                       
+                                       // added by esmizzle 2012-01-26 - update the path to the link for the next set of elements
+                                       var nexturl = $(data).find(opts.nextSelector).attr('href');
+                    this._debug('nexturl: '+ nexturl)
+                                       this.options.path[0] = nexturl;
+                                       this.options.path[1] = '#pathcomplete';
+
+                    // use a documentFragment because it works when content is going into a table or UL
+                    frag = document.createDocumentFragment();
+                    while (box[0].firstChild) {
+                        frag.appendChild(box[0].firstChild);
+                    }
+
+                    this._debug('contentSelector', $(opts.contentSelector)[0])
+                    $(opts.contentSelector)[0].appendChild(frag);
+                    // previously, we would pass in the new DOM element as context for the callback
+                    // however we're now using a documentfragment, which doesnt havent parents or children,
+                    // so the context is the contentContainer guy, and we pass in an array
+                    //   of the elements collected as the first argument.
+
+                    data = children.get();
+
+
+                    break;
+
+            }
+
+            // loadingEnd function
+                       opts.loading.finished.call($(opts.contentSelector)[0],opts)
+            
+
+            // smooth scroll to ease in the new content
+            if (opts.animate) {
+                var scrollTo = $(window).scrollTop() + $('#infscr-loading').height() + opts.extraScrollPx + 'px';
+                $('html,body').animate({ scrollTop: scrollTo }, 800, function () { opts.state.isDuringAjax = false; });
+            }
+
+            if (!opts.animate) opts.state.isDuringAjax = false; // once the call is done, we can allow it again.
+
+            callback(this,data);
+
+        },
+
+        _nearbottom: function infscr_nearbottom() {
+
+            var opts = this.options,
+                       pixelsFromWindowBottomToBottom = 0 + $(document).height() - (opts.binder.scrollTop()) - $(window).height();
+
+            // if behavior is defined and this function is extended, call that instead of default
+                       if (!!opts.behavior && this['_nearbottom_'+opts.behavior] !== undefined) {
+                               return this['_nearbottom_'+opts.behavior].call(this);
+                       }
+
+                       this._debug('math:', pixelsFromWindowBottomToBottom, opts.pixelsFromNavToBottom);
+
+            // if distance remaining in the scroll (including buffer) is less than the orignal nav to bottom....
+            return (pixelsFromWindowBottomToBottom - opts.bufferPx < opts.pixelsFromNavToBottom);
+
+        },
+
+               // Pause / temporarily disable plugin from firing
+        _pausing: function infscr_pausing(pause) {
+
+            var opts = this.options;
+
+            // if behavior is defined and this function is extended, call that instead of default
+                       if (!!opts.behavior && this['_pausing_'+opts.behavior] !== undefined) {
+                               this['_pausing_'+opts.behavior].call(this,pause);
+                               return;
+                       }
+
+                       // If pause is not 'pause' or 'resume', toggle it's value
+            if (pause !== 'pause' && pause !== 'resume' && pause !== null) {
+                this._debug('Invalid argument. Toggling pause value instead');
+            };
+
+            pause = (pause && (pause == 'pause' || pause == 'resume')) ? pause : 'toggle';
+
+            switch (pause) {
+                case 'pause':
+                    opts.state.isPaused = true;
+                    break;
+
+                case 'resume':
+                    opts.state.isPaused = false;
+                    break;
+
+                case 'toggle':
+                    opts.state.isPaused = !opts.state.isPaused;
+                    break;
+            }
+
+            this._debug('Paused', opts.state.isPaused);
+            return false;
+
+        },
+
+               // Behavior is determined
+               // If the behavior option is undefined, it will set to default and bind to scroll
+               _setup: function infscr_setup() {
+                       
+                       var opts = this.options;
+                       
+                       // if behavior is defined and this function is extended, call that instead of default
+                       if (!!opts.behavior && this['_setup_'+opts.behavior] !== undefined) {
+                               this['_setup_'+opts.behavior].call(this);
+                               return;
+                       }
+                       
+                       this._binding('bind');
+                       
+                       return false;
+                       
+               },
+
+        // Show done message
+        _showdonemsg: function infscr_showdonemsg() {
+
+            var opts = this.options;
+
+                       // if behavior is defined and this function is extended, call that instead of default
+                       if (!!opts.behavior && this['_showdonemsg_'+opts.behavior] !== undefined) {
+                               this['_showdonemsg_'+opts.behavior].call(this);
+                               return;
+                       }
+
+            opts.loading.msg
+                       .find('img')
+                       .hide()
+                       .parent()
+                       .find('div').html(opts.loading.finishedMsg).animate({ opacity: 1 }, 2000, function () {
+                           $(this).parent().fadeOut('normal');
+                       });
+
+            // user provided callback when done    
+            opts.errorCallback.call($(opts.contentSelector)[0],'done');
+
+        },
+
+               // grab each selector option and see if any fail
+        _validate: function infscr_validate(opts) {
+
+            for (var key in opts) {
+                if (key.indexOf && key.indexOf('Selector') > -1 && $(opts[key]).length === 0) {
+                    this._debug('Your ' + key + ' found no elements.');
+                    return false;
+                }
+                return true;
+            }
+
+        },
+
+        /*     
+        ----------------------------
+        Public methods
+        ----------------------------
+        */
+
+               // Bind to scroll
+               bind: function infscr_bind() {
+                       this._binding('bind');
+               },
+
+        // Destroy current instance of plugin
+        destroy: function infscr_destroy() {
+
+            this.options.state.isDestroyed = true;
+            return this._error('destroy');
+
+        },
+
+               // Set pause value to false
+               pause: function infscr_pause() {
+                       this._pausing('pause');
+               },
+               
+               // Set pause value to false
+               resume: function infscr_resume() {
+                       this._pausing('resume');
+               },
+
+        // Retrieve next set of content items
+        retrieve: function infscr_retrieve(pageNum) {
+
+            var instance = this,
+                               opts = instance.options,
+                               path = opts.path,
+                               box, frag, desturl, method, condition,
+                       pageNum = pageNum || null,
+                               getPage = (!!pageNum) ? pageNum : opts.state.currPage;
+                               beginAjax = function infscr_ajax(opts) {
+                                       
+                                       // increment the URL bit. e.g. /page/3/
+                       opts.state.currPage++;
+
+                       instance._debug('heading into ajax', path);
+
+                       // if we're dealing with a table we can't use DIVs
+                       box = $(opts.contentSelector).is('table') ? $('<tbody/>') : $('<div/>');
+
+                                       desturl = (path[1] == '#pathcomplete') ? path[0] : path.join(opts.state.currPage); // only throw the currPage in there if we need it
+                       instance._debug('desturl: '+desturl);
+
+                       method = (opts.dataType == 'html' || opts.dataType == 'json') ? opts.dataType : 'html+callback';
+                       if (opts.appendCallback && opts.dataType == 'html') method += '+callback'
+
+                       switch (method) {
+
+                           case 'html+callback':
+                               instance._debug('Using HTML via .load() method');
+                                                       box.load(desturl + ' ' + opts.itemSelector, null, function infscr_ajax_callback(responseText) {
+                                                               instance._loadcallback(box, responseText);
+                                                       });
+
+                               break;
+
+                           case 'html':
+                           case 'json':
+
+                               instance._debug('Using ' + (method.toUpperCase()) + ' via $.ajax() method');
+                               $.ajax({
+                                   // params
+                                   url: desturl,
+                                   dataType: opts.dataType,
+                                   complete: function infscr_ajax_callback(jqXHR, textStatus) {
+                                       condition = (typeof (jqXHR.isResolved) !== 'undefined') ? (jqXHR.isResolved()) : (textStatus === "success" || textStatus === "notmodified");
+                                       (condition) ? instance._loadcallback(box, jqXHR.responseText) : instance._error('end');
+                                   }
+                               });
+       
+                               break;
+                       }
+                               };
+                               
+                       // if behavior is defined and this function is extended, call that instead of default
+                       if (!!opts.behavior && this['retrieve_'+opts.behavior] !== undefined) {
+                               this['retrieve_'+opts.behavior].call(this,pageNum);
+                               return;
+                       }
+
+            
+                       // for manual triggers, if destroyed, get out of here
+                       if (opts.state.isDestroyed) {
+                this._debug('Instance is destroyed');
+                return false;
+            };
+
+            // we dont want to fire the ajax multiple times
+            opts.state.isDuringAjax = true;
+
+            opts.loading.start.call($(opts.contentSelector)[0],opts);
+
+        },
+
+        // Check to see next page is needed
+        scroll: function infscr_scroll() {
+
+            var opts = this.options,
+                               state = opts.state;
+
+            // if behavior is defined and this function is extended, call that instead of default
+                       if (!!opts.behavior && this['scroll_'+opts.behavior] !== undefined) {
+                               this['scroll_'+opts.behavior].call(this);
+                               return;
+                       }
+
+                       if (state.isDuringAjax || state.isInvalidPage || state.isDone || state.isDestroyed || state.isPaused) return;
+
+            if (!this._nearbottom()) return;
+
+            this.retrieve();
+
+        },
+               
+               // Toggle pause value
+               toggle: function infscr_toggle() {
+                       this._pausing();
+               },
+               
+               // Unbind from scroll
+               unbind: function infscr_unbind() {
+                       this._binding('unbind');
+               },
+               
+               // update options
+               update: function infscr_options(key) {
+                       if ($.isPlainObject(key)) {
+                               this.options = $.extend(true,this.options,key);
+                       }
+               }
+
+    }
+
+
+    /* 
+    ----------------------------
+    Infinite Scroll function
+    ----------------------------
+       
+    Borrowed logic from the following...
+       
+    jQuery UI
+    - https://github.com/jquery/jquery-ui/blob/master/ui/jquery.ui.widget.js
+       
+    jCarousel
+    - https://github.com/jsor/jcarousel/blob/master/lib/jquery.jcarousel.js
+       
+    Masonry
+    - https://github.com/desandro/masonry/blob/master/jquery.masonry.js                
+       
+    */
+
+    $.fn.infinitescroll = function infscr_init(options, callback) {
+
+
+        var thisCall = typeof options;
+
+        switch (thisCall) {
+
+            // method 
+            case 'string':
+
+                var args = Array.prototype.slice.call(arguments, 1);
+
+                this.each(function () {
+
+                    var instance = $.data(this, 'infinitescroll');
+
+                    if (!instance) {
+                        // not setup yet
+                        // return $.error('Method ' + options + ' cannot be called until Infinite Scroll is setup');
+                                               return false;
+                    }
+                    if (!$.isFunction(instance[options]) || options.charAt(0) === "_") {
+                        // return $.error('No such method ' + options + ' for Infinite Scroll');
+                                               return false;
+                    }
+
+                    // no errors!
+                    instance[options].apply(instance, args);
+
+                });
+
+                break;
+
+            // creation 
+            case 'object':
+
+                this.each(function () {
+
+                    var instance = $.data(this, 'infinitescroll');
+
+                    if (instance) {
+
+                        // update options of current instance
+                        instance.update(options);
+
+                    } else {
+
+                        // initialize new instance
+                        $.data(this, 'infinitescroll', new $.infinitescroll(options, callback, this));
+
+                    }
+
+                });
+
+                break;
+
+        }
+
+        return this;
+
+    };
+
+
+
+    /* 
+    * smartscroll: debounced scroll event for jQuery *
+    * https://github.com/lukeshumard/smartscroll
+    * Based on smartresize by @louis_remi: https://github.com/lrbabe/jquery.smartresize.js *
+    * Copyright 2011 Louis-Remi & Luke Shumard * Licensed under the MIT license. *
+    */
+
+    var event = $.event,
+               scrollTimeout;
+
+    event.special.smartscroll = {
+        setup: function () {
+            $(this).bind("scroll", event.special.smartscroll.handler);
+        },
+        teardown: function () {
+            $(this).unbind("scroll", event.special.smartscroll.handler);
+        },
+        handler: function (event, execAsap) {
+            // Save the context
+            var context = this,
+                     args = arguments;
+
+            // set correct event type
+            event.type = "smartscroll";
+
+            if (scrollTimeout) { clearTimeout(scrollTimeout); }
+            scrollTimeout = setTimeout(function () {
+                $.event.handle.apply(context, args);
+            }, execAsap === "execAsap" ? 0 : 100);
+        }
+    };
+
+    $.fn.smartscroll = function (fn) {
+        return fn ? this.bind("smartscroll", fn) : this.trigger("smartscroll", ["execAsap"]);
+    };
+
+
+})(window, jQuery);
+
 
 //Autocomplete
-(function(a){a.fn.extend({autocomplete:function(b,c){var d=typeof b=="string";c=a.extend({},a.Autocompleter.defaults,{url:d?b:null,data:d?null:b,delay:d?a.Autocompleter.defaults.delay:10,max:c&&!c.scroll?10:150},c);c.highlight=c.highlight||function(a){return a};c.formatMatch=c.formatMatch||c.formatItem;return this.each(function(){new a.Autocompleter(this,c)})},result:function(a){return this.bind("result",a)},search:function(a){return this.trigger("search",[a])},flushCache:function(){return this.trigger("flushCache")},setOptions:function(a){return this.trigger("setOptions",[a])},unautocomplete:function(){return this.trigger("unautocomplete")}});a.Autocompleter=function(b,c){function x(){e.removeClass(c.loadingClass)}function w(b){var d=[];var e=b.split("\n");for(var f=0;f<e.length;f++){var g=a.trim(e[f]);if(g){g=g.split("|");d[d.length]={data:g,value:g[0],result:c.formatResult&&c.formatResult(g,g[0])||g[0]}}}return d}function v(d,e,f){if(!c.matchCase)d=d.toLowerCase();var g=h.load(d);if(g&&g.length){e(d,g)}else if(typeof c.url=="string"&&c.url.length>0){var i={timestamp:+(new Date)};a.each(c.extraParams,function(a,b){i[a]=typeof b=="function"?b():b});a.ajax({mode:"abort",port:"autocomplete"+b.name,dataType:c.dataType,url:c.url,data:a.extend({q:q(d),limit:c.max},i),success:function(a){var b=c.parse&&c.parse(a)||w(a);h.add(d,b);e(d,b)}})}else{l.emptyList();f(d)}}function u(a,b){if(b&&b.length&&i){x();l.display(b,a);r(a,b[0].value);l.show()}else{t()}}function t(){var d=l.visible();l.hide();clearTimeout(f);x();if(c.mustMatch){e.search(function(a){if(!a){if(c.multiple){var b=p(e.val()).slice(0,-1);e.val(b.join(c.multipleSeparator)+(b.length?c.multipleSeparator:""))}else e.val("")}})}if(d)a.Autocompleter.Selection(b,b.value.length,b.value.length)}function s(){clearTimeout(f);f=setTimeout(t,200)}function r(f,h){if(c.autoFill&&q(e.val()).toLowerCase()==f.toLowerCase()&&j!=d.BACKSPACE){e.val(e.val()+h.substring(q(g).length));a.Autocompleter.Selection(b,g.length,g.length+h.length)}}function q(a){if(!c.multiple)return a;var b=p(a);return b[b.length-1]}function p(b){if(!b){return[""]}var d=b.split(c.multipleSeparator);var e=[];a.each(d,function(b,c){if(a.trim(c))e[b]=a.trim(c)});return e}function o(a,b){if(j==d.DEL){l.hide();return}var f=e.val();if(!b&&f==g)return;g=f;f=q(f);if(f.length>=c.minChars){e.addClass(c.loadingClass);if(!c.matchCase)f=f.toLowerCase();v(f,u,t)}else{x();l.hide()}}function n(){var a=l.selected();if(!a)return false;var b=a.result;g=b;if(c.multiple){var d=p(e.val());if(d.length>1){b=d.slice(0,d.length-1).join(c.multipleSeparator)+c.multipleSeparator+b}b+=c.multipleSeparator}e.val(b);t();e.trigger("result",[a.data,a.value]);return true}var d={UP:38,DOWN:40,DEL:46,TAB:9,RETURN:13,ESC:27,COMMA:188,PAGEUP:33,PAGEDOWN:34,BACKSPACE:8};var e=a(b).attr("autocomplete","off").addClass(c.inputClass);var f;var g="";var h=a.Autocompleter.Cache(c);var i=0;var j;var k={mouseDownOnSelect:false};var l=a.Autocompleter.Select(c,b,n,k);var m;a.browser.opera&&a(b.form).bind("submit.autocomplete",function(){if(m){m=false;return false}});e.bind((a.browser.opera?"keypress":"keydown")+".autocomplete",function(b){j=b.keyCode;switch(b.keyCode){case d.UP:b.preventDefault();if(l.visible()){l.prev()}else{o(0,true)}break;case d.DOWN:b.preventDefault();if(l.visible()){l.next()}else{o(0,true)}break;case d.PAGEUP:b.preventDefault();if(l.visible()){l.pageUp()}else{o(0,true)}break;case d.PAGEDOWN:b.preventDefault();if(l.visible()){l.pageDown()}else{o(0,true)}break;case c.multiple&&a.trim(c.multipleSeparator)==","&&d.COMMA:case d.TAB:case d.RETURN:if(n()){b.preventDefault();m=true;return false}break;case d.ESC:l.hide();break;default:clearTimeout(f);f=setTimeout(o,c.delay);break}}).focus(function(){i++}).blur(function(){i=0;if(!k.mouseDownOnSelect){s()}}).click(function(){if(i++>1&&!l.visible()){o(0,true)}}).bind("search",function(){function c(a,c){var d;if(c&&c.length){for(var f=0;f<c.length;f++){if(c[f].result.toLowerCase()==a.toLowerCase()){d=c[f];break}}}if(typeof b=="function")b(d);else e.trigger("result",d&&[d.data,d.value])}var b=arguments.length>1?arguments[1]:null;a.each(p(e.val()),function(a,b){v(b,c,c)})}).bind("flushCache",function(){h.flush()}).bind("setOptions",function(){a.extend(c,arguments[1]);if("data"in arguments[1])h.populate()}).bind("unautocomplete",function(){l.unbind();e.unbind();a(b.form).unbind(".autocomplete")});};a.Autocompleter.defaults={inputClass:"ac_input",resultsClass:"ac_results",loadingClass:"ac_loading",minChars:1,delay:400,matchCase:false,matchSubset:true,matchContains:false,cacheLength:10,max:100,mustMatch:false,extraParams:{},selectFirst:true,formatItem:function(a){return a[0]},formatMatch:null,autoFill:false,width:0,multiple:false,multipleSeparator:", ",highlight:function(a,b){return a.replace(new RegExp("(?![^&;]+;)(?!<[^<>]*)("+b.replace(/([\^\$\(\)\[\]\{\}\*\.\+\?\|\\])/gi,"\\$1")+")(?![^<>]*>)(?![^&;]+;)","gi"),"<strong>$1</strong>")},scroll:true,scrollHeight:180};a.Autocompleter.Cache=function(b){function h(){c={};d=0}function g(){if(!b.data)return false;var c={},d=0;if(!b.url)b.cacheLength=1;c[""]=[];for(var e=0,g=b.data.length;e<g;e++){var h=b.data[e];h=typeof h=="string"?[h]:h;var i=b.formatMatch(h,e+1,b.data.length);if(i===false)continue;var j=i.charAt(0).toLowerCase();if(!c[j])c[j]=[];var k={value:i,data:h,result:b.formatResult&&b.formatResult(h)||i};c[j].push(k);if(d++<b.max){c[""].push(k)}}a.each(c,function(a,c){b.cacheLength++;f(a,c)})}function f(a,e){if(d>b.cacheLength){h()}if(!c[a]){d++}c[a]=e}function e(a,c){if(!b.matchCase)a=a.toLowerCase();var d=a.indexOf(c);if(b.matchContains=="word"){d=a.toLowerCase().search("\\b"+c.toLowerCase())}if(d==-1)return false;return d==0||b.matchContains}var c={};var d=0;setTimeout(g,25);return{flush:h,add:f,populate:g,load:function(f){if(!b.cacheLength||!d)return null;if(!b.url&&b.matchContains){var g=[];for(var h in c){if(h.length>0){var i=c[h];a.each(i,function(a,b){if(e(b.value,f)){g.push(b)}})}}return g}else if(c[f]){return c[f]}else if(b.matchSubset){for(var j=f.length-1;j>=b.minChars;j--){var i=c[f.substr(0,j)];if(i){var g=[];a.each(i,function(a,b){if(e(b.value,f)){g[g.length]=b}});return g}}}return null}}};a.Autocompleter.Select=function(b,c,d,e){function s(){m.empty();var c=r(i.length);for(var d=0;d<c;d++){if(!i[d])continue;var e=b.formatItem(i[d].data,d+1,c,i[d].value,j);if(e===false)continue;var k=a("<li/>").html(b.highlight(e,j)).addClass(d%2==0?"ac_even":"ac_odd").appendTo(m)[0];a.data(k,"ac_data",i[d])}g=m.find("li");if(b.selectFirst){g.slice(0,1).addClass(f.ACTIVE);h=0}if(a.fn.bgiframe)m.bgiframe()}function r(a){return b.max&&b.max<a?b.max:a}function q(a){h+=a;if(h<0){h=g.size()-1}else if(h>=g.size()){h=0}}function p(a){g.slice(h,h+1).removeClass(f.ACTIVE);q(a);var c=g.slice(h,h+1).addClass(f.ACTIVE);if(b.scroll){var d=0;g.slice(0,h).each(function(){d+=this.offsetHeight});if(d+c[0].offsetHeight-m.scrollTop()>m[0].clientHeight){m.scrollTop(d+c[0].offsetHeight-m.innerHeight())}else if(d<m.scrollTop()){m.scrollTop(d)}}}function o(a){var b=a.target;while(b&&b.tagName!="LI")b=b.parentNode;if(!b)return[];return b}function n(){if(!k)return;l=a("<div/>").hide().addClass(b.resultsClass).css("position","absolute").appendTo(document.body);m=a("<ul/>").appendTo(l).mouseover(function(b){if(o(b).nodeName&&o(b).nodeName.toUpperCase()=="LI"){h=a("li",m).removeClass(f.ACTIVE).index(o(b));a(o(b)).addClass(f.ACTIVE)}}).click(function(b){a(o(b)).addClass(f.ACTIVE);d();c.focus();return false}).mousedown(function(){e.mouseDownOnSelect=true}).mouseup(function(){e.mouseDownOnSelect=false});if(b.width>0)l.css("width",b.width);k=false}var f={ACTIVE:"ac_over"};var g,h=-1,i,j="",k=true,l,m;return{display:function(a,b){n();i=a;j=b;s()},next:function(){p(1)},prev:function(){p(-1)},pageUp:function(){if(h!=0&&h-8<0){p(-h)}else{p(-8)}},pageDown:function(){if(h!=g.size()-1&&h+8>g.size()){p(g.size()-1-h)}else{p(8)}},hide:function(){l&&l.hide();g&&g.removeClass(f.ACTIVE);h=-1},visible:function(){return l&&l.is(":visible")},current:function(){return this.visible()&&(g.filter("."+f.ACTIVE)[0]||b.selectFirst&&g[0])},show:function(){var d=a(c).offset();l.css({width:typeof b.width=="string"||b.width>0?b.width:a(c).width(),top:d.top+c.offsetHeight,left:d.left}).show();if(b.scroll){m.scrollTop(0);m.css({maxHeight:b.scrollHeight,overflow:"auto"});if(a.browser.msie&&typeof document.body.style.maxHeight==="undefined"){var e=0;g.each(function(){e+=this.offsetHeight});var f=e>b.scrollHeight;m.css("height",f?b.scrollHeight:e);if(!f){g.width(m.width()-parseInt(g.css("padding-left"))-parseInt(g.css("padding-right")))}}}},selected:function(){var b=g&&g.filter("."+f.ACTIVE).removeClass(f.ACTIVE);return b&&b.length&&a.data(b[0],"ac_data")},emptyList:function(){m&&m.empty()},unbind:function(){l&&l.remove()}}};a.Autocompleter.Selection=function(a,b,c){if(a.createTextRange){var d=a.createTextRange();d.collapse(true);d.moveStart("character",b);d.moveEnd("character",c);d.select()}else if(a.setSelectionRange){a.setSelectionRange(b,c)}else{if(a.selectionStart){a.selectionStart=b;a.selectionEnd=c}}a.focus()}})(jQuery);
+(function(a){a.fn.extend({autocomplete:function(b,c){var d=typeof b=="string";c=a.extend({},a.Autocompleter.defaults,{url:d?b:null,data:d?null:b,delay:d?a.Autocompleter.defaults.delay:10,max:c&&!c.scroll?10:150},c);c.highlight=c.highlight||function(a){return a};c.formatMatch=c.formatMatch||c.formatItem;return this.each(function(){new a.Autocompleter(this,c)})},result:function(a){return this.bind("result",a)},search:function(a){return this.trigger("search",[a])},flushCache:function(){return this.trigger("flushCache")},setOptions:function(a){return this.trigger("setOptions",[a])},unautocomplete:function(){return this.trigger("unautocomplete")}});a.Autocompleter=function(b,c){function x(){e.removeClass(c.loadingClass)}function w(b){var d=[];var e=b.split("\n");for(var f=0;f<e.length;f++){var g=a.trim(e[f]);if(g){g=g.split("|");d[d.length]={data:g,value:g[0],result:c.formatResult&&c.formatResult(g,g[0])||g[0]}}}return d}function v(d,e,f){if(!c.matchCase)d=d.toLowerCase();var g=h.load(d);if(g&&g.length){e(d,g)}else if(typeof c.url=="string"&&c.url.length>0){var i={timestamp:+(new Date)};a.each(c.extraParams,function(a,b){i[a]=typeof b=="function"?b():b});a.ajax({mode:"abort",port:"autocomplete"+b.name,dataType:c.dataType,url:c.url,data:a.extend({q:q(d),limit:c.max},i),success:function(a){var b=c.parse&&c.parse(a)||w(a);h.add(d,b);e(d,b)}})}else{l.emptyList();f(d)}}function u(a,b){if(b&&b.length&&i){x();l.display(b,a);r(a,b[0].value);l.show()}else{t()}}function t(){var d=l.visible();l.hide();clearTimeout(f);x();if(c.mustMatch){e.search(function(a){if(!a){if(c.multiple){var b=p(e.val()).slice(0,-1);e.val(b.join(c.multipleSeparator)+(b.length?c.multipleSeparator:""))}else e.val("")}})}if(d)a.Autocompleter.Selection(b,b.value.length,b.value.length)}function s(){clearTimeout(f);f=setTimeout(t,200)}function r(f,h){if(c.autoFill&&q(e.val()).toLowerCase()==f.toLowerCase()&&j!=d.BACKSPACE){e.val(e.val()+h.substring(q(g).length));a.Autocompleter.Selection(b,g.length,g.length+h.length)}}function q(a){if(!c.multiple)return a;var b=p(a);return b[b.length-1]}function p(b){if(!b){return[""]}var d=b.split(c.multipleSeparator);var e=[];a.each(d,function(b,c){if(a.trim(c))e[b]=a.trim(c)});return e}function o(a,b){if(j==d.DEL){l.hide();return}var f=e.val();if(!b&&f==g)return;g=f;f=q(f);if(f.length>=c.minChars){e.addClass(c.loadingClass);if(!c.matchCase)f=f.toLowerCase();v(f,u,t)}else{x();l.hide()}}function n(){var a=l.selected();if(!a)return false;var b=a.result;g=b;if(c.multiple){var d=p(e.val());if(d.length>1){b=d.slice(0,d.length-1).join(c.multipleSeparator)+c.multipleSeparator+b}b+=c.multipleSeparator}e.val(b);t();e.trigger("result",[a.data,a.value]);return true}var d={UP:38,DOWN:40,DEL:46,TAB:9,RETURN:13,ESC:27,COMMA:188,PAGEUP:33,PAGEDOWN:34,BACKSPACE:8};var e=a(b).attr("autocomplete","off").addClass(c.inputClass);var f;var g="";var h=a.Autocompleter.Cache(c);var i=0;var j;var k={mouseDownOnSelect:false};var l=a.Autocompleter.Select(c,b,n,k);var m;a.browser.opera&&a(b.form).bind("submit.autocomplete",function(){if(m){m=false;return false}});e.bind((a.browser.opera?"keypress":"keydown")+".autocomplete",function(b){j=b.keyCode;switch(b.keyCode){case d.UP:b.preventDefault();if(l.visible()){l.prev()}else{o(0,true)}break;case d.DOWN:b.preventDefault();if(l.visible()){l.next()}else{o(0,true)}break;case d.PAGEUP:b.preventDefault();if(l.visible()){l.pageUp()}else{o(0,true)}break;case d.PAGEDOWN:b.preventDefault();if(l.visible()){l.pageDown()}else{o(0,true)}break;case c.multiple&&a.trim(c.multipleSeparator)==","&&d.COMMA:case d.TAB:case d.RETURN:if(n()){b.preventDefault();m=true;return false}break;case d.ESC:l.hide();break;default:clearTimeout(f);f=setTimeout(o,c.delay);break}}).focus(function(){i++}).blur(function(){i=0;if(!k.mouseDownOnSelect){s()}}).click(function(){if(i++>1&&!l.visible()){o(0,true)}}).bind("search",function(){function c(a,c){var d;if(c&&c.length){for(var f=0;f<c.length;f++){if(c[f].result.toLowerCase()==a.toLowerCase()){d=c[f];break}}}if(typeof b=="function")b(d);else e.trigger("result",d&&[d.data,d.value])}var b=arguments.length>1?arguments[1]:null;a.each(p(e.val()),function(a,b){v(b,c,c)})}).bind("flushCache",function(){h.flush()}).bind("setOptions",function(){a.extend(c,arguments[1]);if("data"in arguments[1])h.populate()}).bind("unautocomplete",function(){l.unbind();e.unbind();a(b.form).unbind(".autocomplete")});};a.Autocompleter.defaults={inputClass:"ac_input",resultsClass:"ac_results",loadingClass:"ac_loading",minChars:1,delay:400,matchCase:false,matchSubset:true,matchContains:false,cacheLength:10,max:100,mustMatch:false,extraParams:{},selectFirst:true,formatItem:function(a){return a[0]},formatMatch:null,autoFill:false,width:0,multiple:false,multipleSeparator:", ",highlight:function(a,b){return a.replace(new RegExp("(?![^&;]+;)(?!<[^<>]*)("+b.replace(/([\^\$\(\)\[\]\{\}\*\.\+\?\|\\])/gi,"\\$1")+")(?![^<>]*>)(?![^&;]+;)","gi"),"<strong>$1</strong>")},scroll:true,scrollHeight:180};a.Autocompleter.Cache=function(b){function h(){c={};d=0}function g(){if(!b.data)return false;var c={},d=0;if(!b.url)b.cacheLength=1;c[""]=[];for(var e=0,g=b.data.length;e<g;e++){var h=b.data[e];h=typeof h=="string"?[h]:h;var i=b.formatMatch(h,e+1,b.data.length);if(i===false)continue;var j=i.charAt(0).toLowerCase();if(!c[j])c[j]=[];var k={value:i,data:h,result:b.formatResult&&b.formatResult(h)||i};c[j].push(k);if(d++<b.max){c[""].push(k)}}a.each(c,function(a,c){b.cacheLength++;f(a,c)})}function f(a,e){if(d>b.cacheLength){h()}if(!c[a]){d++}c[a]=e}function e(a,c){if(!b.matchCase)a=a.toLowerCase();var d=a.indexOf(c);if(b.matchContains=="word"){d=a.toLowerCase().search("\\b"+c.toLowerCase())}if(d==-1)return false;return d==0||b.matchContains}var c={};var d=0;setTimeout(g,25);return{flush:h,add:f,populate:g,load:function(f){if(!b.cacheLength||!d)return null;if(!b.url&&b.matchContains){var g=[];for(var h in c){if(h.length>0){var i=c[h];a.each(i,function(a,b){if(e(b.value,f)){g.push(b)}})}}return g}else if(c[f]){return c[f]}else if(b.matchSubset){for(var j=f.length-1;j>=b.minChars;j--){var i=c[f.substr(0,j)];if(i){var g=[];a.each(i,function(a,b){if(e(b.value,f)){g[g.length]=b}});return g}}}return null}}};a.Autocompleter.Select=function(b,c,d,e){function s(){m.empty();var c=r(i.length);for(var d=0;d<c;d++){if(!i[d])continue;var e=b.formatItem(i[d].data,d+1,c,i[d].value,j);if(e===false)continue;var k=a("<li/>").html(b.highlight(e,j)).addClass(d%2==0?"ac_even":"ac_odd").appendTo(m)[0];a.data(k,"ac_data",i[d])}g=m.find("li");if(b.selectFirst){g.slice(0,1).addClass(f.ACTIVE);h=0}if(a.fn.bgiframe)m.bgiframe()}function r(a){return b.max&&b.max<a?b.max:a}function q(a){h+=a;if(h<0){h=g.size()-1}else if(h>=g.size()){h=0}}function p(a){g.slice(h,h+1).removeClass(f.ACTIVE);q(a);var c=g.slice(h,h+1).addClass(f.ACTIVE);if(b.scroll){var d=0;g.slice(0,h).each(function(){d+=this.offsetHeight});if(d+c[0].offsetHeight-m.scrollTop()>m[0].clientHeight){m.scrollTop(d+c[0].offsetHeight-m.innerHeight())}else if(d<m.scrollTop()){m.scrollTop(d)}}}function o(a){var b=a.target;while(b&&b.tagName!="LI")b=b.parentNode;if(!b)return[];return b}function n(){if(!k)return;l=a("<div/>").hide().addClass(b.resultsClass).css("position","absolute").appendTo(document.body);m=a("<ul/>").appendTo(l).mouseover(function(b){if(o(b).nodeName&&o(b).nodeName.toUpperCase()=="LI"){h=a("li",m).removeClass(f.ACTIVE).index(o(b));a(o(b)).addClass(f.ACTIVE)}}).click(function(b){b.preventDefault();a(o(b)).addClass(f.ACTIVE);d();c.focus()}).mousedown(function(){e.mouseDownOnSelect=true}).mouseup(function(){e.mouseDownOnSelect=false});if(b.width>0)l.css("width",b.width);k=false}var f={ACTIVE:"ac_over"};var g,h=-1,i,j="",k=true,l,m;return{display:function(a,b){n();i=a;j=b;s()},next:function(){p(1)},prev:function(){p(-1)},pageUp:function(){if(h!=0&&h-8<0){p(-h)}else{p(-8)}},pageDown:function(){if(h!=g.size()-1&&h+8>g.size()){p(g.size()-1-h)}else{p(8)}},hide:function(){l&&l.hide();g&&g.removeClass(f.ACTIVE);h=-1},visible:function(){return l&&l.is(":visible")},current:function(){return this.visible()&&(g.filter("."+f.ACTIVE)[0]||b.selectFirst&&g[0])},show:function(){var d=a(c).offset();l.css({width:typeof b.width=="string"||b.width>0?b.width:a(c).width(),top:d.top+c.offsetHeight,left:d.left}).show();if(b.scroll){m.scrollTop(0);m.css({maxHeight:b.scrollHeight,overflow:"auto"});if(a.browser.msie&&typeof document.body.style.maxHeight==="undefined"){var e=0;g.each(function(){e+=this.offsetHeight});var f=e>b.scrollHeight;m.css("height",f?b.scrollHeight:e);if(!f){g.width(m.width()-parseInt(g.css("padding-left"))-parseInt(g.css("padding-right")))}}}},selected:function(){var b=g&&g.filter("."+f.ACTIVE).removeClass(f.ACTIVE);return b&&b.length&&a.data(b[0],"ac_data")},emptyList:function(){m&&m.empty()},unbind:function(){l&&l.remove()}}};a.Autocompleter.Selection=function(a,b,c){if(a.createTextRange){var d=a.createTextRange();d.collapse(true);d.moveStart("character",b);d.moveEnd("character",c);d.select()}else if(a.setSelectionRange){a.setSelectionRange(b,c)}else{if(a.selectionStart){a.selectionStart=b;a.selectionEnd=c}}a.focus()}})(jQuery);
 
 //Timeago
 (function(a){function f(a){return(new Date).getTime()-a.getTime()}function e(a){return b.inWords(f(a))}function d(b){b=a(b);var c=a.trim(b.attr("id"));if(!b.data("timeago")){b.data("timeago",{datetime:new Date(c*1e3)})}return b.data("timeago")}function c(){var b=d(this);if(!isNaN(b.datetime)){a(this).text(e(b.datetime))}return this}a.timeago=function(a){if(a instanceof Date){return e(a)}};var b=a.timeago;a.extend(a.timeago,{settings:{refreshMillis:6e4,allowFuture:false,strings:{prefixAgo:null,prefixFromNow:null,suffixAgo:"ago",suffixFromNow:"from now",seconds:"%d seconds",minute:"about a minute",minutes:"%d minutes",hour:"about an hour",hours:"about %d hours",day:"a day",days:"%d days",month:"about a month",months:"%d months",year:"about a year",years:"%d years",numbers:[]}},inWords:function(b){function k(d,e){var f=a.isFunction(d)?d(e,b):d;var g=c.numbers&&c.numbers[e]||e;return f.replace(/%d/i,g)}var c=this.settings.strings;var d=c.prefixAgo;var e=c.suffixAgo;if(this.settings.allowFuture){if(b<0){d=c.prefixFromNow;e=c.suffixFromNow}b=Math.abs(b)}var f=b/1e3;var g=f/60;var h=g/60;var i=h/24;var j=i/365;var l=f<45&&k(c.seconds,Math.round(f))||f<90&&k(c.minute,1)||g<45&&k(c.minutes,Math.round(g))||g<90&&k(c.hour,1)||h<24&&k(c.hours,Math.round(h))||h<48&&k(c.day,1)||i<30&&k(c.days,Math.floor(i))||i<60&&k(c.month,1)||i<365&&k(c.months,Math.floor(i/30))||j<2&&k(c.year,1)||k(c.years,Math.floor(j));return a.trim([d,l,e].join(" "))}});a.fn.timeago=function(){var a=this;a.each(c);var d=b.settings;if(d.refreshMillis>0){setInterval(function(){a.each(c)},d.refreshMillis)}return a}})(jQuery);
@@ -42,4 +749,4 @@ jQuery.cookie=function(name,value,options){if(typeof value!='undefined'){options
 (function(a){a.extend(a.fn,{caret:function(a,b){var c=this[0];if(c){if(typeof a=="undefined"){if(c.selectionStart){a=c.selectionStart;b=c.selectionEnd}else if(document.selection){var d=this.val();var e=document.selection.createRange().duplicate();e.moveEnd("character",d.length);a=e.text==""?d.length:d.lastIndexOf(e.text);e=document.selection.createRange().duplicate();e.moveStart("character",-d.length);b=e.text.length}}else{var d=this.val();if(typeof a!="number")a=-1;if(typeof b!="number")b=-1;if(a<0)a=0;if(b>d.length)b=d.length;if(b<a)b=a;if(a>b)a=b;c.focus();if(c.selectionStart){c.selectionStart=a;c.selectionEnd=b}else if(document.selection){var e=c.createTextRange();e.collapse(true);e.moveStart("character",a);e.moveEnd("character",b-a);e.select()}}return{start:a,end:b}}}})})(jQuery);
 
 //ajaxFileupload
-jQuery.extend({createUploadIframe:function(a,b){var c="jUploadFrame"+a;var d='<iframe id="'+c+'" name="'+c+'" style="position:absolute; top:-9999px; left:-9999px"';if(window.ActiveXObject){if(typeof b=="boolean"){d+=' src="'+"javascript:false"+'"'}else if(typeof b=="string"){d+=' src="'+b+'"'}}d+=" />";jQuery(d).appendTo(document.body);return jQuery("#"+c).get(0)},createUploadForm:function(a,b,c){var d="jUploadForm"+a;var e="jUploadFile"+a;var f=jQuery('<form  action="" method="POST" name="'+d+'" id="'+d+'" enctype="multipart/form-data"></form>');if(c){for(var g in c){jQuery('<input type="hidden" name="'+g+'" value="'+c[g]+'" />').appendTo(f)}}var h=jQuery("#"+b);var i=jQuery(h).clone();jQuery(h).attr("id",e);jQuery(h).before(i);jQuery(h).appendTo(f);jQuery(f).css("position","absolute");jQuery(f).css("top","-1200px");jQuery(f).css("left","-1200px");jQuery(f).appendTo("body");return f},ajaxFileUpload:function(a){a=jQuery.extend({},jQuery.ajaxSettings,a);var b=(new Date).getTime();var c=jQuery.createUploadForm(b,a.fileElementId,typeof a.data=="undefined"?false:a.data);var d=jQuery.createUploadIframe(b,a.secureuri);var e="jUploadFrame"+b;var f="jUploadForm"+b;if(a.global&&!(jQuery.active++)){jQuery.event.trigger("ajaxStart")}var g=false;var h={};if(a.global)jQuery.event.trigger("ajaxSend",[h,a]);var i=function(b){var d=document.getElementById(e);try{if(d.contentWindow){h.responseText=d.contentWindow.document.body?d.contentWindow.document.body.innerHTML:null;h.responseXML=d.contentWindow.document.XMLDocument?d.contentWindow.document.XMLDocument:d.contentWindow.document}else if(d.contentDocument){h.responseText=d.contentDocument.document.body?d.contentDocument.document.body.innerHTML:null;h.responseXML=d.contentDocument.document.XMLDocument?d.contentDocument.document.XMLDocument:d.contentDocument.document}}catch(f){jQuery.handleError(a,h,null,f)}if(h||b=="timeout"){g=true;var i;try{i=b!="timeout"?"success":"error";if(i!="error"){var j=jQuery.uploadHttpData(h,a.dataType);if(a.success)a.success(j,i);if(a.global)jQuery.event.trigger("ajaxSuccess",[h,a])}else jQuery.handleError(a,h,i)}catch(f){i="error";jQuery.handleError(a,h,i,f)}if(a.global)jQuery.event.trigger("ajaxComplete",[h,a]);if(a.global&&!--jQuery.active)jQuery.event.trigger("ajaxStop");if(a.complete)a.complete(h,i);jQuery(d).unbind();setTimeout(function(){try{jQuery(d).remove();jQuery(c).remove()}catch(b){jQuery.handleError(a,h,null,b)}},100);h=null}};if(a.timeout>0){setTimeout(function(){if(!g)i("timeout")},a.timeout)}try{var c=jQuery("#"+f);jQuery(c).attr("action",a.url);jQuery(c).attr("method","POST");jQuery(c).attr("target",e);if(c.encoding){jQuery(c).attr("encoding","multipart/form-data")}else{jQuery(c).attr("enctype","multipart/form-data")}jQuery(c).submit()}catch(j){jQuery.handleError(a,h,null,j)}jQuery("#"+e).load(i);return{abort:function(){}}},uploadHttpData:function(r,type){var data=!type;data=type=="xml"||data?r.responseXML:r.responseText;if(type=="script")jQuery.globalEval(data);if(type=="json")eval("data = "+data);if(type=="html")jQuery("<div>").html(data).evalScripts();return data}});
\ No newline at end of file
+jQuery.extend({createUploadIframe:function(a,b){var c="jUploadFrame"+a;var d='<iframe id="'+c+'" name="'+c+'" style="position:absolute; top:-9999px; left:-9999px"';if(window.ActiveXObject){if(typeof b=="boolean"){d+=' src="'+"javascript:false"+'"'}else if(typeof b=="string"){d+=' src="'+b+'"'}}d+=" />";jQuery(d).appendTo(document.body);return jQuery("#"+c).get(0)},createUploadForm:function(a,b,c){var d="jUploadForm"+a;var e="jUploadFile"+a;var f=jQuery('<form  action="" method="POST" name="'+d+'" id="'+d+'" enctype="multipart/form-data"></form>');if(c){for(var g in c){jQuery('<input type="hidden" name="'+g+'" value="'+c[g]+'" />').appendTo(f)}}var h=jQuery("#"+b);var i=jQuery(h).clone();jQuery(h).attr("id",e);jQuery(h).before(i);jQuery(h).appendTo(f);jQuery(f).css("position","absolute");jQuery(f).css("top","-1200px");jQuery(f).css("left","-1200px");jQuery(f).appendTo("body");return f},ajaxFileUpload:function(a){a=jQuery.extend({},jQuery.ajaxSettings,a);var b=(new Date).getTime();var c=jQuery.createUploadForm(b,a.fileElementId,typeof a.data=="undefined"?false:a.data);var d=jQuery.createUploadIframe(b,a.secureuri);var e="jUploadFrame"+b;var f="jUploadForm"+b;if(a.global&&!(jQuery.active++)){jQuery.event.trigger("ajaxStart")}var g=false;var h={};if(a.global)jQuery.event.trigger("ajaxSend",[h,a]);var i=function(b){var d=document.getElementById(e);try{if(d.contentWindow){h.responseText=d.contentWindow.document.body?d.contentWindow.document.body.innerHTML:null;h.responseXML=d.contentWindow.document.XMLDocument?d.contentWindow.document.XMLDocument:d.contentWindow.document}else if(d.contentDocument){h.responseText=d.contentDocument.document.body?d.contentDocument.document.body.innerHTML:null;h.responseXML=d.contentDocument.document.XMLDocument?d.contentDocument.document.XMLDocument:d.contentDocument.document}}catch(f){jQuery.handleError(a,h,null,f)}if(h||b=="timeout"){g=true;var i;try{i=b!="timeout"?"success":"error";if(i!="error"){var j=jQuery.uploadHttpData(h,a.dataType);if(a.success)a.success(j,i);if(a.global)jQuery.event.trigger("ajaxSuccess",[h,a])}else jQuery.handleError(a,h,i)}catch(f){i="error";jQuery.handleError(a,h,i,f)}if(a.global)jQuery.event.trigger("ajaxComplete",[h,a]);if(a.global&&!--jQuery.active)jQuery.event.trigger("ajaxStop");if(a.complete)a.complete(h,i);jQuery(d).unbind();setTimeout(function(){try{jQuery(d).remove();jQuery(c).remove()}catch(b){jQuery.handleError(a,h,null,b)}},100);h=null}};if(a.timeout>0){setTimeout(function(){if(!g)i("timeout")},a.timeout)}try{var c=jQuery("#"+f);jQuery(c).attr("action",a.url);jQuery(c).attr("method","POST");jQuery(c).attr("target",e);if(c.encoding){jQuery(c).attr("encoding","multipart/form-data")}else{jQuery(c).attr("enctype","multipart/form-data")}jQuery(c).submit()}catch(j){jQuery.handleError(a,h,null,j)}jQuery("#"+e).load(i);return{abort:function(){}}},uploadHttpData:function(r,type){var data=!type;data=type=="xml"||data?r.responseXML:r.responseText;if(type=="script")jQuery.globalEval(data);if(type=="json")eval("data = "+data);if(type=="html")jQuery("<div>").html(data).evalScripts();return data}});
diff --git a/js/jquery.plugins.js b/js/jquery.plugins.js
deleted file mode 100644 (file)
index 8abb4dc..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-/*!\r
- * jQuery Plugins Package for Rabr\r
- * https://rabr.in/\r
- *\r
- * Copyright 2010, Plugins Authors\r
- * Packaged by disinfeqt\r
- * http://www.zdxia.com/\r
- * \r
- * Currently including:\r
- * - Cookie\r
- * - Color\r
- * - Tipsy\r
- * - Lazy Load\r
- * - Marquee\r
- */\r
-\r
-//Cookie\r
-jQuery.cookie=function(name,value,options){if(typeof value!='undefined'){options=options||{};if(value===null){value='';options=$.extend({},options);options.expires=-1}var expires='';if(options.expires&&(typeof options.expires=='number'||options.expires.toUTCString)){var date;if(typeof options.expires=='number'){date=new Date();date.setTime(date.getTime()+(options.expires*24*60*60*1000))}else{date=options.expires}expires='; expires='+date.toUTCString()}var path=options.path?'; path='+(options.path):'';var domain=options.domain?'; domain='+(options.domain):'';var secure=options.secure?'; secure':'';document.cookie=[name,'=',encodeURIComponent(value),expires,path,domain,secure].join('')}else{var cookieValue=null;if(document.cookie&&document.cookie!=''){var cookies=document.cookie.split(';');for(var i=0;i<cookies.length;i++){var cookie=jQuery.trim(cookies[i]);if(cookie.substring(0,name.length+1)==(name+'=')){cookieValue=decodeURIComponent(cookie.substring(name.length+1));break}}}return cookieValue}};\r
-\r
-//Color\r
-(function(d){d.each(["backgroundColor","borderBottomColor","borderLeftColor","borderRightColor","borderTopColor","color","outlineColor"],function(f,e){d.fx.step[e]=function(g){if(!g.colorInit){g.start=c(g.elem,e);g.end=b(g.end);g.colorInit=true}g.elem.style[e]="rgb("+[Math.max(Math.min(parseInt((g.pos*(g.end[0]-g.start[0]))+g.start[0]),255),0),Math.max(Math.min(parseInt((g.pos*(g.end[1]-g.start[1]))+g.start[1]),255),0),Math.max(Math.min(parseInt((g.pos*(g.end[2]-g.start[2]))+g.start[2]),255),0)].join(",")+")"}});function b(f){var e;if(f&&f.constructor==Array&&f.length==3){return f}if(e=/rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(f)){return[parseInt(e[1]),parseInt(e[2]),parseInt(e[3])]}if(e=/rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(f)){return[parseFloat(e[1])*2.55,parseFloat(e[2])*2.55,parseFloat(e[3])*2.55]}if(e=/#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(f)){return[parseInt(e[1],16),parseInt(e[2],16),parseInt(e[3],16)]}if(e=/#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(f)){return[parseInt(e[1]+e[1],16),parseInt(e[2]+e[2],16),parseInt(e[3]+e[3],16)]}if(e=/rgba\(0, 0, 0, 0\)/.exec(f)){return a.transparent}return a[d.trim(f).toLowerCase()]}function c(g,e){var f;do{f=d.curCSS(g,e);if(f!=""&&f!="transparent"||d.nodeName(g,"body")){break}e="backgroundColor"}while(g=g.parentNode);return b(f)}var a={aqua:[0,255,255],azure:[240,255,255],beige:[245,245,220],black:[0,0,0],blue:[0,0,255],brown:[165,42,42],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgrey:[169,169,169],darkgreen:[0,100,0],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkviolet:[148,0,211],fuchsia:[255,0,255],gold:[255,215,0],green:[0,128,0],indigo:[75,0,130],khaki:[240,230,140],lightblue:[173,216,230],lightcyan:[224,255,255],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightyellow:[255,255,224],lime:[0,255,0],magenta:[255,0,255],maroon:[128,0,0],navy:[0,0,128],olive:[128,128,0],orange:[255,165,0],pink:[255,192,203],purple:[128,0,128],violet:[128,0,128],red:[255,0,0],silver:[192,192,192],white:[255,255,255],yellow:[255,255,0],transparent:[255,255,255]}})(jQuery);\r
-\r
-//Tipsy\r
-(function($){$.fn.tipsy=function(options){options=$.extend({},$.fn.tipsy.defaults,options);return this.each(function(){var opts=$.fn.tipsy.elementOptions(this,options);$(this).hover(function(){$.data(this,'cancel.tipsy',true);var tip=$.data(this,'active.tipsy');if(!tip){tip=$('<div class="tipsy"><div class="tipsy-inner"/></div>');tip.css({position:'absolute',zIndex:100000});$.data(this,'active.tipsy',tip);}\r
-if($(this).attr('title')||typeof($(this).attr('original-title'))!='string'){$(this).attr('original-title',$(this).attr('title')||'').removeAttr('title');}\r
-var title;if(typeof opts.title=='string'){title=$(this).attr(opts.title=='title'?'original-title':opts.title);}else if(typeof opts.title=='function'){title=opts.title.call(this);}\r
-tip.find('.tipsy-inner')[opts.html?'html':'text'](title||opts.fallback);var pos=$.extend({},$(this).offset(),{width:this.offsetWidth,height:this.offsetHeight});tip.get(0).className='tipsy';tip.remove().css({top:0,left:0,visibility:'hidden',display:'block'}).appendTo(document.body);var actualWidth=tip[0].offsetWidth,actualHeight=tip[0].offsetHeight;var gravity=(typeof opts.gravity=='function')?opts.gravity.call(this):opts.gravity;switch(gravity.charAt(0)){case'n':tip.css({top:pos.top+pos.height,left:pos.left+pos.width/2-actualWidth/2}).addClass('tipsy-north');break;case's':tip.css({top:pos.top-actualHeight,left:pos.left+pos.width/2-actualWidth/2}).addClass('tipsy-south');break;case'e':tip.css({top:pos.top+pos.height/2-actualHeight/2,left:pos.left-actualWidth}).addClass('tipsy-east');break;case'w':tip.css({top:pos.top+pos.height/2-actualHeight/2,left:pos.left+pos.width}).addClass('tipsy-west');break;}\r
-if(opts.fade){tip.css({opacity:0,display:'block',visibility:'visible'}).animate({opacity:0.8});}else{tip.css({visibility:'visible'});}},function(){$.data(this,'cancel.tipsy',false);var self=this;setTimeout(function(){if($.data(this,'cancel.tipsy'))return;var tip=$.data(self,'active.tipsy');if(opts.fade){tip.stop().fadeOut(function(){$(this).remove();});}else{tip.remove();}},100);});});};$.fn.tipsy.elementOptions=function(ele,options){return $.metadata?$.extend({},options,$(ele).metadata()):options;};$.fn.tipsy.defaults={fade:false,fallback:'',gravity:'n',html:false,title:'title'};$.fn.tipsy.autoNS=function(){return $(this).offset().top>($(document).scrollTop()+$(window).height()/2)?'s':'n';};$.fn.tipsy.autoWE=function(){return $(this).offset().left>($(document).scrollLeft()+$(window).width()/2)?'e':'w';};})(jQuery);\r
-\r
-//Lazy Load\r
-(function($){$.fn.lazyload=function(options){var settings={threshold:0,failurelimit:0,event:"scroll",effect:"show",container:window};if(options){$.extend(settings,options);}\r
-var elements=this;if("scroll"==settings.event){$(settings.container).bind("scroll",function(event){var counter=0;elements.each(function(){if($.abovethetop(this,settings)||$.leftofbegin(this,settings)){}else if(!$.belowthefold(this,settings)&&!$.rightoffold(this,settings)){$(this).trigger("appear");}else{if(counter++>settings.failurelimit){return false;}}});var temp=$.grep(elements,function(element){return!element.loaded;});elements=$(temp);});}\r
-this.each(function(){var self=this;if(undefined==$(self).attr("original")){$(self).attr("original",$(self).attr("src"));}\r
-if("scroll"!=settings.event||undefined==$(self).attr("src")||settings.placeholder==$(self).attr("src")||($.abovethetop(self,settings)||$.leftofbegin(self,settings)||$.belowthefold(self,settings)||$.rightoffold(self,settings))){if(settings.placeholder){$(self).attr("src",settings.placeholder);}else{$(self).removeAttr("src");}\r
-self.loaded=false;}else{self.loaded=true;}\r
-$(self).one("appear",function(){if(!this.loaded){$("<img />").bind("load",function(){$(self).hide().attr("src",$(self).attr("original"))\r
-[settings.effect](settings.effectspeed);self.loaded=true;}).attr("src",$(self).attr("original"));};});if("scroll"!=settings.event){$(self).bind(settings.event,function(event){if(!self.loaded){$(self).trigger("appear");}});}});$(settings.container).trigger(settings.event);return this;};$.belowthefold=function(element,settings){if(settings.container===undefined||settings.container===window){var fold=$(window).height()+$(window).scrollTop();}else{var fold=$(settings.container).offset().top+$(settings.container).height();}\r
-return fold<=$(element).offset().top-settings.threshold;};$.rightoffold=function(element,settings){if(settings.container===undefined||settings.container===window){var fold=$(window).width()+$(window).scrollLeft();}else{var fold=$(settings.container).offset().left+$(settings.container).width();}\r
-return fold<=$(element).offset().left-settings.threshold;};$.abovethetop=function(element,settings){if(settings.container===undefined||settings.container===window){var fold=$(window).scrollTop();}else{var fold=$(settings.container).offset().top;}\r
-return fold>=$(element).offset().top+settings.threshold+$(element).height();};$.leftofbegin=function(element,settings){if(settings.container===undefined||settings.container===window){var fold=$(window).scrollLeft();}else{var fold=$(settings.container).offset().left;}\r
-return fold>=$(element).offset().left+settings.threshold+$(element).width();};$.extend($.expr[':'],{"below-the-fold":"$.belowthefold(a, {threshold : 0, container: window})","above-the-fold":"!$.belowthefold(a, {threshold : 0, container: window})","right-of-fold":"$.rightoffold(a, {threshold : 0, container: window})","left-of-fold":"!$.rightoffold(a, {threshold : 0, container: window})"});})(jQuery);\r
-\r
-//Marquee\r
-(function($){$.fn.rabrMarquee=function(options){var opts=$.extend({},$.fn.rabrMarquee.defaults,options);return this.each(function(){var $marquee=$(this);var _scrollObj=$marquee.get(0);var scrollW=$marquee.width();var scrollH=$marquee.height();var $element=$marquee.children();var $kids=$element.children();var scrollSize=0;var _type=(opts.direction=='left'||opts.direction=='right')?1:0;$element.css(_type?'width':'height',10000);if(opts.isEqual){scrollSize=$kids[_type?'outerWidth':'outerHeight']()*$kids.length;}else{$kids.each(function(){scrollSize+=$(this)[_type?'outerWidth':'outerHeight']();});}\r
-if(scrollSize<(_type?scrollW:scrollH))return;$element.append($kids.clone()).css(_type?'width':'height',scrollSize*2);var numMoved=0;function scrollFunc(){var _dir=(opts.direction=='left'||opts.direction=='right')?'scrollLeft':'scrollTop';if(opts.loop>0){numMoved+=opts.scrollAmount;if(numMoved>scrollSize*opts.loop){_scrollObj[_dir]=0;return clearInterval(moveId);}}\r
-if(opts.direction=='left'||opts.direction=='up'){_scrollObj[_dir]+=opts.scrollAmount;if(_scrollObj[_dir]>=scrollSize){_scrollObj[_dir]=0;}}else{_scrollObj[_dir]-=opts.scrollAmount;if(_scrollObj[_dir]<=0){_scrollObj[_dir]=scrollSize;}}}\r
-var moveId=setInterval(scrollFunc,opts.scrollDelay);$marquee.hover(function(){clearInterval(moveId);},function(){clearInterval(moveId);moveId=setInterval(scrollFunc,opts.scrollDelay);});});};$.fn.rabrMarquee.defaults={isEqual:true,loop:0,direction:'left',scrollAmount:1,scrollDelay:20};$.fn.rabrMarquee.setDefaults=function(settings){$.extend($.fn.rabrMarquee.defaults,settings);};})(jQuery);
\ No newline at end of file
diff --git a/js/jquery.tools.min.js b/js/jquery.tools.min.js
deleted file mode 100644 (file)
index d2347b9..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-/*
- * jquery.tools 1.1.2 - The missing UI library for the Web
- * 
- * [tools.tooltip-1.1.3, tools.overlay-1.1.2, tools.expose-1.0.5]
- * 
- * Copyright (c) 2009 Tero Piirainen
- * http://flowplayer.org/tools/
- *
- * Dual licensed under MIT and GPL 2+ licenses
- * http://www.opensource.org/licenses
- * 
- * -----
- * 
- * File generated: Thu Dec 24 07:22:44 GMT 2009
- */
-(function(c){var d=[];c.tools=c.tools||{};c.tools.tooltip={version:"1.1.3",conf:{effect:"toggle",fadeOutSpeed:"fast",tip:null,predelay:0,delay:30,opacity:1,lazy:undefined,position:["top","center"],offset:[0,0],cancelDefault:true,relative:false,oneInstance:true,events:{def:"mouseover,mouseout",input:"focus,blur",widget:"focus mouseover,blur mouseout",tooltip:"mouseover,mouseout"},api:false},addEffect:function(e,g,f){b[e]=[g,f]}};var b={toggle:[function(e){var f=this.getConf(),g=this.getTip(),h=f.opacity;if(h<1){g.css({opacity:h})}g.show();e.call()},function(e){this.getTip().hide();e.call()}],fade:[function(e){this.getTip().fadeIn(this.getConf().fadeInSpeed,e)},function(e){this.getTip().fadeOut(this.getConf().fadeOutSpeed,e)}]};function a(f,g){var p=this,k=c(this);f.data("tooltip",p);var l=f.next();if(g.tip){l=c(g.tip);if(l.length>1){l=f.nextAll(g.tip).eq(0);if(!l.length){l=f.parent().nextAll(g.tip).eq(0)}}}function o(u){var t=g.relative?f.position().top:f.offset().top,s=g.relative?f.position().left:f.offset().left,v=g.position[0];t-=l.outerHeight()-g.offset[0];s+=f.outerWidth()+g.offset[1];var q=l.outerHeight()+f.outerHeight();if(v=="center"){t+=q/2}if(v=="bottom"){t+=q}v=g.position[1];var r=l.outerWidth()+f.outerWidth();if(v=="center"){s-=r/2}if(v=="left"){s-=r}return{top:t,left:s}}var i=f.is(":input"),e=i&&f.is(":checkbox, :radio, select, :button"),h=f.attr("type"),n=g.events[h]||g.events[i?(e?"widget":"input"):"def"];n=n.split(/,\s*/);if(n.length!=2){throw"Tooltip: bad events configuration for "+h}f.bind(n[0],function(r){if(g.oneInstance){c.each(d,function(){this.hide()})}var q=l.data("trigger");if(q&&q[0]!=this){l.hide().stop(true,true)}r.target=this;p.show(r);n=g.events.tooltip.split(/,\s*/);l.bind(n[0],function(){p.show(r)});if(n[1]){l.bind(n[1],function(){p.hide(r)})}});f.bind(n[1],function(q){p.hide(q)});if(!c.browser.msie&&!i&&!g.predelay){f.mousemove(function(){if(!p.isShown()){f.triggerHandler("mouseover")}})}if(g.opacity<1){l.css("opacity",g.opacity)}var m=0,j=f.attr("title");if(j&&g.cancelDefault){f.removeAttr("title");f.data("title",j)}c.extend(p,{show:function(r){if(r){f=c(r.target)}clearTimeout(l.data("timer"));if(l.is(":animated")||l.is(":visible")){return p}function q(){l.data("trigger",f);var t=o(r);if(g.tip&&j){l.html(f.data("title"))}r=r||c.Event();r.type="onBeforeShow";k.trigger(r,[t]);if(r.isDefaultPrevented()){return p}t=o(r);l.css({position:"absolute",top:t.top,left:t.left});var s=b[g.effect];if(!s){throw'Nonexistent effect "'+g.effect+'"'}s[0].call(p,function(){r.type="onShow";k.trigger(r)})}if(g.predelay){clearTimeout(m);m=setTimeout(q,g.predelay)}else{q()}return p},hide:function(r){clearTimeout(l.data("timer"));clearTimeout(m);if(!l.is(":visible")){return}function q(){r=r||c.Event();r.type="onBeforeHide";k.trigger(r);if(r.isDefaultPrevented()){return}b[g.effect][1].call(p,function(){r.type="onHide";k.trigger(r)})}if(g.delay&&r){l.data("timer",setTimeout(q,g.delay))}else{q()}return p},isShown:function(){return l.is(":visible, :animated")},getConf:function(){return g},getTip:function(){return l},getTrigger:function(){return f},bind:function(q,r){k.bind(q,r);return p},onHide:function(q){return this.bind("onHide",q)},onBeforeShow:function(q){return this.bind("onBeforeShow",q)},onShow:function(q){return this.bind("onShow",q)},onBeforeHide:function(q){return this.bind("onBeforeHide",q)},unbind:function(q){k.unbind(q);return p}});c.each(g,function(q,r){if(c.isFunction(r)){p.bind(q,r)}})}c.prototype.tooltip=function(e){var f=this.eq(typeof e=="number"?e:0).data("tooltip");if(f){return f}var g=c.extend(true,{},c.tools.tooltip.conf);if(c.isFunction(e)){e={onBeforeShow:e}}else{if(typeof e=="string"){e={tip:e}}}e=c.extend(true,g,e);if(typeof e.position=="string"){e.position=e.position.split(/,?\s/)}if(e.lazy!==false&&(e.lazy===true||this.length>20)){this.one("mouseover",function(h){f=new a(c(this),e);f.show(h);d.push(f)})}else{this.each(function(){f=new a(c(this),e);d.push(f)})}return e.api?f:this}})(jQuery);
-(function(c){c.tools=c.tools||{};c.tools.overlay={version:"1.1.2",addEffect:function(e,f,g){b[e]=[f,g]},conf:{top:"10%",left:"center",absolute:false,speed:"normal",closeSpeed:"fast",effect:"default",close:null,oneInstance:true,closeOnClick:true,closeOnEsc:true,api:false,expose:null,target:null}};var b={};c.tools.overlay.addEffect("default",function(e){this.getOverlay().fadeIn(this.getConf().speed,e)},function(e){this.getOverlay().fadeOut(this.getConf().closeSpeed,e)});var d=[];function a(g,k){var o=this,m=c(this),n=c(window),j,i,h,e=k.expose&&c.tools.expose.version;var f=k.target||g.attr("rel");i=f?c(f):null||g;if(!i.length){throw"Could not find Overlay: "+f}if(g&&g.index(i)==-1){g.click(function(p){o.load(p);return p.preventDefault()})}c.each(k,function(p,q){if(c.isFunction(q)){m.bind(p,q)}});c.extend(o,{load:function(u){if(o.isOpened()){return o}var r=b[k.effect];if(!r){throw'Overlay: cannot find effect : "'+k.effect+'"'}if(k.oneInstance){c.each(d,function(){this.close(u)})}u=u||c.Event();u.type="onBeforeLoad";m.trigger(u);if(u.isDefaultPrevented()){return o}h=true;if(e){i.expose().load(u)}var t=k.top;var s=k.left;var p=i.outerWidth({margin:true});var q=i.outerHeight({margin:true});if(typeof t=="string"){t=t=="center"?Math.max((n.height()-q)/2,0):parseInt(t,10)/100*n.height()}if(s=="center"){s=Math.max((n.width()-p)/2,0)}if(!k.absolute){t+=n.scrollTop();s+=n.scrollLeft()}i.css({top:t,left:s,position:"absolute"});u.type="onStart";m.trigger(u);r[0].call(o,function(){if(h){u.type="onLoad";m.trigger(u)}});if(k.closeOnClick){c(document).bind("click.overlay",function(w){if(!o.isOpened()){return}var v=c(w.target);if(v.parents(i).length>1){return}c.each(d,function(){this.close(w)})})}if(k.closeOnEsc){c(document).unbind("keydown.overlay").bind("keydown.overlay",function(v){if(v.keyCode==27){c.each(d,function(){this.close(v)})}})}return o},close:function(q){if(!o.isOpened()){return o}q=q||c.Event();q.type="onBeforeClose";m.trigger(q);if(q.isDefaultPrevented()){return}h=false;b[k.effect][1].call(o,function(){q.type="onClose";m.trigger(q)});var p=true;c.each(d,function(){if(this.isOpened()){p=false}});if(p){c(document).unbind("click.overlay").unbind("keydown.overlay")}return o},getContent:function(){return i},getOverlay:function(){return i},getTrigger:function(){return g},getClosers:function(){return j},isOpened:function(){return h},getConf:function(){return k},bind:function(p,q){m.bind(p,q);return o},unbind:function(p){m.unbind(p);return o}});c.each("onBeforeLoad,onStart,onLoad,onBeforeClose,onClose".split(","),function(p,q){o[q]=function(r){return o.bind(q,r)}});if(e){if(typeof k.expose=="string"){k.expose={color:k.expose}}c.extend(k.expose,{api:true,closeOnClick:k.closeOnClick,closeOnEsc:false});var l=i.expose(k.expose);l.onBeforeClose(function(p){o.close(p)});o.onClose(function(p){l.close(p)})}j=i.find(k.close||".close");if(!j.length&&!k.close){j=c('<div class="close"></div>');i.prepend(j)}j.click(function(p){o.close(p)})}c.fn.overlay=function(e){var f=this.eq(typeof e=="number"?e:0).data("overlay");if(f){return f}if(c.isFunction(e)){e={onBeforeLoad:e}}var g=c.extend({},c.tools.overlay.conf);e=c.extend(true,g,e);this.each(function(){f=new a(c(this),e);d.push(f);c(this).data("overlay",f)});return e.api?f:this}})(jQuery);
-(function(b){b.tools=b.tools||{};b.tools.expose={version:"1.0.5",conf:{maskId:null,loadSpeed:"slow",closeSpeed:"fast",closeOnClick:true,closeOnEsc:true,zIndex:9998,opacity:0.8,color:"#456",api:false}};function a(){if(b.browser.msie){var f=b(document).height(),e=b(window).height();return[window.innerWidth||document.documentElement.clientWidth||document.body.clientWidth,f-e<20?e:f]}return[b(window).width(),b(document).height()]}function c(h,g){var e=this,j=b(this),d=null,f=false,i=0;b.each(g,function(k,l){if(b.isFunction(l)){j.bind(k,l)}});b(window).resize(function(){e.fit()});b.extend(this,{getMask:function(){return d},getExposed:function(){return h},getConf:function(){return g},isLoaded:function(){return f},load:function(n){if(f){return e}i=h.eq(0).css("zIndex");if(g.maskId){d=b("#"+g.maskId)}if(!d||!d.length){var l=a();d=b("<div/>").css({position:"absolute",top:0,left:0,width:l[0],height:l[1],display:"none",opacity:0,zIndex:g.zIndex});if(g.maskId){d.attr("id",g.maskId)}b("body").append(d);var k=d.css("backgroundColor");if(!k||k=="transparent"||k=="rgba(0, 0, 0, 0)"){d.css("backgroundColor",g.color)}if(g.closeOnEsc){b(document).bind("keydown.unexpose",function(o){if(o.keyCode==27){e.close()}})}if(g.closeOnClick){d.bind("click.unexpose",function(o){e.close(o)})}}n=n||b.Event();n.type="onBeforeLoad";j.trigger(n);if(n.isDefaultPrevented()){return e}b.each(h,function(){var o=b(this);if(!/relative|absolute|fixed/i.test(o.css("position"))){o.css("position","relative")}});h.css({zIndex:Math.max(g.zIndex+1,i=="auto"?0:i)});var m=d.height();if(!this.isLoaded()){d.css({opacity:0,display:"block"}).fadeTo(g.loadSpeed,g.opacity,function(){if(d.height()!=m){d.css("height",m)}n.type="onLoad";j.trigger(n)})}f=true;return e},close:function(k){if(!f){return e}k=k||b.Event();k.type="onBeforeClose";j.trigger(k);if(k.isDefaultPrevented()){return e}d.fadeOut(g.closeSpeed,function(){k.type="onClose";j.trigger(k);h.css({zIndex:b.browser.msie?i:null})});f=false;return e},fit:function(){if(d){var k=a();d.css({width:k[0],height:k[1]})}},bind:function(k,l){j.bind(k,l);return e},unbind:function(k){j.unbind(k);return e}});b.each("onBeforeLoad,onLoad,onBeforeClose,onClose".split(","),function(k,l){e[l]=function(m){return e.bind(l,m)}})}b.fn.expose=function(d){var e=this.eq(typeof d=="number"?d:0).data("expose");if(e){return e}if(typeof d=="string"){d={color:d}}var f=b.extend({},b.tools.expose.conf);d=b.extend(f,d);this.each(function(){e=new c(b(this),d);b(this).data("expose",e)});return d.api?e:this}})(jQuery);
index 21bb4a3..969479b 100644 (file)
-$(function(){\r
-       $(".rt_btn").click(function(e){\r
-               e.preventDefault();\r
-               if ($("#textbox").length > 0) {\r
-                       onRT($(this));\r
-               } else {\r
-                       $("#info_head").after('<h2>What are you doing?</h2>' + formHTML);\r
-                       formFunc();\r
-                       onRT($(this));\r
-               }\r
-       });\r
-       $(".retw_btn").live("click", function(e){\r
-                       e.preventDefault();\r
-                       onNwRT($(this));\r
-       });\r
-       $(".rt_undo").live("click", function(e){\r
-               e.preventDefault();\r
-               onUndoRt($(this));\r
-       });\r
-       $(".replie_btn").live("click", function(e){\r
-               e.preventDefault();\r
-               var replie_id = $(this).parent().parent().find(".status_word").find(".user_name").text();\r
-               if ($("#textbox").length > 0) {\r
-                       onReplie($(this),e);\r
-               } else {\r
-                       $("#info_head").after('<h2>In reply to ' + replie_id + '</h2>' + formHTML);\r
-                       formFunc();\r
-                       onReplie($(this),e);\r
-               }\r
-       });\r
-\r
-       $("#list_send_btn").click(function(e){\r
-               e.preventDefault();\r
-               if ($("#textbox").length == 0) {\r
-                       $("#info_head").after('<h2>What are you doing?</h2>' + formHTML);\r
-               formFunc();\r
-               }\r
-       });\r
-       \r
-       $(".favor_btn").live("click", function(e){\r
-               e.preventDefault();\r
-               onFavor($(this));\r
-       });\r
-\r
-       $("#list_follow_btn").live("click", function(e){\r
-               e.preventDefault();\r
-               var $this = $(this);\r
-               var id = $("#info_name").text();\r
-               updateSentTip("Following list " + id + "...", 5000, "ing");\r
-               \r
-               $.ajax({\r
-                       url: "ajax/list.php",\r
-                       type: "POST",\r
-                       data: "action=create&id=" + id,\r
-                       success: function(msg) {\r
-                               if (msg.indexOf("success") >= 0) {\r
-                                       updateSentTip("You have followed " + id + ".", 3000, "success");\r
-                                       $this.after('<a class="info_btn_hover" id="list_block_btn" href="#">Unfollow</a>');\r
-                                       $this.remove();\r
-                               } else {\r
-                                       updateSentTip("Failed to follow list " + id + ".", 3000, "failure");\r
-                               }\r
-                       },\r
-                       error: function(msg) {\r
-                               updateSentTip("Failed to follow list " + id + ".", 3000, "failure");\r
-                       }\r
-               });\r
-       });\r
-       \r
-       \r
-       $("#list_block_btn").live("click", function(e){\r
-               e.preventDefault();\r
-               var $this = $(this);\r
-               var id = $("#info_name").text();\r
-               updateSentTip("Unfollowing list " + id + "...");\r
-               $.ajax({\r
-                       url: "ajax/list.php",\r
-                       type: "POST",\r
-                       data: "action=destory&id=" + id,\r
-                       success: function(msg) {\r
-                               if (msg.indexOf("success") >= 0) {\r
-                                       updateSentTip("You have unfollowed list " + id + ".", 3000, "success");\r
-                                       $this.after('<a class="info_btn" id="list_follow_btn" href="javascript:void(0)">Unfollow</a>');\r
-                                       $this.remove();\r
-                               } else {\r
-                                       updateSentTip("Failed to unfollow list " + id + ".", 3000, "failure");\r
-                               }\r
-                       },\r
-                       error: function(msg) {\r
-                               updateSentTip("Failed to unfollow list " + id + ".", 3000, "failure");\r
-                       }\r
-               });\r
-               \r
-       });\r
-       \r
-       document.onclick = function(){\r
-               document.title =document.title.replace(/(\([0-9]+\))/g, "");\r
-       }\r
-       var args = location.href.split("?")[1]; \r
-       if (!args.split("&")[1] || args.split("&")[1] == "p=1") {\r
-               setInterval(function(){\r
-                               update();\r
-               }, 2000*60);\r
-       }\r
-});\r
-\r
-function update() {\r
-       var since_id = $(".timeline li:first-child").find(".status_id").text();\r
-       var list_id = $("#info_name").text();\r
-       $.ajax({\r
-               url: "ajax/updateList.php",\r
-               type: "GET",\r
-               dataType: "text",\r
-               data: "id=" + list_id + "&since_id=" + since_id,\r
-               success: function(msg) {\r
-                       \r
-                       if ($.trim(msg).indexOf("</li>") > 0) {\r
-                               $(".timeline").prepend(msg);\r
-                               var num = 0;\r
-                               if (document.title.match(/\d+/) != null) {\r
-                                       num = parseInt(document.title.match(/\d+/));\r
-                               }\r
-                               document.title = "(" + (num+$(msg).length )+ ")" + document.title.replace(/(\([0-9]+\))/g, "");\r
-                       }\r
-                       \r
-               }\r
-       });\r
-}
\ No newline at end of file
+$(function(){
+       $(".rt_btn").click(function(e){
+               e.preventDefault();
+               if ($("#textbox").length > 0) {
+                       onRT($(this));
+               } else {
+                       $("#info_head").after('<h2>What are you doing?</h2>' + formHTML);
+                       formFunc();
+                       onRT($(this));
+               }
+       });
+       $(".retw_btn").live("click", function(e){
+                       e.preventDefault();
+                       onNwRT($(this));
+       });
+       $(".rt_undo").live("click", function(e){
+               e.preventDefault();
+               onUndoRt($(this));
+       });
+       $(".replie_btn").live("click", function(e){
+               e.preventDefault();
+               var replie_id = $(this).parent().parent().find(".status_word").find(".user_name").attr("id");
+               if ($("#textbox").length > 0) {
+                       onReplie($(this),e);
+               } else {
+                       $("#info_head").after('<h2>In reply to ' + replie_id + '</h2>' + formHTML);
+                       formFunc();
+                       onReplie($(this),e);
+               }
+       });
+
+       $("#list_send_btn").click(function(e){
+               e.preventDefault();
+               if ($("#textbox").length == 0) {
+                       $("#info_head").after('<h2>What are you doing?</h2>' + formHTML);
+               formFunc();
+               }
+       });
+       
+       $(".favor_btn").live("click", function(e){
+               e.preventDefault();
+               onFavor($(this));
+       });
+
+       $("#list_follow_btn").live("click", function(e){
+               e.preventDefault();
+               var $this = $(this);
+               var id = $("#info_name").text();
+               updateSentTip("Following list " + id + "...", 5000, "ing");
+               
+               $.ajax({
+                       url: "ajax/list.php",
+                       type: "POST",
+                       data: "action=create&id=" + id,
+                       success: function(msg) {
+                               if (msg.indexOf("success") >= 0) {
+                                       updateSentTip("You have followed " + id + ".", 3000, "success");
+                                       $this.after('<a class="info_btn_hover" id="list_block_btn" href="#">Unfollow</a>');
+                                       $this.remove();
+                               } else {
+                                       updateSentTip("Failed to follow list " + id + ".", 3000, "failure");
+                               }
+                       },
+                       error: function(msg) {
+                               updateSentTip("Failed to follow list " + id + ".", 3000, "failure");
+                       }
+               });
+       });
+       
+       
+       $("#list_block_btn").live("click", function(e){
+               e.preventDefault();
+               var $this = $(this);
+               var id = $("#info_name").text();
+               updateSentTip("Unfollowing list " + id + "...", 5000, "ing");
+               $.ajax({
+                       url: "ajax/list.php",
+                       type: "POST",
+                       data: "action=destory&id=" + id,
+                       success: function(msg) {
+                               if (msg.indexOf("success") >= 0) {
+                                       updateSentTip("You have unfollowed list " + id + ".", 3000, "success");
+                                       $this.after('<a class="info_btn" id="list_follow_btn" href="#">Follow</a>');
+                                       $this.remove();
+                               } else {
+                                       updateSentTip("Failed to unfollow list " + id + ".", 3000, "failure");
+                               }
+                       },
+                       error: function(msg) {
+                               updateSentTip("Failed to unfollow list " + id + ".", 3000, "failure");
+                       }
+               });
+               
+       });
+       
+       document.onclick = function(){
+               document.title =document.title.replace(/(\([0-9]+\))/g, "");
+       }
+       var args = location.href.split("?")[1]; 
+       if (!args.split("&")[1] || args.split("&")[1] == "p=1") {
+               setInterval(function(){
+                               update();
+               }, 2000*60);
+       }
+});
+
+function update() {
+       var since_id = $(".timeline li:first-child").find(".status_id").text();
+       var list_id = $("#info_name").text();
+       $.ajax({
+               url: "ajax/updateList.php",
+               type: "GET",
+               dataType: "text",
+               data: "id=" + list_id + "&since_id=" + since_id,
+               success: function(msg) {
+                       
+                       if ($.trim(msg).indexOf("</li>") > 0) {
+                               $(".timeline").prepend(msg);
+                               var num = 0;
+                               if (document.title.match(/\d+/) != null) {
+                                       num = parseInt(document.title.match(/\d+/));
+                               }
+                               document.title = "(" + (num+$(msg).length )+ ")" + document.title.replace(/(\([0-9]+\))/g, "");
+                       }
+                       
+               }
+       });
+}
index f7d1abe..ec0c2f8 100644 (file)
@@ -1,40 +1,42 @@
-$(function(){\r
-       $(".delete_btn").hide();\r
-       $(".rank_list").find("li").live("mouseover", function(){\r
-               $(this).find(".delete_btn").css("display", "inline-block");\r
-       });\r
-       \r
-       $(".rank_list").find("li").live("mouseout", function(){\r
-               $(this).find(".delete_btn").hide();\r
-       });\r
-       \r
-       $(".list_delete_btn").click(function(e){\r
-               e.preventDefault();\r
-               var $this = $(this);  \r
-               var list_id = $(".list_id").text();\r
-               var member_name = $.trim($(this).parent().parent().find(".rank_screenname").text());\r
-               member_name = member_name.replace("(","").replace(")","");\r
-               var member_id = $.trim($(this).parent().parent().find("#rank_id").text());\r
-               \r
-               var confirm = window.confirm("Are you sure to delete " + member_name + "?");\r
-               if (confirm) {\r
-                       updateSentTip("Deleting " + member_name + "...", 5000, "ing");\r
-                       $.ajax({\r
-                               url: "ajax/delete.php",\r
-                               type: "POST",\r
-                               data: "id=" + list_id + "&list_member=" + member_id,\r
-                               success: function(msg) {\r
-                                       if (msg.indexOf("success") >= 0) {\r
-                                               $this.parent().parent().parent().remove();\r
-                                               updateSentTip(member_name + " has been deleted.", 3000, "success");\r
-                                       } else {\r
-                                               updateSentTip("Failed to delete " + member_name + ".", 3000, "failure");\r
-                                       }\r
-                               },\r
-                               error: function(msg) {\r
-                                       updateSentTip("Failed to delete " + member_name + ".", 3000, "failure");\r
-                               }\r
-                       });\r
-               }\r
-       });\r
-});\r
+$(function(){
+       $(".delete_btn").hide();
+       $(".rank_list").find("li").live("mouseover", function(){
+               $(this).find(".delete_btn").css("display", "inline-block");
+       });
+       
+       $(".rank_list").find("li").live("mouseout", function(){
+               $(this).find(".delete_btn").hide();
+       });
+       
+       $(".list_delete_btn").click(function(e){
+               e.preventDefault();
+               var $this = $(this);  
+               var lidparts = $(".list_id").text().split("/");
+               var slug = lidparts[1];
+               var owner = lidparts[0].replace("@","");
+               var member_name = $.trim($(this).parent().parent().find(".rank_screenname").text());
+               member_name = member_name.replace("(","").replace(")","");
+               var member_id = $.trim($(this).parent().parent().find("#rank_id").text());
+               
+               var confirm = window.confirm("Are you sure to delete " + member_name + "?");
+               if (confirm) {
+                       updateSentTip("Deleting " + member_name + "...", 5000, "ing");
+                       $.ajax({
+                               url: "ajax/delete.php",
+                               type: "POST",
+                               data: "slug=" + slug + "&owner=" + owner + "&list_member=" + member_id,
+                               success: function(msg) {
+                                       if (msg.indexOf("success") >= 0) {
+                                               $this.parent().parent().parent().remove();
+                                               updateSentTip(member_name + " has been deleted.", 3000, "success");
+                                       } else {
+                                               updateSentTip("Failed to delete " + member_name + ".", 3000, "failure");
+                                       }
+                               },
+                               error: function(msg) {
+                                       updateSentTip("Failed to delete " + member_name + ".", 3000, "failure");
+                               }
+                       });
+               }
+       });
+});
index 77e1a25..845a03e 100644 (file)
-$(function(){\r
-       $(".rt_btn").live("click", function(e){\r
-               e.preventDefault();\r
-               onRT($(this));\r
-       });\r
-       \r
-       $(".replie_btn").live("click", function(e){\r
-               e.preventDefault();\r
-               onReplie($(this),e);\r
-       });\r
-       $(".favor_btn").live("click", function(e){\r
-               e.preventDefault();\r
-               onFavor($(this));\r
-       });\r
-       $(".unfollow_list").live("click",function(e){\r
-               e.preventDefault();\r
-               var $this = $(this);\r
-               var id = $(this).parent().parent().find(".rank_name").text().substr(1);\r
-               updateSentTip("Unfollowing lists...", 5000, "ing");\r
-               $.ajax({\r
-                       url: "ajax/list.php",\r
-                       type: "POST",\r
-                       data: "action=destory&id=" + id,\r
-                       success: function(msg) {\r
-                               if (msg.indexOf("success") >= 0) {\r
-                                       updateSentTip("Successfully unfollowing list" + id, 3000, "success");\r
-                                       $this.remove();\r
-                               } else {\r
-                                       updateSentTip("Unfollow failed. Please try again.", 3000, "failure");\r
-                               }\r
-                       },\r
-                       error: function(msg) {\r
-                               updateSentTip("Unfollow failed. Please try again.", 3000, "failure");\r
-                       }\r
-               });\r
-               \r
-       });\r
-\r
-       $(".delete_list").click(function(e){\r
-               e.preventDefault();\r
-               var $this = $(this);  \r
-               var list_id = $(this).parent().parent().find(".rank_name").text().substr(1);\r
-               var confirm = window.confirm("Do you really want to delete" + list_id + "?");\r
-               if (confirm) {\r
-                       updateSentTip("deleting list" + list_id + "...", 5000, "ing");\r
-                       $.ajax({\r
-                               url: "ajax/delete.php",\r
-                               type: "POST",\r
-                               data: "list_id=" + list_id,\r
-                               success: function(msg) {\r
-                                       if (msg.indexOf("success") >= 0) {\r
-                                               $this.parent().parent().parent().remove();\r
-                                               updateSentTip("Successfully deleting" + list_id, 3000, "success");\r
-                                       } else {\r
-                                               updateSentTip("Delete failed. Please try again.", 3000, "failure");\r
-                                       }\r
-                               },\r
-                               error: function(msg) {\r
-                                       updateSentTip("Delete failed. Please try again.", 3000, "failure");\r
-                               }\r
-                       });\r
-               }\r
-       });\r
-       \r
-       $("#list_create_btn").click(function(e){\r
-               e.preventDefault();\r
-               $("#list_form").toggle("fast");\r
-               $("#list_name").focus().val("");\r
-               $("#list_description").val("");\r
-               $("#list_protect").removeAttr("checked");\r
-               $("#pre_list_name").val("");\r
-               $("#is_edit").val(0);\r
-       });\r
-       \r
-       $(".edit_list").click(function(e){\r
-               e.preventDefault();\r
-               var parent = $(this).parent().parent();\r
-               var list_name = parent.find(".rank_name").text().split("/")[1];\r
-               var list_description = parent.find(".rank_description").text().slice(3);\r
-               var list_protect = parent.find(".rank_count").text().indexOf("隐私群") > 0;\r
-\r
-               $("#list_form").show("fast");\r
-               $("#list_name").focus().val(list_name);\r
-               $("#list_description").val(list_description);\r
-               if (list_protect) { \r
-                       $("#list_protect").attr("checked", "checked");\r
-               } else {\r
-                       $("#list_protect").removeAttr("checked");\r
-               }\r
-               $("#is_edit").val(1);\r
-               $("#pre_list_name").val(list_name);\r
-       })\r
-       \r
-       \r
-       \r
-       $(".add_member").click(function(e){\r
-               e.preventDefault();\r
-               $("#member_form").remove();\r
-               var position = $(this).position();\r
-               var liPosition = $(this).parent().parent().parent().position();\r
-               var list_name = $(this).parent().parent().find(".rank_name").text().split("/")[1];\r
-               $('<form method="POST" action="./lists.php?t=1" id="member_form">' +\r
-               '<span>User ID:(Saperated with comma, e.g. JLHwung,twitter)</span>' +\r
-               '<span><textarea type="text" name="list_members" id="list_members"></textarea></span>' +\r
-               '<input type="hidden" name="member_list_name" value="' + list_name + '" />' +\r
-               '<span><input type="submit" class="btn" id="member_submit" value="Submit" /> <input type="button" class="btn" id="member_cancel" value="Cancel" /></span>' +\r
-           '</form>').appendTo("#statuses").css("left", liPosition.left + position.left).css("top", liPosition.top + position.top + 30);\r
-               \r
-               $("#member_cancel").click(function(){\r
-                       $("#member_form").remove();\r
-               })\r
-       })\r
-       \r
-});
\ No newline at end of file
+$(function(){
+       $(".rt_btn").live("click", function(e){
+               e.preventDefault();
+               onRT($(this));
+       });
+       
+       $(".replie_btn").live("click", function(e){
+               e.preventDefault();
+               onReplie($(this),e);
+       });
+       $(".favor_btn").live("click", function(e){
+               e.preventDefault();
+               onFavor($(this));
+       });
+       $(".unfollow_list").live("click",function(e){
+               e.preventDefault();
+               var $this = $(this);
+               var id = $this.parent().parent().find(".rank_name").text().substr(1);
+               updateSentTip("Unfollowing lists...", 5000, "ing");
+               $.ajax({
+                       url: "ajax/list.php",
+                       type: "POST",
+                       data: "action=destory&id=" + id,
+                       success: function(msg) {
+                               if (msg.indexOf("success") >= 0) {
+                                       updateSentTip("Successfully unfollowing list " + id, 3000, "success");
+                                       $this.parent().parent().parent().fadeOut("fast");
+                               } else {
+                                       updateSentTip("Unfollow failed. Please try again.", 3000, "failure");
+                               }
+                       },
+                       error: function(msg) {
+                               updateSentTip("Unfollow failed. Please try again.", 3000, "failure");
+                       }
+               });
+               
+       });
+
+       $(".delete_list").live("click", function(e){
+               e.preventDefault();
+               var $this = $(this);  
+               var list_slug = $this.parent().parent().find(".rank_name").text().split("/")[1];
+               var confirm = window.confirm("Do you really want to delete " + list_slug + "?");
+               if (confirm) {
+                       updateSentTip("deleting list " + list_slug + "...", 5000, "ing");
+                       $.ajax({
+                               url: "ajax/delete.php",
+                               type: "POST",
+                               data: "list_slug=" + list_slug,
+                               success: function(msg) {
+                                       if (msg.indexOf("success") >= 0) {
+                                               updateSentTip("Successfully deleting " + list_slug, 3000, "success");
+                                               $this.parent().parent().parent().fadeOut("fast");
+                                       } else {
+                                               updateSentTip("Delete failed. Please try again.", 3000, "failure");
+                                       }
+                               },
+                               error: function(msg) {
+                                       updateSentTip("Delete failed. Please try again.", 3000, "failure");
+                               }
+                       });
+               }
+       });
+       
+       $("#list_create_btn").live("click", function(e){
+               e.preventDefault();
+               $("#list_form").toggle("fast");
+               $("#list_name").focus().val("");
+               $("#list_description").val("");
+               $("#list_protect").removeAttr("checked");
+               $("#pre_list_name").val("");
+               $("#list_spanid").val("");
+               $("#is_edit").val(0);
+               $("#list_submit").val("Create");
+       });
+       
+       $(".edit_list").live("click", function(e){
+               e.preventDefault();
+               var parent = $(this).parent().parent();
+               var list_name = parent.find(".rank_name").text().split("/")[1];
+               var list_description = parent.find(".rank_description").text().slice(5);
+               var list_protect = parent.find(".rank_count").text().indexOf("Private") > 0;
+
+               $("#list_form").show("fast");
+               $("#list_name").focus().val(list_name);
+               $("#list_description").val(list_description);
+               if (list_protect) { 
+                       $("#list_protect").attr("checked", "checked");
+               } else {
+                       $("#list_protect").removeAttr("checked");
+               }
+               $("#list_spanid").val(parent.attr("id"));
+               $("#is_edit").val(1);
+               $("#list_submit").val("Edit");
+               $("#pre_list_name").val(list_name);
+       })
+       
+       $("#list_submit").live("click", function(e){
+               e.preventDefault();
+               var list_name = $("#list_name").val();
+               if (list_name.length == 0) {
+                       window.alert("List name cannot be empty!");
+                       return;
+               }
+               $('#list_form').slideToggle(300);
+               var list_description = $("#list_description").val();
+               var list_protect = $("#list_protect").attr("checked") == "checked" ? "private" : "public";
+               var pre_list_name = $("#pre_list_name").val();
+               var is_edit = $("#is_edit").val();
+               var postdata = {"name" : list_name,
+                               "description" : list_description,
+                               "mode" : list_protect};
+               if (is_edit == 1) {
+                       postdata["slug"] = pre_list_name;
+                       updateSentTip("editing list " + pre_list_name + "...", 5000, "ing");
+                       var spanid = $("#list_spanid").val();
+               } else
+                       updateSentTip("creating list " + list_name + "...", 5000, "ing");
+                       
+               $.ajax({
+                       url: "ajax/modifyList.php",
+                       type: "POST",
+                       dataType: "json",
+                       data: postdata,
+                       success: function(msg) {
+                               if (msg.result == 'success') {
+                                       if (is_edit == 1) {
+                                               updateSentTip("Successfully modifying list " + pre_list_name, 3000, "success");
+                                               var rank_content = $("#"+spanid);
+                                               rank_content.find(".rank_name").html('<a href="list.php?id='+msg.listuri+'"><em>'+msg.username+'/</em>'+list_name+'</a>');
+                                               var rank_count = rank_content.find(".rank_count");
+                                               rank_count.html(rank_count.html().replace(/Public|Private/, list_protect == "public" ? "Public" : "Private"));
+                                               rank_content.find(".rank_description").html("Bio: "+list_description);
+                                       }
+                                       else {
+                                               updateSentTip("Successfully creating list " + list_name, 3000, "success");
+                                               var html = '<li><span class=\"rank_img\"><img src="'+msg.imgurl+'" /></span>';
+                                               html += '<div class="rank_content" id="'+msg.contentid+'"><span class="rank_num"><span class="rank_name">';
+                                               html +='<a href="list.php?id='+msg.listuri+'"><em>'+msg.username+'/</em>'+list_name+'</a>';
+                                               html += '</span></span><span class="rank_count">Followers: 0&nbsp;&nbsp;Members: 0&nbsp;&nbsp;'+(list_protect == "public" ? "Public" : "Private")+'</span>';
+                                               html += '<span class="rank_description">Bio: '+list_description+'</span>';
+                                               html += '<span id="list_action"><a id="btn" href="#" class="edit_list">Edit</a> <a id="btn" href="#" class="delete_list">Delete</a> <a id="btn" href="#" class="add_member">Add Members</a></span>';
+                                               html += "</div></li>";
+                                               $(html).prependTo($(".rank_list")).fadeIn('fast');
+                                       }
+                               } else {
+                                       if (is_edit == 1)
+                                               updateSentTip("Editing failed. Please try again.", 3000, "failure");
+                                       else
+                                               updateSentTip("Creating failed. Please try again.", 3000, "failure");
+                               }
+                       }
+               });
+       });
+       
+       $(".add_member").live("click", function(e){
+               e.preventDefault();
+               $("#member_form").remove();
+               var position = $(this).position();
+               var liPosition = $(this).parent().parent().parent().position();
+               var list_name = $(this).parent().parent().find(".rank_name").text().split("/")[1];
+               var owner_name = $(this).parent().parent().find(".rank_name").text().split("/")[0];
+               var rank_count = $(this).parent().parent().find(".rank_count");
+               owner_name = owner_name.split("@")[1];
+               $('<form method="POST" action="./lists.php?t=1" id="member_form">' +
+               '<span>User ID:(Saperated with comma, e.g. JLHwung,twitter)</span>' +
+               '<span><textarea type="text" name="list_members" id="list_members"></textarea></span>' +
+               '<span><input type="submit" class="btn" id="member_submit" value="Submit" /> <input type="button" class="btn" id="member_cancel" value="Cancel" /></span>' +
+           '</form>').appendTo("#statuses").css("left", liPosition.left + position.left).css("top", liPosition.top + position.top + 30);
+               
+               $("#member_cancel").click(function(){
+                       $("#member_form").remove();
+               });
+               
+               $("#member_submit").click(function(e){
+                       e.preventDefault();
+                       var list_members = $("#list_members").val();
+                       if (list_members.length <= 0) {
+                               window.alert("User IDs cannot be empty!");
+                               return;
+                       }
+                       $("#member_form").remove();
+                       updateSentTip("adding members to list " + list_name + "...", 5000, "ing");
+                        $.ajax({
+                                url: "ajax/addMembersToList.php",
+                                type: "POST",
+                                data: {        "slug" : list_name,
+                                       "owner" : owner_name,
+                                       "add_members" : list_members},
+                                success: function(msg) {
+                                        if (msg.indexOf("error") >= 0) {
+                                                updateSentTip("Adding failed. Please try again.", 3000, "failure");
+                                        } else {
+                                                updateSentTip("Successfully adding members to list " + list_name, 3000, "success");
+                                               rank_count.html(msg);
+                                        }
+                                },
+                                error: function(msg) {
+                                        updateSentTip("Adding failed. Please try again.", 3000, "failure");
+                                }
+                        });
+               })
+       })
+       
+});
diff --git a/js/main.js b/js/main.js
deleted file mode 100644 (file)
index a084e73..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-$(function(){\r
-       document.getElementById("submit_btn").disabled=false;   \r
-       leaveWord();\r
-       $("#textbox").focus();\r
-       $("#textbox").keydown(leaveWord).keyup(leaveWord).keydown(function(event){\r
-               if (event.ctrlKey && event.keyCode==13) {\r
-                       $("form:first").submit();\r
-               }\r
-               });\r
-       \r
-       $(".submit_btn").click(function(){\r
-               document.getElementById("submit_btn").disabled=true;    \r
-       });\r
-       \r
-       $(".rt_btn").live("click", function(){\r
-               $("#textbox").val("RT @" + $(this).parent().find(".status_word").text());\r
-               $("#textbox").focus();\r
-               leaveWord();\r
-       });\r
-       \r
-       $(".replie_btn").live("click", function(){\r
-               var replie_id = $(this).parent().find(".status_word").find(".user_name").text();\r
-               $("#textbox").val("@" + replie_id + " ");\r
-               $("#textbox").focus();\r
-               $("#in_reply_to").val($(this).parent().find(".status_id").text());\r
-               leaveWord();\r
-       });\r
-});\r
-\r
-function leaveWord() {\r
-       var leave = 140-$("#textbox").val().length;\r
-       if (leave < 0) {\r
-               $("#tip").css("color","#CC0000");\r
-               $("#tip b").css("color","#CC0000");\r
-               $("#tip").html("<b>" + (-leave) + "</b>");\r
-       } else {\r
-               $("#tip").css("color","#000000");\r
-               $("#tip b").css("color","#000000");\r
-               $("#tip").html("<b>" + leave + "</b>");\r
-       }\r
-}
\ No newline at end of file
index 1470aa5..9949769 100644 (file)
@@ -1,50 +1,50 @@
-//message function\r
-$(function () {\r
-       formFunc();\r
-       var temp = [];\r
-       var auto = [];\r
-       $("a.user_name").each(function(){\r
-               var u = this.text;\r
-               if (!(u in temp)) {\r
-                       temp[u] = true;\r
-                       auto.push(u);\r
-               }\r
-       });\r
-       $("#sent_id").autocomplete(auto);\r
-       $("#allMessage").click(function(e) {\r
-               var $this = $(e.target);\r
-               var type = $this.attr('class');\r
-               switch(type) {\r
-                       case 'msg_replie_btn':\r
-                               e.preventDefault();\r
-                               $("#sent_id").val($this.parent().parent().find(".status_word").find(".user_name").text());\r
-                               $("#textbox").focus();\r
-                               break;\r
-                       case 'msg_delete_btn':\r
-                               e.preventDefault();\r
-                               var message_id = $.trim($this.parent().parent().find(".status_id").text());\r
-                               var confirm = window.confirm("Are you sure to delete this message?");\r
-\r
-                               if (confirm) {\r
-                                       updateSentTip("Deleting message...", 5000, "ing");\r
-                                       $.ajax({\r
-                                               url: "ajax/delete.php",\r
-                                               type: "POST",\r
-                                               data: "message_id=" + message_id,\r
-                                               success: function(msg) {\r
-                                                       if (msg.indexOf("success") >= 0) {\r
-                                                               $this.parent().parent().parent().remove();\r
-                                                               updateSentTip("Message deleted.", 3000, "success");\r
-                                                       } else {\r
-                                                               updateSentTip("Failed to delete this message!", 3000, "failure");\r
-                                                       }\r
-                                               },\r
-                                               error: function(msg) {\r
-                                                       updateSentTip("Failed to delete this message!", 3000, "failure");\r
-                                               }\r
-                                       });\r
-                               }\r
-                               break;\r
-               }\r
-       });\r
-});
\ No newline at end of file
+//message function
+$(function () {
+       formFunc();
+       var temp = [];
+       var auto = [];
+       $("a.user_name").each(function(){
+               var u = this.id;
+               if (!(u in temp)) {
+                       temp[u] = true;
+                       auto.push(u);
+               }
+       });
+       $("#sent_id").autocomplete(auto);
+       $("#allMessage").click(function(e) {
+               var $this = $(e.target);
+               var type = $this.attr('class');
+               switch(type) {
+                       case 'msg_replie_btn':
+                               e.preventDefault();
+                               $("#sent_id").val($this.parent().parent().find(".status_word").find(".user_name").attr("id"));
+                               $("#textbox").focus();
+                               break;
+                       case 'msg_delete_btn':
+                               e.preventDefault();
+                               var message_id = $.trim($this.parent().parent().find(".status_id").text());
+                               var confirm = window.confirm("Are you sure to delete this message?");
+
+                               if (confirm) {
+                                       updateSentTip("Deleting message...", 5000, "ing");
+                                       $.ajax({
+                                               url: "ajax/delete.php",
+                                               type: "POST",
+                                               data: "message_id=" + message_id,
+                                               success: function(msg) {
+                                                       if (msg.indexOf("success") >= 0) {
+                                                               $this.parent().parent().parent().remove();
+                                                               updateSentTip("Message deleted.", 3000, "success");
+                                                       } else {
+                                                               updateSentTip("Failed to delete this message!", 3000, "failure");
+                                                       }
+                                               },
+                                               error: function(msg) {
+                                                       updateSentTip("Failed to delete this message!", 3000, "failure");
+                                               }
+                                       });
+                               }
+                               break;
+               }
+       });
+});
diff --git a/js/nexus.js b/js/nexus.js
deleted file mode 100644 (file)
index 8f128ee..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-$(function(){\r
-               $("#analyze").click(function(){\r
-                               var user_1 = $.trim($("#user_1").val());\r
-                               var user_2 = $.trim($("#user_2").val());\r
-                               if(user_1 === $.trim($("#sideid").text())){\r
-                                       $("#descr").animate({opacity: 0}, 200, function(){\r
-                                       $("#descr").html("Due to the the limitation of API, you cannot enter your name in the first blank!").css("color", "#83161F").animate({opacity: 1}, 100);\r
-                                       });\r
-                                       return;\r
-                               };\r
-                               if(user_1 !== '' & user_2 !== ''){\r
-                                       $("#analyze").val("").addClass("loading");\r
-                                       $.ajax({\r
-                                                       url: "ajax/getRelationship.php" + "?target=" + user_1 + "&source=" + user_2,\r
-                                                       type: "GET",\r
-                                                       dataType: "text",\r
-                                                       data: "target=" + user_1 + "&source=" + user_2,\r
-                                                       success: function(msg) {\r
-                                                               msg = $.trim(msg);\r
-                                                               if(msg.length > 0 && msg !== "error") {\r
-                                                                       $("#analyze").val("Analyze").removeClass("loading");\r
-                                                                       $("#descr").html("Rabr Nexus is a tool helps you analyze relationships between you or the others.").css("color", "#333333");\r
-                                                                       $("#result").animate({opacity: 0}, 500, function(){\r
-                                                                       $("#result").removeClass("intro").html(msg).animate({opacity: 1}, 500);\r
-                                                                       });\r
-                                                               }else{\r
-                                                                       $("#descr").animate({opacity: 0}, 200, function(){\r
-                                                                       $("#descr").html("Something went wrong, please try again!").css("color", "#83161F").animate({opacity: 1}, 100);\r
-                                       });\r
-                                                               }\r
-                                                       },\r
-                                                       error: function() {\r
-                                                                       $("#descr").animate({opacity: 0}, 200, function(){\r
-                                                                       $("#descr").html("Something went wrong, please try again!").css("color", "#83161F").animate({opacity: 1}, 100);\r
-                                       });\r
-                                                       }\r
-                                               });\r
-                               }\r
-                       });\r
-       });
\ No newline at end of file
diff --git a/js/profile.js b/js/profile.js
deleted file mode 100644 (file)
index f099865..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-$(document).ready(function(){\r
-               formFunc();\r
-               $(".rt_btn").live("click", function(e){\r
-                               e.preventDefault();\r
-                               onRT($(this));\r
-                       });\r
-\r
-               $(".replie_btn").live("click", function(e){\r
-                               e.preventDefault();\r
-                               onReplie($(this),e);\r
-                       });\r
-               $(".favor_btn").live("click", function(e){\r
-                               e.preventDefault();\r
-                               onFavor($(this));\r
-                       });\r
-               $(".delete_btn").live("click", function(e){\r
-                               e.preventDefault();\r
-                               onDelete($(this), "Tweet");\r
-                       });\r
-               $("#submit_btn").click(function(e){\r
-                               updateStatus();\r
-                               e.preventDefault();\r
-                       });\r
-       });\r
index 3a6ad4d..57369fa 100644 (file)
@@ -141,13 +141,14 @@ var formFunc = function(){
                                                        source.hide().slideDown('fast');
                                                        var statusid = $.trim($(msg).find('.status_id').text());
                                                        var statusText = $.trim($(msg).find('.tweet').html());
+                                                       var statusDate = $.trim($(msg).find('span.date a').attr('id'));
                                                        embrTweet(source);
                                                        $(".mine").slideDown("fast");
                                                        $("#full_status").fadeIn("fast");
                                                        $("#currently .status-text").hide().text(limitation(text)).fadeIn("fast");
-                                                       $("#latest_meta").hide().html("<a target=\"_blank\" href=\"status.php?id="+statusid+"\">less than 5 seconds ago</a>").fadeIn("fast");
+                                                       $("#latest_meta").hide().html("<a target=\"_blank\" href=\"status.php?id="+statusid+"\" id=\""+statusDate+"\">less than 5 seconds ago</a>").fadeIn("fast");
                                                        $("#currently .full-text").hide().html(statusText);
-                                                       $("#full_meta").hide().html("<a target=\"_blank\" href=\"status.php?id="+statusid+"\">less than 5 seconds ago</a>");
+                                                       $("#full_meta").hide().html("<a target=\"_blank\" href=\"status.php?id="+statusid+"\" id=\""+statusDate+"\">less than 5 seconds ago</a>");
                                                        $("#full_meta a,.full-text a").click(function (e){e.stopPropagation();});
                                                        previewMedia(source);
                                                        freshProfile();
@@ -321,7 +322,7 @@ function rminit($this){
        if($rm.length > 0){
                $rm.fadeIn('fast');
        }else{
-               var id = $that.find(".status_word").find(".user_name").text();
+               var id = $that.find(".status_word").find(".user_name").attr("id");
                $that.addClass("loading");
                $.ajax({
                        url: 'ajax/relation.php',
@@ -359,10 +360,14 @@ function rminit($this){
 }
 
 function rmmention($this,e){
-       var replie_id = $this.parent().parent().parent().find(".status_word").find(".user_name").text();
+       var replie_id = $this.parent().parent().parent().find(".status_word").find(".user_name").attr("id");
        var in_reply_id = $this.parent().parent().parent().find(".status_id").text();
        var text = "@"+replie_id;
        var mode = "In reply to ";
+       if ($("#textbox").length <= 0) {
+               $("#info_head").after('<h2>In reply to ' + replie_id + '</h2>' + formHTML);
+               formFunc();
+       }
        scroll(0,0);
        $("#textbox").focus().val($("#textbox").val()+text+' ');
        $("#in_reply_to").val(in_reply_id);
@@ -371,8 +376,12 @@ function rmmention($this,e){
        leaveWord();
 }
 function rmdm($this,e){
-       var replie_id = $this.parent().parent().parent().find(".status_word").find(".user_name").text();
+       var replie_id = $this.parent().parent().parent().find(".status_word").find(".user_name").attr("id");
        var text = "D "+replie_id;
+       if ($("#textbox").length <= 0) {
+               $("#info_head").after('<h2>Send message to ' + replie_id + '</h2>' + formHTML);
+               formFunc();
+       }
        scroll(0,0);
        $("#textbox").focus().val($("#textbox").val()+text+' ');;
        $("#in_reply_to").val(e.target.parent().parent().parent().find(".status_id").text());
@@ -381,7 +390,7 @@ function rmdm($this,e){
        leaveWord();
 }
 function rmfollow($this){
-       var id = $this.parent().parent().parent().find(".status_word").find(".user_name").text();
+       var id = $this.parent().parent().parent().find(".status_word").find(".user_name").attr("id");
        updateSentTip("Following "+id+"...",5e3,"ing");
        $.ajax({
                url: "ajax/relation.php",
@@ -400,7 +409,7 @@ function rmfollow($this){
        });
 }
 function rmunfollow($this){
-       var id = $this.parent().parent().parent().find(".status_word").find(".user_name").text();
+       var id = $this.parent().parent().parent().find(".status_word").find(".user_name").attr("id");
        if (confirm("Are you sure to unfollow "+id+" ?")){
                updateSentTip("Unfollowing "+id+"...",5e3,"ing");
                $.ajax({
@@ -421,7 +430,7 @@ function rmunfollow($this){
        }
 }
 function rmblock($this){
-       var id = $this.parent().parent().parent().find(".status_word").find(".user_name").text();
+       var id = $this.parent().parent().parent().find(".status_word").find(".user_name").attr("id");
        if (confirm("Are you sure to block "+id+" ?")){
                updateSentTip("Blocking "+id+"...",5e3,"ing");
                $.ajax({
@@ -442,7 +451,7 @@ function rmblock($this){
        }
 }
 function rmunblock($this){
-       var id = $this.parent().parent().parent().find(".status_word").find(".user_name").text();
+       var id = $this.parent().parent().parent().find(".status_word").find(".user_name").attr("id");
        if (confirm("Are you sure to unblock "+id+" ?")){
                updateSentTip("Unblocking "+id+"...",5e3,"ing");
                $.ajax({
@@ -463,7 +472,7 @@ function rmunblock($this){
        }
 }
 function rmspam($this){
-       var id = $this.parent().parent().parent().find(".status_word").find(".user_name").text();
+       var id = $this.parent().parent().parent().find(".status_word").find(".user_name").attr("id");
        if (confirm("Are you sure to report "+id+" ?")){
                updateSentTip("Reporting "+id+" as a spammer...",5e3,"ing");
                $.ajax({
@@ -507,7 +516,7 @@ function onFavor($this){
 }
 function onReplie($this,e){
        var $word = $this.parent().parent().find(".status_word");
-       var replie_id = $word.find(".user_name").text();
+       var replie_id = $word.find(".user_name").attr("id");
        var in_reply_id = $this.parent().parent().find(".status_id").text();
        var text = "@"+replie_id;
        var start = text.length+1;
@@ -544,19 +553,23 @@ function onReplie($this,e){
        leaveWord();
 }
 function onRT($this){
-       var replie_id = $this.parent().parent().find(".status_word").find(".user_name").text();
+       var replie_id = $this.parent().parent().find(".status_word").find(".user_name").attr("id");
        scroll(0,0);
        var status_word = $this.parent().parent().find(".status_word").clone();
        status_word.find('.tweet a[rel=noreferrer]').each(function(){
-               $(this).text($(this).attr('href'));
+               var imgsrc = $(this).attr('href');
+               if (imgsrc.indexOf('img.php') > -1) {
+                       imgsrc = imgsrc.substr(15);
+               }
+               $(this).text(imgsrc);
        });
-       $("#textbox").focus().val(" RT @"+replie_id+":"+status_word.text().replace(replie_id,"")).caret(0);
+       $("#textbox").focus().val(" RT @"+replie_id+":"+status_word.find('.tweet').text()).caret(0);
        $("#full_status,#latest_meta,#full_meta,#currently .full-text,#latest_meta").hide();
        $("#currently .status-text").html("Retweet @"+replie_id+"'s tweet with comment.");
        leaveWord();
 }
 function onReplieDM($this){
-       var replie_id = $this.parent().parent().find(".status_word").find(".user_name").text();
+       var replie_id = $this.parent().parent().find(".status_word").find(".user_name").attr("id");
        var text = "D "+replie_id;
        scroll(0,0);
        $("#textbox").focus().val($("#textbox").val()+text+' ');
@@ -579,11 +592,11 @@ function onNwRT($this){
                                if (msg.length >= 0){
                                        statusBody.parent().addClass("retweet");
                                        statusBody.find(".source").hide();
-                                       statusBody.find(".status_info").append("<span class=\"rt_source\">Retweeted by you from <a rel=\"nofollow\" href=\"http://code.google.com/p/embr/\">embr</a></span>").fadeIn("fast");
+                                       statusBody.find(".status_info").append("<span class=\"rt_source\">Retweeted by you.").fadeIn("fast");
                                        statusBody.find(".date").hide();
-                                       statusBody.find(".status_info").append("<span class=\"rt_undo\" title=\"Your followers will no longer see the tweet as retweeted by you.\">&nbsp;<a href=\"#\">(Undo)</a><span class=\"rt_id\" style=\"display: none;\">"+msg+"</span></span>").fadeIn("fast");
+                                       statusBody.find(".status_info").append("<span class=\"rt_undos\" title=\"Your followers will no longer see the tweet as retweeted by you.\">&nbsp;<a class=\"rt_undo\" href=\"#\">(Undo)</a><span class=\"rt_id\" style=\"display: none;\">"+msg+"</span></span>").fadeIn("fast");
                                        updateSentTip("This tweet has been retweeted!",3e3,"success");
-                                       $(".rt_undo").tipsy({
+                                       $(".rt_undos").tipsy({
                                                        gravity: 's'
                                                });
                                }else{
@@ -673,7 +686,7 @@ function onUndoRt($this){
                                        if (statusInfo.find(".rt_source").size() === 1){
                                                statusInfo.find(".source").show().find(".date").show();
                                                statusInfo.find(".rt_source").remove()
-                                               statusInfo.find(".rt_undo").remove();
+                                               statusInfo.find(".rt_undos").remove();
                                                statusBody.removeClass("retweet");
                                        }else{
                                                statusBody.fadeOut("fast");
@@ -844,9 +857,9 @@ $(function (){
                                if(d == 't.cn' || d == 'goo.gl' || d == 'bit.ly' || d == 'j.mp' || d == 'is.gd' || d == '163.fm') {
                                        e.preventDefault();
                                        updateSentTip('Unshorting the URL...',3e3,'ing');
-                                       $.getJSON('http://api.longurl.org/v2/expand?url=' +encodeURIComponent($this.attr('href')) + '&format=json&callback=?', function(data) {
-                                               if('long-url' in data) {
-                                                       var url = data['long-url'];
+                                       $.getJSON('ajax/expand.php?url=' +encodeURIComponent($this.attr('href')), function(data) {
+                                               if('expanded_url' in data) {
+                                                       var url = data['expanded_url'];
                                                        if (url != $this.attr('href')) {
                                                                var tmp = url.split("://");
                                                                $this.text(tmp[1]);
@@ -1215,4 +1228,4 @@ var markReply = function(obj){
                        $(this).addClass("reply");
                }
        });
-};
\ No newline at end of file
+};
index 86b320d..4c296eb 100644 (file)
@@ -1,4 +1,101 @@
 $(function(){
+       var theAC = null;
+       var searches = null;
+
+       $("#btn_savesearch").click(function(e){
+               var nowsearch = $("#query").val().trim();
+               if (theAC == null || searches == null || nowsearch == '') {
+                       updateSentTip("Error in saving search!", 3000, "failure");
+                       return;
+               }
+
+               var sameone = false;
+               $.each(searches, function(){
+                       if (nowsearch == this[1]) {
+                               updateSentTip("Duplicated search!", 3000, "failure");
+                               sameone = true;
+                       }
+               });
+               if (sameone) return;
+
+               $.ajax({
+                       url: "ajax/savedSearches.php",
+                       data: {method: "save", query: nowsearch},
+                       type: "GET",
+                       success: function(msg) {
+                               if (msg.indexOf("[") >= 0) {
+                                       updateSentTip("Successfully saved search!", 3000, "success");
+                                       var theData = eval("("+msg+")");
+                                       searches.push(theData);
+                                       theAC.flushCache();
+                                       theAC.setOptions({data:searches});
+                               }
+                               else
+                                       updateSentTip("Error in saving search!", 3000, "failure");
+                       },
+                       error: function(msg) {
+                               updateSentTip("Error in saving search!", 3000, "failure");
+                       }
+               });
+       });
+
+       $.ajax({
+               url: "ajax/savedSearches.php",
+               data: {method: "list"},
+               type: "GET",
+               success: function(msg) {
+                       searches = eval("("+msg+")");
+                       $(".ss_delete_btn").live("click",function(e){
+                               e.preventDefault();
+                               $("#query").val("");
+                               if (theAC != null && searches != null) {
+                                       var selectedId = $(this).attr("id").substr(3);
+                                       var selectedIndex = -1;
+                                       $.each(searches, function(ind, ele){
+                                               if (ele[0] == selectedId)
+                                                       selectedIndex = ind;
+                                       });
+                                       if (selectedIndex != -1) {
+                                               var cfm = window.confirm("Are you sure to delete the saved search \"" + searches[selectedIndex][1] + "\"?");
+                                               if (!cfm) return;
+                                               $.ajax({
+                                                       url: "ajax/savedSearches.php",
+                                                       data: {method: "delete", ssid: selectedId},
+                                                       type: "GET",
+                                                       success: function(m) {
+                                                               if (m.indexOf("success") >= 0)
+                                                                       updateSentTip("Successfully deleted saved search!", 3000, "success");
+                                                               else
+                                                                       updateSentTip("Error in deleting saved search!", 3000, "failure");
+                                                               searches.splice(selectedIndex, 1);
+                                                               theAC.flushCache();
+                                                               theAC.setOptions({data:searches});
+                                                       },
+                                                       error: function(m) {
+                                                               updateSentTip("Error in deleting saved search!", 3000, "failure");
+                                                       }
+                                               });
+                                       }
+                               }
+                       });
+                       theAC = $("#query").autocomplete(searches, {
+                               minChars:0,
+                               formatItem:function(data, i, total) {
+                                       return "<a class=\"ss_delete_btn\" href=\"#\" id=\"sgt" + data[0] + "\" >delete</a>" + data[1];
+                               },
+                               formatMatch:function(data, i, total) {
+                                       return data[1];
+                               },
+                               formatResult:function(data) {
+                                       return data[1];
+                               }
+                       });
+               },
+               error: function(msg) {
+                       updateSentTip("Failed to fetch the saved searches!", 3000, "failure");
+               }
+       });
+
        formHTML = "<h2>What are you doing?</h2>" + formHTML + "<div class=\"clear\"></div>";
        $("#allTimeline").click(function(e) {
                var $this = $(e.target);
index c2390cc..dc9c124 100644 (file)
@@ -15,6 +15,7 @@ $(function(){
        checkbox('sidebarscroll',"#sidebarscroll",true,function(){
                $(window).unbind('scroll',scroller);
        });
+       checkbox('shownick',"#shownick",false);
        checkbox('twitterbg',"#twitterbg",false,function(){
                if($.cookie('twitterbg') === 'true'){
                        $.ajax({
@@ -61,6 +62,7 @@ $(function(){
                        $.cookie('Bgcolor', '');
                        $.cookie('Bgimage','');
                        $.cookie('showpic','true');
+                       $.cookie('shownick','false');
                        $.cookie('mediaPre','true');
                        $.cookie('p_avatar','false');
                        $.cookie('homeInterval',1);
@@ -110,6 +112,10 @@ $(function(){
                e.preventDefault();
                ProfileImageUpload();
        });
+       $("#BackgroundUpload").click(function (e) {
+               e.preventDefault();
+               ProfileBackgroundUpload();
+       });
        $("#saveProfile").click(function(e){
                e.preventDefault();
                $.ajax({
@@ -135,6 +141,10 @@ $(function(){
                        }
                });
        });
+
+       $("#tile").click(function() {
+               ProfileBackgroundTile($(this).prop('checked'));
+       });
 });
 function checkbox(c,id,d,extra){
        var $id = $(id);
@@ -178,7 +188,7 @@ function ProfileImageUpload() {
                                                dataType: "json",
                                                success: function(msg){
                                                        freshProfile();
-                                                       $(".settings > img").attr("src",$.cookie("imgurl"));
+                                                       $("#avatarimg").attr("src",$.cookie("imgurl"));
                                                }
                                        });
                                        updateSentTip("Your profile image has been uploaded!", 3000, "success");
@@ -191,4 +201,75 @@ function ProfileImageUpload() {
                        }
                })
        return false;
-}
\ No newline at end of file
+}
+
+function ProfileBackgroundUpload() {
+       updateSentTip("Uploading your profile background...", 10000, "ing");
+       $.ajaxFileUpload({
+                       url: 'ajax/uploadImage.php?do=background',
+                       timeout: 60000,
+                       secureuri: false,
+                       fileElementId: 'profile_background',
+                       dataType: 'json',
+                       success: function (data, status) {
+                               if (typeof(console) !== 'undefined' && console != null) {
+                                       console.info(data);
+                               }
+                               if (typeof(data.result) != 'undefined' && data.result == "success") {
+                                       if ($.cookie('twitterbg') === 'true') {
+                                               $.ajax({
+                                                       url:'ajax/updateProfile.php?extra=bg',
+                                                       dataType:'json',
+                                                       success: function() { location.reload(); }
+                                               });
+                                       }
+                                       $("#backgroundimg").attr("src",data.url);
+                                       updateSentTip("Your profile background has been uploaded!", 3000, "success");
+                               } else {
+                                       updateSentTip("Failed to upload, please try again.", 3000, "failure");
+                               }
+                       },
+                       error: function (data, status, e) {
+                               updateSentTip("Failed to upload, please try again.", 3000, "failure");
+                       }
+               })
+       return false;
+}
+
+function ProfileBackgroundTile(tile) {
+       updateSentTip("Updating your profile background tile...", 3000, "ing");
+       $.ajax({
+                       url: 'ajax/uploadImage.php?do=background',
+                       type: 'POST',
+                       data: {'tile': tile},
+                       dataType: 'json',
+                       success: function (data, status) {
+                               if (typeof(console) !== 'undefined' && console != null) {
+                                       console.info(data);
+                               }
+                               if (typeof(data.result) != 'undefined' && data.result == "success") {
+                                       if ($.cookie('twitterbg') === 'true') {
+                                               $.ajax({
+                                                       url:'ajax/updateProfile.php?extra=bg',
+                                                       dataType:'json',
+                                                       success: function() { location.reload(); }
+                                               });
+                                       }
+                                       var isok = data.tile === 'true';
+                                       if (isok != $("#tile").prop('checked')) {
+                                               $("#tile").prop('checked', isok);
+                                               updateSentTip("Failed to update, please try again.", 3000, "failure");
+                                       }
+                                       else {
+                                               updateSentTip("Your profile background tile has been updated!", 3000, "success");
+                                       }
+                               } else {
+                                       updateSentTip("Failed to update, please try again.", 3000, "failure");
+                               }
+                       },
+                       error: function (data, status, e) {
+                               updateSentTip("Failed to update, please try again.", 3000, "failure");
+                       }
+               })
+       return false;
+}
index f0370a0..ed701a3 100644 (file)
-$(function(){\r
-       $("#allTimeline").click(function(e) {\r
-               var $this = $(e.target);\r
-               var type = $this.attr('class');\r
-               switch(type) {\r
-                       case 'rt_btn':\r
-                               e.preventDefault();\r
-                               if ($("#textbox").length > 0) {\r
-                                       onInfoRT($this);\r
-                               } else {\r
-                                       $("#info_head").after('<h2>What\'s happening?</h2>' + formHTML);\r
-                                       formFunc();\r
-                                       onInfoRT($this);\r
-                               }\r
-                               break;\r
-                       case 'retw_btn':\r
-                               e.preventDefault();\r
-                               onNwRT($this);\r
-                               break;\r
-                       case 'replie_btn':\r
-                               e.preventDefault();\r
-                               var replie_id = $this.parent().parent().find(".status_word").find(".user_name").text();\r
-                               if ($("#textbox").length > 0) {\r
-                                       onInfoReplie($this,e);\r
-                               } else {\r
-                                       $("#info_head").after('<h2>In reply to ' + replie_id + '</h2>' + formHTML);\r
-                                       formFunc();\r
-                                       onInfoReplie($this,e);\r
-                               }\r
-                               break;\r
-                       case 'favor_btn':\r
-                               e.preventDefault();\r
-                               onFavor($this);\r
-                               break;\r
-                       case 'unfav_btn':\r
-                               e.preventDefault();\r
-                               UnFavor($this);\r
-                               break;\r
-                       case 'rt_undo':\r
-                               e.preventDefault();\r
-                               onUndoRt($this);\r
-                               break;\r
-               }\r
-       });\r
-\r
-       $("#info_reply_btn").click(function(){\r
-               var replie_id = $("#info_name").text();\r
-               if ($("#textbox").length > 0) {\r
-                       $("#textbox").val($("#textbox").val() + "@" + replie_id + " ");\r
-                       $("#textbox").focus();\r
-                       leaveWord();\r
-               } else {\r
-                       $("#info_head").after('<h2>In reply to ' + replie_id + '</h2>' + formHTML);\r
-                       formFunc();\r
-                       $("#textbox").val($("#textbox").val() + "@" + replie_id + " ");\r
-                       $("#textbox").focus();\r
-                       leaveWord();\r
-               }\r
-       });\r
-       if (getCookie("infoShow") == "hide") {\r
-               onHide();\r
-       }\r
-       $("#info_hide_btn").click(function(){\r
-               onHide();\r
-       });\r
-\r
-       $("#info_follow_btn").click(function(e){\r
-               e.preventDefault();\r
-               var $this = $(this);\r
-               var id = $("#info_name").text();\r
-               updateSentTip("Following " + id + "...", 5000, "ing");\r
-               $.ajax({\r
-                       url: "ajax/relation.php",\r
-                       type: "POST",\r
-                       data: "action=create&id=" + id,\r
-                       success: function(msg) {\r
-                               if (msg.indexOf("success") >= 0) {\r
-                                       updateSentTip("You have followed " + id + "!", 3000, "success");\r
-                                       $this.after('<a class="btn btn-red" id="info_block_btn" href="javascript:void(0)">Unfollow</a>');\r
-                                       $this.remove();\r
-                                       if($('#unblock') != null){\r
-                                               $('#unblock').after('<a class="btn" id="block_btn" href="javascript:void(0)">Block</a>');\r
-                                               $('#unblock').remove();\r
-                                       }\r
-                               } else {\r
-                                       updateSentTip("Failed to follow " + id + ", please try again.", 3000, "failure");\r
-                               }\r
-                       },\r
-                       error: function(msg) {\r
-                               updateSentTip("Failed to follow " + id + ", please try again.", 3000, "failure");\r
-                       }\r
-               });\r
-       });\r
-\r
-       $("#info_block_btn").click(function(e){\r
-               e.preventDefault();\r
-               var $this = $(this);\r
-               var id = $("#info_name").text();\r
-               if (confirm("Are you sure to unfollow " + id + " ?")) {\r
-               updateSentTip("Unfollowing " + id + "...", 5000, "ing");\r
-               $.ajax({\r
-                       url: "ajax/relation.php",\r
-                       type: "POST",\r
-                       data: "action=destory&id=" + id,\r
-                       success: function(msg) {\r
-                               if (msg.indexOf("success") >= 0) {\r
-                                       updateSentTip("You have unfollowed " + id + "!", 3000, "success");\r
-                                       $this.after('<a class="btn btn-green" id="info_follow_btn" href="javascript:void(0)">Follow</a>');\r
-                                       $this.remove();\r
-                               } else {\r
-                                       updateSentTip("Failed to unfollow " + id + ", please try again.", 3000, "failure");\r
-                               }\r
-                       },\r
-                       error: function(msg) {\r
-                               updateSentTip("Failed to unfollow " + id + ", please try again.", 3000, "failure");\r
-                       }\r
-               });\r
-               }\r
-       });\r
-\r
-       $("#block_btn").click(function(e){\r
-               e.preventDefault();\r
-               var $this = $(this);\r
-               var id = $("#info_name").text();\r
-               if (confirm("Are you sure to block " + id + " ?")) {\r
-                       updateSentTip("Blocking " + id + "...", 5000, "ing");\r
-                       $.ajax({\r
-                               url: "ajax/relation.php",\r
-                               type: "POST",\r
-                               data: "action=block&id=" + id,\r
-                               success: function(msg) {\r
-                                       if (msg.indexOf("success") >= 0) {\r
-                                               updateSentTip("You have blocked " + id + "!", 3000, "success");\r
-                                               $this.after('<a class="btn" id="unblock_btn" href="javascript:void(0)">Unblock</a>');\r
-                                               $this.remove();\r
-                                               if($('#info_block_btn') != null){\r
-                                                       $('#info_block_btn').after('<a class="btn btn-green" id="info_follow_btn" href="javascript:void(0)">Follow</a>');\r
-                                                       $('#info_block_btn').remove();\r
-                                               }\r
-                                       } else {\r
-                                               updateSentTip("Failed to block " + id + ", please try again.", 3000, "failure");\r
-                                       }\r
-                               },\r
-                               error: function(msg) {\r
-                                       updateSentTip("Failed to block " + id + ", please try again.", 3000, "failure");\r
-                               }\r
-                       });\r
-               }\r
-       });\r
-\r
-       $("#unblock_btn").click(function(e){\r
-               e.preventDefault();\r
-               var $this = $(this);\r
-               var id = $("#info_name").text();\r
-               if (confirm("Are you sure to unblock " + id + " ?")) {\r
-                       updateSentTip("Unblocking...", 5000, "ing");\r
-                       $.ajax({\r
-                               url: "ajax/relation.php",\r
-                               type: "POST",\r
-                               data: "action=unblock&id=" + id,\r
-                               success: function(msg) {\r
-                                       if (msg.indexOf("success") >= 0) {\r
-                                               updateSentTip("Unblocked.", 3000, "success");\r
-                                               $this.after('<a class="btn" id="block_btn" href="javascript:void(0)">Block</a>');\r
-                                               $this.remove();\r
-                                       } else {\r
-                                               updateSentTip("Failed to unblock, please try again.", 3000, "failure");\r
-                                       }\r
-                               },\r
-                               error: function(msg) {\r
-                                       updateSentTip("Failed to unblock, please try again.", 3000, "failure");\r
-                               }\r
-                       });\r
-               }\r
-       });\r
-       \r
-       $("#report_btn").click(function(e){\r
-               e.preventDefault();\r
-               var $this = $(this);\r
-               var id = $("#info_name").text();\r
-               if (confirm("Are you sure to report " + id + " for spam?")) {\r
-                       updateSentTip("Reporting " + id + " for spam...", 5000, "ing");\r
-                       $.ajax({\r
-                               url: "ajax/relation.php",\r
-                               type: "POST",\r
-                               data: "action=report&id=" + id,\r
-                               success: function(msg) {\r
-                                       if (msg.indexOf("success") >= 0) {\r
-                                               updateSentTip("You have reported " + id + " for spam!", 3000, "success");\r
-                                               /*\r
-                                               $this.after('<a class="btn" id="unblock_btn" href="javascript:void(0)">Unblock</a>');\r
-                                               $this.remove();\r
-                                               \r
-                                               if($('#info_block_btn') != null){\r
-                                                       $('#info_block_btn').after('<a class="btn btn-green" id="info_follow_btn" href="javascript:void(0)">Follow</a>');\r
-                                                       $('#info_block_btn').remove();\r
-                                               }\r
-                                               */\r
-                                       } else {\r
-                                               updateSentTip("Failed to report " + id + " for spam, please try again.", 3000, "failure");\r
-                                       }\r
-                               },\r
-                               error: function(msg) {\r
-                                       updateSentTip("Failed to report " + id + " for spam, please try again.", 3000, "failure");\r
-                               }\r
-                       });\r
-               }\r
-       });\r
-       $("#tweeting_button").click(function (e) {\r
-               e.preventDefault();\r
-               if ($("#textbox").val().length >0 ) {\r
-                       updateStatus();\r
-               }               \r
-       });\r
-       \r
-});\r
-\r
-function onInfoReplie($this) {\r
-       var replie_id = $("#info_name").text();\r
-       $("#textbox").val("@" + replie_id + " ");\r
-       $("#textbox").focus();\r
-       $("#in_reply_to").val($this.parent().parent().find(".status_id").text());\r
-       leaveWord();\r
-}\r
-\r
-function onInfoRT($this) {\r
-       var replie_id = $("#info_name").text();\r
-       var status_word = $this.parent().parent().find(".status_word").clone();\r
-       status_word.find('.tweet a[rel=noreferrer]').each(function(){\r
-               $(this).text($(this).attr('href'));\r
-       });\r
-       $("#textbox").focus().val(" RT @" + replie_id + ":" + status_word.text().replace(replie_id, "")).caret(0);\r
-       leaveWord();\r
-}\r
-function getCookie(name){\r
-       var strCookie=document.cookie;\r
-       var arrCookie=strCookie.split("; ");\r
-       for(var i=0;i<arrCookie.length;i++){\r
-               var arr=arrCookie[i].split("=");\r
-               if(arr[0]==name)return unescape(arr[1]);\r
-       }\r
-return "";\r
-}\r
-function setCookie(name,value,expireHours){\r
-       var cookieString=name+"="+escape(value);\r
-       if(expireHours>0){\r
-               var date=new Date();\r
-               date.setTime(date.getTime+expireHours*3600*1000);\r
-               cookieString=cookieString+"; expire="+date.toGMTString();\r
-       }\r
-       document.cookie=cookieString;\r
-} \r
-function onHide(){\r
-       $this = $("#info_hide_btn");\r
-       $this.after('<a class="btn" id="info_show_btn" href="javascript:void(0)">Show @</a>');\r
-       $this.remove();\r
-\r
-       $("#info_show_btn").click(function(){\r
-               $(".timeline li").each(function(i,o) {\r
-                       $(this).show();\r
-               });\r
-               $(this).after('<a class="btn" id="info_hide_btn" href="javascript:void(0)">Hide @</a>');\r
-               $(this).remove();\r
-               $("#info_hide_btn").live("click", function(){\r
-                       onHide();\r
-               });\r
-               setCookie("infoShow","show");\r
-       });\r
-\r
-       $(".timeline li").each(function(i,o) {\r
-               if ($(this).find(".status_word").text().indexOf("@") > -1) {\r
-                       $(this).hide();\r
-               }\r
-       });\r
-       setCookie("infoShow","hide");\r
-}
\ No newline at end of file
+$(function(){
+       $("#allTimeline").click(function(e) {
+               var $this = $(e.target);
+               var type = $this.attr('class');
+               switch(type) {
+                       case 'rt_btn':
+                               e.preventDefault();
+                               if ($("#textbox").length > 0) {
+                                       onRT($this);
+                               } else {
+                                       $("#info_head").after('<h2>What\'s happening?</h2>' + formHTML);
+                                       formFunc();
+                                       onRT($this);
+                               }
+                               break;
+                       case 'retw_btn':
+                               e.preventDefault();
+                               onNwRT($this);
+                               break;
+                       case 'replie_btn':
+                               e.preventDefault();
+                               var replie_id = $this.parent().parent().find(".status_word").find(".user_name").attr("id");
+                               if ($("#textbox").length > 0) {
+                                       onReplie($this,e);
+                               } else {
+                                       $("#info_head").after('<h2>In reply to ' + replie_id + '</h2>' + formHTML);
+                                       formFunc();
+                                       onReplie($this,e);
+                               }
+                               break;
+                       case 'favor_btn':
+                               e.preventDefault();
+                               onFavor($this);
+                               break;
+                       case 'unfav_btn':
+                               e.preventDefault();
+                               UnFavor($this);
+                               break;
+                       case 'rt_undo':
+                               e.preventDefault();
+                               onUndoRt($this);
+                               break;
+               }
+       });
+
+       $("#info_reply_btn").click(function(){
+               var replie_id = $("#info_name").text();
+               if ($("#textbox").length > 0) {
+                       $("#textbox").val($("#textbox").val() + "@" + replie_id + " ");
+                       $("#textbox").focus();
+                       leaveWord();
+               } else {
+                       $("#info_head").after('<h2>In reply to ' + replie_id + '</h2>' + formHTML);
+                       formFunc();
+                       $("#textbox").val($("#textbox").val() + "@" + replie_id + " ");
+                       $("#textbox").focus();
+                       leaveWord();
+               }
+       });
+       if (getCookie("infoShow") == "hide") {
+               onHide();
+       }
+       $("#info_hide_btn").click(function(){
+               onHide();
+       });
+
+       $("#info_follow_btn").click(function(e){
+               e.preventDefault();
+               var $this = $(this);
+               var id = $("#info_name").text();
+               updateSentTip("Following " + id + "...", 5000, "ing");
+               $.ajax({
+                       url: "ajax/relation.php",
+                       type: "POST",
+                       data: "action=create&id=" + id,
+                       success: function(msg) {
+                               if (msg.indexOf("success") >= 0) {
+                                       updateSentTip("You have followed " + id + "!", 3000, "success");
+                                       $this.after('<a class="btn btn-red" id="info_block_btn" href="javascript:void(0)">Unfollow</a>');
+                                       $this.remove();
+                                       if($('#unblock') != null){
+                                               $('#unblock').after('<a class="btn" id="block_btn" href="javascript:void(0)">Block</a>');
+                                               $('#unblock').remove();
+                                       }
+                               } else {
+                                       updateSentTip("Failed to follow " + id + ", please try again.", 3000, "failure");
+                               }
+                       },
+                       error: function(msg) {
+                               updateSentTip("Failed to follow " + id + ", please try again.", 3000, "failure");
+                       }
+               });
+       });
+
+       $("#info_block_btn").click(function(e){
+               e.preventDefault();
+               var $this = $(this);
+               var id = $("#info_name").text();
+               if (confirm("Are you sure to unfollow " + id + " ?")) {
+               updateSentTip("Unfollowing " + id + "...", 5000, "ing");
+               $.ajax({
+                       url: "ajax/relation.php",
+                       type: "POST",
+                       data: "action=destory&id=" + id,
+                       success: function(msg) {
+                               if (msg.indexOf("success") >= 0) {
+                                       updateSentTip("You have unfollowed " + id + "!", 3000, "success");
+                                       $this.after('<a class="btn btn-green" id="info_follow_btn" href="javascript:void(0)">Follow</a>');
+                                       $this.remove();
+                               } else {
+                                       updateSentTip("Failed to unfollow " + id + ", please try again.", 3000, "failure");
+                               }
+                       },
+                       error: function(msg) {
+                               updateSentTip("Failed to unfollow " + id + ", please try again.", 3000, "failure");
+                       }
+               });
+               }
+       });
+
+       $("#block_btn").click(function(e){
+               e.preventDefault();
+               var $this = $(this);
+               var id = $("#info_name").text();
+               if (confirm("Are you sure to block " + id + " ?")) {
+                       updateSentTip("Blocking " + id + "...", 5000, "ing");
+                       $.ajax({
+                               url: "ajax/relation.php",
+                               type: "POST",
+                               data: "action=block&id=" + id,
+                               success: function(msg) {
+                                       if (msg.indexOf("success") >= 0) {
+                                               updateSentTip("You have blocked " + id + "!", 3000, "success");
+                                               $this.after('<a class="btn" id="unblock_btn" href="javascript:void(0)">Unblock</a>');
+                                               $this.remove();
+                                               if($('#info_block_btn') != null){
+                                                       $('#info_block_btn').after('<a class="btn btn-green" id="info_follow_btn" href="javascript:void(0)">Follow</a>');
+                                                       $('#info_block_btn').remove();
+                                               }
+                                       } else {
+                                               updateSentTip("Failed to block " + id + ", please try again.", 3000, "failure");
+                                       }
+                               },
+                               error: function(msg) {
+                                       updateSentTip("Failed to block " + id + ", please try again.", 3000, "failure");
+                               }
+                       });
+               }
+       });
+
+       $("#unblock_btn").click(function(e){
+               e.preventDefault();
+               var $this = $(this);
+               var id = $("#info_name").text();
+               if (confirm("Are you sure to unblock " + id + " ?")) {
+                       updateSentTip("Unblocking...", 5000, "ing");
+                       $.ajax({
+                               url: "ajax/relation.php",
+                               type: "POST",
+                               data: "action=unblock&id=" + id,
+                               success: function(msg) {
+                                       if (msg.indexOf("success") >= 0) {
+                                               updateSentTip("Unblocked.", 3000, "success");
+                                               $this.after('<a class="btn" id="block_btn" href="javascript:void(0)">Block</a>');
+                                               $this.remove();
+                                       } else {
+                                               updateSentTip("Failed to unblock, please try again.", 3000, "failure");
+                                       }
+                               },
+                               error: function(msg) {
+                                       updateSentTip("Failed to unblock, please try again.", 3000, "failure");
+                               }
+                       });
+               }
+       });
+       
+       $("#report_btn").click(function(e){
+               e.preventDefault();
+               var $this = $(this);
+               var id = $("#info_name").text();
+               if (confirm("Are you sure to report " + id + " for spam?")) {
+                       updateSentTip("Reporting " + id + " for spam...", 5000, "ing");
+                       $.ajax({
+                               url: "ajax/relation.php",
+                               type: "POST",
+                               data: "action=report&id=" + id,
+                               success: function(msg) {
+                                       if (msg.indexOf("success") >= 0) {
+                                               updateSentTip("You have reported " + id + " for spam!", 3000, "success");
+                                       } else {
+                                               updateSentTip("Failed to report " + id + " for spam, please try again.", 3000, "failure");
+                                       }
+                               },
+                               error: function(msg) {
+                                       updateSentTip("Failed to report " + id + " for spam, please try again.", 3000, "failure");
+                               }
+                       });
+               }
+       });
+});
+
+function getCookie(name){
+       var strCookie=document.cookie;
+       var arrCookie=strCookie.split("; ");
+       for(var i=0;i<arrCookie.length;i++){
+               var arr=arrCookie[i].split("=");
+               if(arr[0]==name)return unescape(arr[1]);
+       }
+return "";
+}
+function setCookie(name,value,expireHours){
+       var cookieString=name+"="+escape(value);
+       if(expireHours>0){
+               var date=new Date();
+               date.setTime(date.getTime+expireHours*3600*1000);
+               cookieString=cookieString+"; expire="+date.toGMTString();
+       }
+       document.cookie=cookieString;
+} 
+function onHide(){
+       $this = $("#info_hide_btn");
+       $this.after('<a class="btn" id="info_show_btn" href="javascript:void(0)">Show @</a>');
+       $this.remove();
+
+       $("#info_show_btn").click(function(){
+               $(".timeline li").each(function(i,o) {
+                       $(this).show();
+               });
+               $(this).after('<a class="btn" id="info_hide_btn" href="javascript:void(0)">Hide @</a>');
+               $(this).remove();
+               $("#info_hide_btn").live("click", function(){
+                       onHide();
+               });
+               setCookie("infoShow","show");
+       });
+
+       $(".timeline li").each(function(i,o) {
+               if ($(this).find(".status_word").text().indexOf("@") > -1) {
+                       $(this).hide();
+               }
+       });
+       setCookie("infoShow","hide");
+}
diff --git a/lib/config.php b/lib/config.php
deleted file mode 100644 (file)
index 75cb0d0..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-<?php\r
-       define('SECURE_KEY', 'YOUR_SECRET_KEY_PLZ_CHANGE_IT');\r
-       define('API_URL', 'http://twitter.com');\r
-       define('API_TWITTER', 'http://api.twitter.com');\r
-       define('TWITESE_API_URL', 'http://rabrapi0.appspot.com');\r
-       define('SITE_OWNER', 'YOUR_NAME');\r
-\r
-       // OAuth Config\r
-       define("CONSUMER_KEY", "YOUR_KEY");\r
-       define("CONSUMER_SECRET", "YOUR_SECRET");\r
-       define("OAUTH_CALLBACK", "http://www.YOUR_DOMAIN.com/YOUR_DIR/oauth.php");\r
-?>\r
index 954654e..48b7e18 100644 (file)
@@ -1,21 +1,16 @@
-<?php\r
-       define('API_URL', 'http://api.twitter.com/1.1');\r
-       \r
-       // Config\r
-       define('SECURE_KEY', 'YOU SHOULD CHANGE IT'); //You should NOT leave it blank\r
-       define('BASE_URL','http://embr.in'); //Where your embr is hosted, i.e. http://bugbug.tk\r
-       define("CONSUMER_KEY", "TEItTaPASySnYxziOyIdag");\r
-       define("CONSUMER_SECRET", "xJEoWvBumpqgiiBuviWTa7GT8KCvP7Kv3n0hixhJaZY");\r
-       \r
-       //Extra Auth\r
-       define('BASIC_AUTH', false); // if you set basic_auth true, u MUST set up the following BASIC_AUTH_USER and BASIC_AUTH_PW, and you d better reset your secure_key\r
-       define('BASIC_AUTH_USER', 'your_basic_auth_user');\r
-       define('BASIC_AUTH_PW', 'your_basic_auth_password');\r
-\r
-       define('ID_AUTH',false); // if you set id_auth true, u MUST set up the following AUTH_ID list\r
-       $AUTH_ID = array('username1','username2','username3','......');\r
-\r
-       //Optional Information\r
-       define('SITE_OWNER', 'TWITTER'); //Your Twitter ID  \r
-       define('BLOG_SITE',''); //blog_site\r
-?>\r
+<?php
+       define('API_URL', 'https://api.twitter.com/1.1');
+       
+       // Config
+       define('SECURE_KEY', 'YOU SHOULD CHANGE IT'); //You should NOT leave it blank
+       define('BASE_URL','http://embr.in'); //Where your embr is hosted, i.e. http://bugbug.tk
+       define("CONSUMER_KEY", "TEItTaPASySnYxziOyIdag");
+       define("CONSUMER_SECRET", "xJEoWvBumpqgiiBuviWTa7GT8KCvP7Kv3n0hixhJaZY");
+
+       define('ID_AUTH',false); // if you set id_auth true, u MUST set up the following AUTH_ID list
+       $AUTH_ID = array('username1','username2','username3','......');
+
+       //Optional Information
+       define('SITE_OWNER', 'TWITTER'); //Your Twitter ID  
+       define('BLOG_SITE',''); //blog_site
+?>
diff --git a/lib/image_uploader.php b/lib/image_uploader.php
deleted file mode 100644 (file)
index 4b2d947..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
-<?php\r
-\r
-class image_uploader{\r
-       public $responseInfo;\r
-       public $type = 'xml';\r
-       public $user_agent = 'rabr';\r
-\r
-       public function imgly($image){\r
-               $postdata = array( 'media' => "@$image");\r
-               $request = 'http://img.ly/api/upload';\r
-               return $this->objectify( $this->process( $request, $postdata ) );\r
-       }\r
-\r
-       /**** request method ****/\r
-       function process($url,$postargs=false)\r
-       {\r
-               $ch = curl_init($url);\r
-               curl_setopt($ch, CURLOPT_HTTPHEADER, array("Expect:"));\r
-\r
-               if($postargs !== false)\r
-               {\r
-                       curl_setopt ($ch, CURLOPT_POST, true);\r
-                       curl_setopt ($ch, CURLOPT_POSTFIELDS, $postargs);\r
-               }\r
-               curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);\r
-               curl_setopt($ch, CURLOPT_USERAGENT, $this->user_agent);\r
-               curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 1);\r
-\r
-               $response = curl_exec($ch);\r
-\r
-               $this->responseInfo=curl_getinfo($ch);\r
-               curl_close($ch);\r
-               return $this->responseInfo['http_code'];\r
-               if( intval( $this->responseInfo['http_code'] ) == 200 )\r
-                       return $response;    \r
-               else\r
-                       return false;\r
-       }\r
-\r
-       function objectify( $data )\r
-       {\r
-               if( function_exists('simplexml_load_string') ) {\r
-                       $obj = simplexml_load_string( $data );\r
-               }\r
-               if (isset($obj->error) || !$obj) return false;\r
-               else return $obj;\r
-       }\r
-}\r
-?>\r
index f0f0fc9..a507b97 100644 (file)
@@ -1,2 +1,2 @@
-<?php\r
+<?php
  function mobile_device_detect($iphone=true,$ipad=true,$android=true,$opera=true,$blackberry=true,$palm=true,$windows=true,$mobileredirect=false,$desktopredirect=false){ $mobile_browser = false; $user_agent = $_SERVER['HTTP_USER_AGENT']; $accept = $_SERVER['HTTP_ACCEPT']; switch(true){ case (preg_match('/ipad/i',$user_agent)); $mobile_browser = $ipad; $status = 'Apple iPad'; if(substr($ipad,0,4)=='http'){ $mobileredirect = $ipad; } break; case (preg_match('/ipod/i',$user_agent)||preg_match('/iphone/i',$user_agent)); $mobile_browser = $iphone; $status = 'Apple'; if(substr($iphone,0,4)=='http'){ $mobileredirect = $iphone; } break; case (preg_match('/android/i',$user_agent)); $mobile_browser = $android; $status = 'Android'; if(substr($android,0,4)=='http'){ $mobileredirect = $android; } break; case (preg_match('/opera mini/i',$user_agent)); $mobile_browser = $opera; $status = 'Opera'; if(substr($opera,0,4)=='http'){ $mobileredirect = $opera; } break; case (preg_match('/blackberry/i',$user_agent)); $mobile_browser = $blackberry; $status = 'Blackberry'; if(substr($blackberry,0,4)=='http'){ $mobileredirect = $blackberry; } break; case (preg_match('/(pre\/|palm os|palm|hiptop|avantgo|plucker|xiino|blazer|elaine)/i',$user_agent)); $mobile_browser = $palm; $status = 'Palm'; if(substr($palm,0,4)=='http'){ $mobileredirect = $palm; } break; case (preg_match('/(iris|3g_t|windows ce|opera mobi|windows ce; smartphone;|windows ce; iemobile)/i',$user_agent)); $mobile_browser = $windows; $status = 'Windows Smartphone'; if(substr($windows,0,4)=='http'){ $mobileredirect = $windows; } break; case (preg_match('/(mini 9.5|vx1000|lge |m800|e860|u940|ux840|compal|wireless| mobi|ahong|lg380|lgku|lgu900|lg210|lg47|lg920|lg840|lg370|sam-r|mg50|s55|g83|t66|vx400|mk99|d615|d763|el370|sl900|mp500|samu3|samu4|vx10|xda_|samu5|samu6|samu7|samu9|a615|b832|m881|s920|n210|s700|c-810|_h797|mob-x|sk16d|848b|mowser|s580|r800|471x|v120|rim8|c500foma:|160x|x160|480x|x640|t503|w839|i250|sprint|w398samr810|m5252|c7100|mt126|x225|s5330|s820|htil-g1|fly v71|s302|-x113|novarra|k610i|-three|8325rc|8352rc|sanyo|vx54|c888|nx250|n120|mtk |c5588|s710|t880|c5005|i;458x|p404i|s210|c5100|teleca|s940|c500|s590|foma|samsu|vx8|vx9|a1000|_mms|myx|a700|gu1100|bc831|e300|ems100|me701|me702m-three|sd588|s800|8325rc|ac831|mw200|brew |d88|htc\/|htc_touch|355x|m50|km100|d736|p-9521|telco|sl74|ktouch|m4u\/|me702|8325rc|kddi|phone|lg |sonyericsson|samsung|240x|x320|vx10|nokia|sony cmd|motorola|up.browser|up.link|mmp|symbian|smartphone|midp|wap|vodafone|o2|pocket|kindle|mobile|psp|treo)/i',$user_agent)); $mobile_browser = true; $status = 'Mobile matched on piped preg_match'; break; case ((strpos($accept,'text/vnd.wap.wml')>0)||(strpos($accept,'application/vnd.wap.xhtml+xml')>0)); $mobile_browser = true; $status = 'Mobile matched on content accept header'; break; case (isset($_SERVER['HTTP_X_WAP_PROFILE'])||isset($_SERVER['HTTP_PROFILE'])); $mobile_browser = true; $status = 'Mobile matched on profile headers being set'; break; case (in_array(strtolower(substr($user_agent,0,4)),array('1207'=>'1207','3gso'=>'3gso','4thp'=>'4thp','501i'=>'501i','502i'=>'502i','503i'=>'503i','504i'=>'504i','505i'=>'505i','506i'=>'506i','6310'=>'6310','6590'=>'6590','770s'=>'770s','802s'=>'802s','a wa'=>'a wa','acer'=>'acer','acs-'=>'acs-','airn'=>'airn','alav'=>'alav','asus'=>'asus','attw'=>'attw','au-m'=>'au-m','aur '=>'aur ','aus '=>'aus ','abac'=>'abac','acoo'=>'acoo','aiko'=>'aiko','alco'=>'alco','alca'=>'alca','amoi'=>'amoi','anex'=>'anex','anny'=>'anny','anyw'=>'anyw','aptu'=>'aptu','arch'=>'arch','argo'=>'argo','bell'=>'bell','bird'=>'bird','bw-n'=>'bw-n','bw-u'=>'bw-u','beck'=>'beck','benq'=>'benq','bilb'=>'bilb','blac'=>'blac','c55/'=>'c55/','cdm-'=>'cdm-','chtm'=>'chtm','capi'=>'capi','cond'=>'cond','craw'=>'craw','dall'=>'dall','dbte'=>'dbte','dc-s'=>'dc-s','dica'=>'dica','ds-d'=>'ds-d','ds12'=>'ds12','dait'=>'dait','devi'=>'devi','dmob'=>'dmob','doco'=>'doco','dopo'=>'dopo','el49'=>'el49','erk0'=>'erk0','esl8'=>'esl8','ez40'=>'ez40','ez60'=>'ez60','ez70'=>'ez70','ezos'=>'ezos','ezze'=>'ezze','elai'=>'elai','emul'=>'emul','eric'=>'eric','ezwa'=>'ezwa','fake'=>'fake','fly-'=>'fly-','fly_'=>'fly_','g-mo'=>'g-mo','g1 u'=>'g1 u','g560'=>'g560','gf-5'=>'gf-5','grun'=>'grun','gene'=>'gene','go.w'=>'go.w','good'=>'good','grad'=>'grad','hcit'=>'hcit','hd-m'=>'hd-m','hd-p'=>'hd-p','hd-t'=>'hd-t','hei-'=>'hei-','hp i'=>'hp i','hpip'=>'hpip','hs-c'=>'hs-c','htc '=>'htc ','htc-'=>'htc-','htca'=>'htca','htcg'=>'htcg','htcp'=>'htcp','htcs'=>'htcs','htct'=>'htct','htc_'=>'htc_','haie'=>'haie','hita'=>'hita','huaw'=>'huaw','hutc'=>'hutc','i-20'=>'i-20','i-go'=>'i-go','i-ma'=>'i-ma','i230'=>'i230','iac'=>'iac','iac-'=>'iac-','iac/'=>'iac/','ig01'=>'ig01','im1k'=>'im1k','inno'=>'inno','iris'=>'iris','jata'=>'jata','java'=>'java','kddi'=>'kddi','kgt'=>'kgt','kgt/'=>'kgt/','kpt '=>'kpt ','kwc-'=>'kwc-','klon'=>'klon','lexi'=>'lexi','lg g'=>'lg g','lg-a'=>'lg-a','lg-b'=>'lg-b','lg-c'=>'lg-c','lg-d'=>'lg-d','lg-f'=>'lg-f','lg-g'=>'lg-g','lg-k'=>'lg-k','lg-l'=>'lg-l','lg-m'=>'lg-m','lg-o'=>'lg-o','lg-p'=>'lg-p','lg-s'=>'lg-s','lg-t'=>'lg-t','lg-u'=>'lg-u','lg-w'=>'lg-w','lg/k'=>'lg/k','lg/l'=>'lg/l','lg/u'=>'lg/u','lg50'=>'lg50','lg54'=>'lg54','lge-'=>'lge-','lge/'=>'lge/','lynx'=>'lynx','leno'=>'leno','m1-w'=>'m1-w','m3ga'=>'m3ga','m50/'=>'m50/','maui'=>'maui','mc01'=>'mc01','mc21'=>'mc21','mcca'=>'mcca','medi'=>'medi','meri'=>'meri','mio8'=>'mio8','mioa'=>'mioa','mo01'=>'mo01','mo02'=>'mo02','mode'=>'mode','modo'=>'modo','mot '=>'mot ','mot-'=>'mot-','mt50'=>'mt50','mtp1'=>'mtp1','mtv '=>'mtv ','mate'=>'mate','maxo'=>'maxo','merc'=>'merc','mits'=>'mits','mobi'=>'mobi','motv'=>'motv','mozz'=>'mozz','n100'=>'n100','n101'=>'n101','n102'=>'n102','n202'=>'n202','n203'=>'n203','n300'=>'n300','n302'=>'n302','n500'=>'n500','n502'=>'n502','n505'=>'n505','n700'=>'n700','n701'=>'n701','n710'=>'n710','nec-'=>'nec-','nem-'=>'nem-','newg'=>'newg','neon'=>'neon','netf'=>'netf','noki'=>'noki','nzph'=>'nzph','o2 x'=>'o2 x','o2-x'=>'o2-x','opwv'=>'opwv','owg1'=>'owg1','opti'=>'opti','oran'=>'oran','p800'=>'p800','pand'=>'pand','pg-1'=>'pg-1','pg-2'=>'pg-2','pg-3'=>'pg-3','pg-6'=>'pg-6','pg-8'=>'pg-8','pg-c'=>'pg-c','pg13'=>'pg13','phil'=>'phil','pn-2'=>'pn-2','pt-g'=>'pt-g','palm'=>'palm','pana'=>'pana','pire'=>'pire','pock'=>'pock','pose'=>'pose','psio'=>'psio','qa-a'=>'qa-a','qc-2'=>'qc-2','qc-3'=>'qc-3','qc-5'=>'qc-5','qc-7'=>'qc-7','qc07'=>'qc07','qc12'=>'qc12','qc21'=>'qc21','qc32'=>'qc32','qc60'=>'qc60','qci-'=>'qci-','qwap'=>'qwap','qtek'=>'qtek','r380'=>'r380','r600'=>'r600','raks'=>'raks','rim9'=>'rim9','rove'=>'rove','s55/'=>'s55/','sage'=>'sage','sams'=>'sams','sc01'=>'sc01','sch-'=>'sch-','scp-'=>'scp-','sdk/'=>'sdk/','se47'=>'se47','sec-'=>'sec-','sec0'=>'sec0','sec1'=>'sec1','semc'=>'semc','sgh-'=>'sgh-','shar'=>'shar','sie-'=>'sie-','sk-0'=>'sk-0','sl45'=>'sl45','slid'=>'slid','smb3'=>'smb3','smt5'=>'smt5','sp01'=>'sp01','sph-'=>'sph-','spv '=>'spv ','spv-'=>'spv-','sy01'=>'sy01','samm'=>'samm','sany'=>'sany','sava'=>'sava','scoo'=>'scoo','send'=>'send','siem'=>'siem','smar'=>'smar','smit'=>'smit','soft'=>'soft','sony'=>'sony','t-mo'=>'t-mo','t218'=>'t218','t250'=>'t250','t600'=>'t600','t610'=>'t610','t618'=>'t618','tcl-'=>'tcl-','tdg-'=>'tdg-','telm'=>'telm','tim-'=>'tim-','ts70'=>'ts70','tsm-'=>'tsm-','tsm3'=>'tsm3','tsm5'=>'tsm5','tx-9'=>'tx-9','tagt'=>'tagt','talk'=>'talk','teli'=>'teli','topl'=>'topl','hiba'=>'hiba','up.b'=>'up.b','upg1'=>'upg1','utst'=>'utst','v400'=>'v400','v750'=>'v750','veri'=>'veri','vk-v'=>'vk-v','vk40'=>'vk40','vk50'=>'vk50','vk52'=>'vk52','vk53'=>'vk53','vm40'=>'vm40','vx98'=>'vx98','virg'=>'virg','vite'=>'vite','voda'=>'voda','vulc'=>'vulc','w3c '=>'w3c ','w3c-'=>'w3c-','wapj'=>'wapj','wapp'=>'wapp','wapu'=>'wapu','wapm'=>'wapm','wig '=>'wig ','wapi'=>'wapi','wapr'=>'wapr','wapv'=>'wapv','wapy'=>'wapy','wapa'=>'wapa','waps'=>'waps','wapt'=>'wapt','winc'=>'winc','winw'=>'winw','wonu'=>'wonu','x700'=>'x700','xda2'=>'xda2','xdag'=>'xdag','yas-'=>'yas-','your'=>'your','zte-'=>'zte-','zeto'=>'zeto','acs-'=>'acs-','alav'=>'alav','alca'=>'alca','amoi'=>'amoi','aste'=>'aste','audi'=>'audi','avan'=>'avan','benq'=>'benq','bird'=>'bird','blac'=>'blac','blaz'=>'blaz','brew'=>'brew','brvw'=>'brvw','bumb'=>'bumb','ccwa'=>'ccwa','cell'=>'cell','cldc'=>'cldc','cmd-'=>'cmd-','dang'=>'dang','doco'=>'doco','eml2'=>'eml2','eric'=>'eric','fetc'=>'fetc','hipt'=>'hipt','http'=>'http','ibro'=>'ibro','idea'=>'idea','ikom'=>'ikom','inno'=>'inno','ipaq'=>'ipaq','jbro'=>'jbro','jemu'=>'jemu','java'=>'java','jigs'=>'jigs','kddi'=>'kddi','keji'=>'keji','kyoc'=>'kyoc','kyok'=>'kyok','leno'=>'leno','lg-c'=>'lg-c','lg-d'=>'lg-d','lg-g'=>'lg-g','lge-'=>'lge-','libw'=>'libw','m-cr'=>'m-cr','maui'=>'maui','maxo'=>'maxo','midp'=>'midp','mits'=>'mits','mmef'=>'mmef','mobi'=>'mobi','mot-'=>'mot-','moto'=>'moto','mwbp'=>'mwbp','mywa'=>'mywa','nec-'=>'nec-','newt'=>'newt','nok6'=>'nok6','noki'=>'noki','o2im'=>'o2im','opwv'=>'opwv','palm'=>'palm','pana'=>'pana','pant'=>'pant','pdxg'=>'pdxg','phil'=>'phil','play'=>'play','pluc'=>'pluc','port'=>'port','prox'=>'prox','qtek'=>'qtek','qwap'=>'qwap','rozo'=>'rozo','sage'=>'sage','sama'=>'sama','sams'=>'sams','sany'=>'sany','sch-'=>'sch-','sec-'=>'sec-','send'=>'send','seri'=>'seri','sgh-'=>'sgh-','shar'=>'shar','sie-'=>'sie-','siem'=>'siem','smal'=>'smal','smar'=>'smar','sony'=>'sony','sph-'=>'sph-','symb'=>'symb','t-mo'=>'t-mo','teli'=>'teli','tim-'=>'tim-','tosh'=>'tosh','treo'=>'treo','tsm-'=>'tsm-','upg1'=>'upg1','upsi'=>'upsi','vk-v'=>'vk-v','voda'=>'voda','vx52'=>'vx52','vx53'=>'vx53','vx60'=>'vx60','vx61'=>'vx61','vx70'=>'vx70','vx80'=>'vx80','vx81'=>'vx81','vx83'=>'vx83','vx85'=>'vx85','wap-'=>'wap-','wapa'=>'wapa','wapi'=>'wapi','wapp'=>'wapp','wapr'=>'wapr','webc'=>'webc','whit'=>'whit','winw'=>'winw','wmlb'=>'wmlb','xda-'=>'xda-',))); $mobile_browser = true; $status = 'Mobile matched on in_array'; break; default; $mobile_browser = false; $status = 'Desktop / full capability browser'; break; } if($redirect = ($mobile_browser==true) ? $mobileredirect : $desktopredirect){ header('Location: '.$redirect); exit; }else{ if($mobile_browser==''){ return $mobile_browser; }else{ return array($mobile_browser,$status); } } } ?>
\ No newline at end of file
index 6f84b07..7f7c693 100644 (file)
-<?php\r
-\r
-/* Generic exception class\r
- */\r
-class OAuthException extends Exception {\r
-  // pass\r
-}\r
-\r
-class OAuthConsumer {\r
-  public $key;\r
-  public $secret;\r
-\r
-  function __construct($key, $secret) {\r
-    $this->key = $key;\r
-    $this->secret = $secret;\r
-  }\r
-\r
-  function __toString() {\r
-    return "OAuthConsumer[key=$this->key,secret=$this->secret]";\r
-  }\r
-}\r
-\r
-class OAuthToken {\r
-  // access tokens and request tokens\r
-  public $key;\r
-  public $secret;\r
-\r
-  /**\r
-   * key = the token\r
-   * secret = the token secret\r
-   */\r
-  function __construct($key, $secret) {\r
-    $this->key = $key;\r
-    $this->secret = $secret;\r
-  }\r
-\r
-  /**\r
-   * generates the basic string serialization of a token that a server\r
-   * would respond to request_token and access_token calls with\r
-   */\r
-  function to_string() {\r
-    return "oauth_token=" .\r
-           OAuthUtil::urlencode_rfc3986($this->key) .\r
-           "&oauth_token_secret=" .\r
-           OAuthUtil::urlencode_rfc3986($this->secret);\r
-  }\r
-\r
-  function __toString() {\r
-    return $this->to_string();\r
-  }\r
-}\r
-\r
-class OAuthSignatureMethod {\r
-  public function check_signature(&$request, $consumer, $token, $signature) {\r
-    $built = $this->build_signature($request, $consumer, $token);\r
-    return $built == $signature;\r
-  }\r
-}\r
-\r
-class OAuthSignatureMethod_HMAC_SHA1 extends OAuthSignatureMethod {\r
-  function get_name() {\r
-    return "HMAC-SHA1";\r
-  }\r
-\r
-  public function build_signature($request, $consumer, $token) {\r
-    $base_string = $request->get_signature_base_string();\r
-    $request->base_string = $base_string;\r
-\r
-    $key_parts = array(\r
-      $consumer->secret,\r
-      ($token) ? $token->secret : ""\r
-    );\r
-\r
-    $key_parts = OAuthUtil::urlencode_rfc3986($key_parts);\r
-    $key = implode('&', $key_parts);\r
-\r
-    return base64_encode(hash_hmac('sha1', $base_string, $key, true));\r
-  }\r
-}\r
-\r
-class OAuthSignatureMethod_PLAINTEXT extends OAuthSignatureMethod {\r
-  public function get_name() {\r
-    return "PLAINTEXT";\r
-  }\r
-\r
-  public function build_signature($request, $consumer, $token) {\r
-    $sig = array(\r
-      OAuthUtil::urlencode_rfc3986($consumer->secret)\r
-    );\r
-\r
-    if ($token) {\r
-      array_push($sig, OAuthUtil::urlencode_rfc3986($token->secret));\r
-    } else {\r
-      array_push($sig, '');\r
-    }\r
-\r
-    $raw = implode("&", $sig);\r
-    // for debug purposes\r
-    $request->base_string = $raw;\r
-\r
-    return OAuthUtil::urlencode_rfc3986($raw);\r
-  }\r
-}\r
-\r
-class OAuthSignatureMethod_RSA_SHA1 extends OAuthSignatureMethod {\r
-  public function get_name() {\r
-    return "RSA-SHA1";\r
-  }\r
-\r
-  protected function fetch_public_cert(&$request) {\r
-    // not implemented yet, ideas are:\r
-    // (1) do a lookup in a table of trusted certs keyed off of consumer\r
-    // (2) fetch via http using a url provided by the requester\r
-    // (3) some sort of specific discovery code based on request\r
-    //\r
-    // either way should return a string representation of the certificate\r
-    throw Exception("fetch_public_cert not implemented");\r
-  }\r
-\r
-  protected function fetch_private_cert(&$request) {\r
-    // not implemented yet, ideas are:\r
-    // (1) do a lookup in a table of trusted certs keyed off of consumer\r
-    //\r
-    // either way should return a string representation of the certificate\r
-    throw Exception("fetch_private_cert not implemented");\r
-  }\r
-\r
-  public function build_signature(&$request, $consumer, $token) {\r
-    $base_string = $request->get_signature_base_string();\r
-    $request->base_string = $base_string;\r
-\r
-    // Fetch the private key cert based on the request\r
-    $cert = $this->fetch_private_cert($request);\r
-\r
-    // Pull the private key ID from the certificate\r
-    $privatekeyid = openssl_get_privatekey($cert);\r
-\r
-    // Sign using the key\r
-    $ok = openssl_sign($base_string, $signature, $privatekeyid);\r
-\r
-    // Release the key resource\r
-    openssl_free_key($privatekeyid);\r
-\r
-    return base64_encode($signature);\r
-  }\r
-\r
-  public function check_signature(&$request, $consumer, $token, $signature) {\r
-    $decoded_sig = base64_decode($signature);\r
-\r
-    $base_string = $request->get_signature_base_string();\r
-\r
-    // Fetch the public key cert based on the request\r
-    $cert = $this->fetch_public_cert($request);\r
-\r
-    // Pull the public key ID from the certificate\r
-    $publickeyid = openssl_get_publickey($cert);\r
-\r
-    // Check the computed signature against the one passed in the query\r
-    $ok = openssl_verify($base_string, $decoded_sig, $publickeyid);\r
-\r
-    // Release the key resource\r
-    openssl_free_key($publickeyid);\r
-\r
-    return $ok == 1;\r
-  }\r
-}\r
-\r
-class OAuthRequest {\r
-  private $parameters;\r
-  private $http_method;\r
-  private $http_url;\r
-  public $http_header;\r
-  // for debug purposes\r
-  public $base_string;\r
-  public static $version = '1.0a';\r
-  public static $POST_INPUT = 'php://input';\r
-\r
-  function __construct($http_method, $http_url, $parameters = array(), $http_header= array()) {\r
-    //@$parameters or $parameters = array();\r
-    $this->parameters = $parameters;\r
-       //@$http_header or $http_header = array();\r
-       $this->http_header = $http_header;\r
-    $this->http_method = $http_method;\r
-    $this->http_url = $http_url;\r
-  }\r
-\r
-\r
-  /**\r
-   * attempt to build up a request from what was passed to the server\r
-   */\r
-  public static function from_request($http_method=NULL, $http_url=NULL, $parameters=NULL) {\r
-    $scheme = (!isset($_SERVER['HTTPS']) || $_SERVER['HTTPS'] != "on")\r
-              ? 'http'\r
-              : 'https';\r
-    @$http_url or $http_url = $scheme .\r
-                              '://' . $_SERVER['HTTP_HOST'] .\r
-                              ':' .\r
-                              $_SERVER['SERVER_PORT'] .\r
-                              $_SERVER['REQUEST_URI'];\r
-    @$http_method or $http_method = $_SERVER['REQUEST_METHOD'];\r
-\r
-    // We weren't handed any parameters, so let's find the ones relevant to\r
-    // this request.\r
-    // If you run XML-RPC or similar you should use this to provide your own\r
-    // parsed parameter-list\r
-    if (!$parameters) {\r
-      // Find request headers\r
-      $request_headers = OAuthUtil::get_headers();\r
-\r
-      // Parse the query-string to find GET parameters\r
-      $parameters = OAuthUtil::parse_parameters($_SERVER['QUERY_STRING']);\r
-\r
-      // It's a POST request of the proper content-type, so parse POST\r
-      // parameters and add those overriding any duplicates from GET\r
-      if ($http_method == "POST"\r
-          && @strstr($request_headers["Content-Type"],\r
-                     "application/x-www-form-urlencoded")\r
-          ) {\r
-        $post_data = OAuthUtil::parse_parameters(\r
-          file_get_contents(self::$POST_INPUT)\r
-        );\r
-        $parameters = array_merge($parameters, $post_data);\r
-      }\r
-\r
-      // We have a Authorization-header with OAuth data. Parse the header\r
-      // and add those overriding any duplicates from GET or POST\r
-      if (@substr($request_headers['Authorization'], 0, 6) == "OAuth ") {\r
-        $header_parameters = OAuthUtil::split_header(\r
-          $request_headers['Authorization']\r
-        );\r
-        $parameters = array_merge($parameters, $header_parameters);\r
-      }\r
-\r
-    }\r
-\r
-    return new OAuthRequest($http_method, $http_url, $parameters);\r
-  }\r
-\r
-  /**\r
-   * pretty much a helper function to set up the request\r
-   */\r
-  public static function from_consumer_and_token($consumer, $token, $http_method, $http_url, $parameters=NULL) {\r
-    @$parameters or $parameters = array();\r
-    $defaults = array("oauth_version" => OAuthRequest::$version,\r
-                      "oauth_nonce" => OAuthRequest::generate_nonce(),\r
-                      "oauth_timestamp" => OAuthRequest::generate_timestamp(),\r
-                      "oauth_consumer_key" => $consumer->key);\r
-    if ($token)\r
-      $defaults['oauth_token'] = $token->key;\r
-\r
-    $parameters = array_merge($defaults, $parameters);\r
-\r
-    return new OAuthRequest($http_method, $http_url, $parameters);\r
-  }\r
-\r
-  public function set_parameter($name, $value, $allow_duplicates = true) {\r
-    if ($allow_duplicates && isset($this->parameters[$name])) {\r
-      // We have already added parameter(s) with this name, so add to the list\r
-      if (is_scalar($this->parameters[$name])) {\r
-        // This is the first duplicate, so transform scalar (string)\r
-        // into an array so we can add the duplicates\r
-        $this->parameters[$name] = array($this->parameters[$name]);\r
-      }\r
-\r
-      $this->parameters[$name][] = $value;\r
-    } else {\r
-      $this->parameters[$name] = $value;\r
-    }\r
-  }\r
-  \r
-\r
-  public function set_http_header(&$multipart = NULL) {\r
-       if (empty($this->parameters)) {\r
-               $this->http_header[] = 'Content-Type:';\r
-      $this->http_header[] = 'Content-Length:';\r
-       } else {\r
-               if($multipart) $this->http_header[] = $this->to_header(); //add OAuth header if we post multipart\r
-               $this->http_header[] = 'Expect: ';\r
-       }\r
-  }\r
-\r
-  public function get_parameter($name) {\r
-    return isset($this->parameters[$name]) ? $this->parameters[$name] : null;\r
-  }\r
-\r
-  public function get_parameters() {\r
-    return $this->parameters;\r
-  }\r
-\r
-  public function unset_parameter($name) {\r
-    unset($this->parameters[$name]);\r
-  }\r
-\r
-  /**\r
-   * The request parameters, sorted and concatenated into a normalized string.\r
-   * @return string\r
-   */\r
-  public function get_signable_parameters() {\r
-    // Grab all parameters\r
-    $params = $this->parameters;\r
-\r
-    // Remove oauth_signature if present\r
-    // Ref: Spec: 9.1.1 ("The oauth_signature parameter MUST be excluded.")\r
-    if (isset($params['oauth_signature'])) {\r
-      unset($params['oauth_signature']);\r
-    }\r
-\r
-    return OAuthUtil::build_http_query($params);\r
-  }\r
-\r
-  /**\r
-   * Returns the base string of this request\r
-   *\r
-   * The base string defined as the method, the url\r
-   * and the parameters (normalized), each urlencoded\r
-   * and the concated with &.\r
-   */\r
-  public function get_signature_base_string() {\r
-    $parts = array(\r
-      $this->get_normalized_http_method(),\r
-      $this->get_normalized_http_url(),\r
-      $this->get_signable_parameters()\r
-    );\r
-\r
-    $parts = OAuthUtil::urlencode_rfc3986($parts);\r
-\r
-    return implode('&', $parts);\r
-  }\r
-\r
-  /**\r
-   * just uppercases the http method\r
-   */\r
-  public function get_normalized_http_method() {\r
-    return strtoupper($this->http_method);\r
-  }\r
-\r
-  /**\r
-   * parses the url and rebuilds it to be\r
-   * scheme://host/path\r
-   */\r
-  public function get_normalized_http_url() {\r
-    $parts = parse_url($this->http_url);\r
-\r
-    $port = @$parts['port'];\r
-    $scheme = $parts['scheme'];\r
-    $host = $parts['host'];\r
-    $path = @$parts['path'];\r
-\r
-    $port or $port = ($scheme == 'https') ? '443' : '80';\r
-\r
-    if (($scheme == 'https' && $port != '443')\r
-        || ($scheme == 'http' && $port != '80')) {\r
-      $host = "$host:$port";\r
-    }\r
-    return "$scheme://$host$path";\r
-  }\r
-\r
-  /**\r
-   * builds a url usable for a GET request\r
-   */\r
-  public function to_url() {\r
-    $post_data = $this->to_postdata();\r
-    $out = $this->get_normalized_http_url();\r
-    if ($post_data) {\r
-      $out .= '?'.$post_data;\r
-    }\r
-    return $out;\r
-  }\r
-\r
-  /**\r
-   * builds the data one would send in a POST request\r
-   */\r
-  public function to_postdata() {\r
-    return OAuthUtil::build_http_query($this->parameters);\r
-  }\r
-\r
-  /**\r
-   * builds the Authorization: header\r
-   */\r
-  public function to_header($realm=NULL) {\r
-    $out = 'Authorization: OAuth ';\r
-       if ($realm) $out .= 'realm="'.$realm.'",';\r
-    $total = array();\r
-    foreach ($this->parameters as $k => $v) {\r
-      if (substr($k, 0, 5) != "oauth") continue;\r
-      if (is_array($v)) {\r
-        throw new OAuthException('Arrays not supported in headers');\r
-      }\r
-      $out .= OAuthUtil::urlencode_rfc3986($k) .\r
-              '="' .\r
-              OAuthUtil::urlencode_rfc3986($v) .\r
-              '",';\r
-    }\r
-    return substr($out,0,-1);\r
-  }\r
-\r
-  public function __toString() {\r
-    return $this->to_url();\r
-  }\r
-\r
-\r
-  public function sign_request($signature_method, $consumer, $token) {\r
-    $this->set_parameter(\r
-      "oauth_signature_method",\r
-      $signature_method->get_name(),\r
-      false\r
-    );\r
-    $signature = $this->build_signature($signature_method, $consumer, $token);\r
-    $this->set_parameter("oauth_signature", $signature, false);\r
-  }\r
-\r
-  public function build_signature($signature_method, $consumer, $token) {\r
-    $signature = $signature_method->build_signature($this, $consumer, $token);\r
-    return $signature;\r
-  }\r
-\r
-  /**\r
-   * util function: current timestamp\r
-   */\r
-  private static function generate_timestamp() {\r
-    return $_SERVER['REQUEST_TIME'];\r
-  }\r
-\r
-  /**\r
-   * util function: current nonce\r
-   */\r
-  private static function generate_nonce() {\r
-    $mt = microtime();\r
-    $rand = mt_rand();\r
-\r
-    return md5($mt . $rand); // md5s look nicer than numbers\r
-  }\r
-}\r
-\r
-class OAuthUtil {\r
-  public static function urlencode_rfc3986($input) {\r
-  if (is_array($input)) {\r
-    return array_map(array('OAuthUtil', 'urlencode_rfc3986'), $input);\r
-  } else if (is_scalar($input)) {\r
-    return str_replace(\r
-      '+',\r
-      ' ',\r
-      str_replace('%7E', '~', rawurlencode($input))\r
-    );\r
-  } else {\r
-    return '';\r
-  }\r
-}\r
-\r
-\r
-  // This decode function isn't taking into consideration the above\r
-  // modifications to the encoding process. However, this method doesn't\r
-  // seem to be used anywhere so leaving it as is.\r
-  public static function urldecode_rfc3986($string) {\r
-    return urldecode($string);\r
-  }\r
-\r
-  // Utility function for turning the Authorization: header into\r
-  // parameters, has to do some unescaping\r
-  // Can filter out any non-oauth parameters if needed (default behaviour)\r
-  public static function split_header($header, $only_allow_oauth_parameters = true) {\r
-    $pattern = '/(([-_a-z]*)=("([^"]*)"|([^,]*)),?)/';\r
-    $offset = 0;\r
-    $params = array();\r
-    while (preg_match($pattern, $header, $matches, PREG_OFFSET_CAPTURE, $offset) > 0) {\r
-      $match = $matches[0];\r
-      $header_name = $matches[2][0];\r
-      $header_content = (isset($matches[5])) ? $matches[5][0] : $matches[4][0];\r
-      if (preg_match('/^oauth_/', $header_name) || !$only_allow_oauth_parameters) {\r
-        $params[$header_name] = OAuthUtil::urldecode_rfc3986($header_content);\r
-      }\r
-      $offset = $match[1] + strlen($match[0]);\r
-    }\r
-\r
-    if (isset($params['realm'])) {\r
-      unset($params['realm']);\r
-    }\r
-\r
-    return $params;\r
-  }\r
-\r
-  // helper to try to sort out headers for people who aren't running apache\r
-  public static function get_headers() {\r
-    if (function_exists('apache_request_headers')) {\r
-      // we need this to get the actual Authorization: header\r
-      // because apache tends to tell us it doesn't exist\r
-      return apache_request_headers();\r
-    }\r
-    // otherwise we don't have apache and are just going to have to hope\r
-    // that $_SERVER actually contains what we need\r
-    $out = array();\r
-    foreach ($_SERVER as $key => $value) {\r
-      if (substr($key, 0, 5) == "HTTP_") {\r
-        // this is chaos, basically it is just there to capitalize the first\r
-        // letter of every word that is not an initial HTTP and strip HTTP\r
-        // code from przemek\r
-        $key = str_replace(\r
-          " ",\r
-          "-",\r
-          ucwords(strtolower(str_replace("_", " ", substr($key, 5))))\r
-        );\r
-        $out[$key] = $value;\r
-      }\r
-    }\r
-    return $out;\r
-  }\r
-\r
-  // This function takes a input like a=b&a=c&d=e and returns the parsed\r
-  // parameters like this\r
-  // array('a' => array('b','c'), 'd' => 'e')\r
-  public static function parse_parameters( $input ) {\r
-    if (!isset($input) || !$input) return array();\r
-\r
-    $pairs = explode('&', $input);\r
-\r
-    $parsed_parameters = array();\r
-    foreach ($pairs as $pair) {\r
-      $split = explode('=', $pair, 2);\r
-      $parameter = OAuthUtil::urldecode_rfc3986($split[0]);\r
-      $value = isset($split[1]) ? OAuthUtil::urldecode_rfc3986($split[1]) : '';\r
-\r
-      if (isset($parsed_parameters[$parameter])) {\r
-        // We have already recieved parameter(s) with this name, so add to the list\r
-        // of parameters with this name\r
-\r
-        if (is_scalar($parsed_parameters[$parameter])) {\r
-          // This is the first duplicate, so transform scalar (string) into an array\r
-          // so we can add the duplicates\r
-          $parsed_parameters[$parameter] = array($parsed_parameters[$parameter]);\r
-        }\r
-\r
-        $parsed_parameters[$parameter][] = $value;\r
-      } else {\r
-        $parsed_parameters[$parameter] = $value;\r
-      }\r
-    }\r
-    return $parsed_parameters;\r
-  }\r
-\r
-  public static function build_http_query($params,$multipart=NULL) {\r
-    if (!$params) return '';\r
-\r
-    // Urlencode both keys and values\r
-    $keys = OAuthUtil::urlencode_rfc3986(array_keys($params));\r
-    $values = OAuthUtil::urlencode_rfc3986(array_values($params));\r
-    $params = array_combine($keys, $values);\r
-\r
-    // Parameters are sorted by name, using lexicographical byte value ordering.\r
-    // Ref: Spec: 9.1.1 (1)\r
-    uksort($params, 'strcmp');\r
-\r
-    $pairs = array();\r
-    foreach ($params as $parameter => $value) {\r
-      if (is_array($value)) {\r
-        // If two or more parameters share the same name, they are sorted by their value\r
-        // Ref: Spec: 9.1.1 (1)\r
-        natsort($value);\r
-        foreach ($value as $duplicate_value) {\r
-          $pairs[] = $parameter . '=' . $duplicate_value;\r
-        }\r
-      } else {\r
-        $pairs[] = $parameter . '=' . $value;\r
-      }\r
-    }\r
-    // For each parameter, the name is separated from the corresponding value by an '=' character (ASCII code 61)\r
-    // Each name-value pair is separated by an '&' character (ASCII code 38)\r
-    return implode('&', $pairs);\r
-  }\r
-}\r
-\r
-?>\r
+<?php
+
+/* Generic exception class
+ */
+class OAuthException extends Exception {
+  // pass
+}
+
+class OAuthConsumer {
+  public $key;
+  public $secret;
+
+  function __construct($key, $secret) {
+    $this->key = $key;
+    $this->secret = $secret;
+  }
+
+  function __toString() {
+    return "OAuthConsumer[key=$this->key,secret=$this->secret]";
+  }
+}
+
+class OAuthToken {
+  // access tokens and request tokens
+  public $key;
+  public $secret;
+
+  /**
+   * key = the token
+   * secret = the token secret
+   */
+  function __construct($key, $secret) {
+    $this->key = $key;
+    $this->secret = $secret;
+  }
+
+  /**
+   * generates the basic string serialization of a token that a server
+   * would respond to request_token and access_token calls with
+   */
+  function to_string() {
+    return "oauth_token=" .
+           OAuthUtil::urlencode_rfc3986($this->key) .
+           "&oauth_token_secret=" .
+           OAuthUtil::urlencode_rfc3986($this->secret);
+  }
+
+  function __toString() {
+    return $this->to_string();
+  }
+}
+
+class OAuthSignatureMethod {
+  public function check_signature(&$request, $consumer, $token, $signature) {
+    $built = $this->build_signature($request, $consumer, $token);
+    return $built == $signature;
+  }
+}
+
+class OAuthSignatureMethod_HMAC_SHA1 extends OAuthSignatureMethod {
+  function get_name() {
+    return "HMAC-SHA1";
+  }
+
+  public function build_signature($request, $consumer, $token) {
+    $base_string = $request->get_signature_base_string();
+    $request->base_string = $base_string;
+
+    $key_parts = array(
+      $consumer->secret,
+      ($token) ? $token->secret : ""
+    );
+
+    $key_parts = OAuthUtil::urlencode_rfc3986($key_parts);
+    $key = implode('&', $key_parts);
+
+    return base64_encode(hash_hmac('sha1', $base_string, $key, true));
+  }
+}
+
+class OAuthSignatureMethod_PLAINTEXT extends OAuthSignatureMethod {
+  public function get_name() {
+    return "PLAINTEXT";
+  }
+
+  public function build_signature($request, $consumer, $token) {
+    $sig = array(
+      OAuthUtil::urlencode_rfc3986($consumer->secret)
+    );
+
+    if ($token) {
+      array_push($sig, OAuthUtil::urlencode_rfc3986($token->secret));
+    } else {
+      array_push($sig, '');
+    }
+
+    $raw = implode("&", $sig);
+    // for debug purposes
+    $request->base_string = $raw;
+
+    return OAuthUtil::urlencode_rfc3986($raw);
+  }
+}
+
+class OAuthSignatureMethod_RSA_SHA1 extends OAuthSignatureMethod {
+  public function get_name() {
+    return "RSA-SHA1";
+  }
+
+  protected function fetch_public_cert(&$request) {
+    // not implemented yet, ideas are:
+    // (1) do a lookup in a table of trusted certs keyed off of consumer
+    // (2) fetch via http using a url provided by the requester
+    // (3) some sort of specific discovery code based on request
+    //
+    // either way should return a string representation of the certificate
+    throw Exception("fetch_public_cert not implemented");
+  }
+
+  protected function fetch_private_cert(&$request) {
+    // not implemented yet, ideas are:
+    // (1) do a lookup in a table of trusted certs keyed off of consumer
+    //
+    // either way should return a string representation of the certificate
+    throw Exception("fetch_private_cert not implemented");
+  }
+
+  public function build_signature(&$request, $consumer, $token) {
+    $base_string = $request->get_signature_base_string();
+    $request->base_string = $base_string;
+
+    // Fetch the private key cert based on the request
+    $cert = $this->fetch_private_cert($request);
+
+    // Pull the private key ID from the certificate
+    $privatekeyid = openssl_get_privatekey($cert);
+
+    // Sign using the key
+    $ok = openssl_sign($base_string, $signature, $privatekeyid);
+
+    // Release the key resource
+    openssl_free_key($privatekeyid);
+
+    return base64_encode($signature);
+  }
+
+  public function check_signature(&$request, $consumer, $token, $signature) {
+    $decoded_sig = base64_decode($signature);
+
+    $base_string = $request->get_signature_base_string();
+
+    // Fetch the public key cert based on the request
+    $cert = $this->fetch_public_cert($request);
+
+    // Pull the public key ID from the certificate
+    $publickeyid = openssl_get_publickey($cert);
+
+    // Check the computed signature against the one passed in the query
+    $ok = openssl_verify($base_string, $decoded_sig, $publickeyid);
+
+    // Release the key resource
+    openssl_free_key($publickeyid);
+
+    return $ok == 1;
+  }
+}
+
+class OAuthRequest {
+  private $parameters;
+  private $http_method;
+  private $http_url;
+  public $http_header;
+  // for debug purposes
+  public $base_string;
+  public static $version = '1.0a';
+  public static $POST_INPUT = 'php://input';
+
+  function __construct($http_method, $http_url, $parameters = array(), $http_header= array()) {
+    //@$parameters or $parameters = array();
+    $this->parameters = $parameters;
+       //@$http_header or $http_header = array();
+       $this->http_header = $http_header;
+    $this->http_method = $http_method;
+    $this->http_url = $http_url;
+  }
+
+
+  /**
+   * attempt to build up a request from what was passed to the server
+   */
+  public static function from_request($http_method=NULL, $http_url=NULL, $parameters=NULL) {
+    $scheme = (!isset($_SERVER['HTTPS']) || $_SERVER['HTTPS'] != "on")
+              ? 'http'
+              : 'https';
+    @$http_url or $http_url = $scheme .
+                              '://' . $_SERVER['HTTP_HOST'] .
+                              ':' .
+                              $_SERVER['SERVER_PORT'] .
+                              $_SERVER['REQUEST_URI'];
+    @$http_method or $http_method = $_SERVER['REQUEST_METHOD'];
+
+    // We weren't handed any parameters, so let's find the ones relevant to
+    // this request.
+    // If you run XML-RPC or similar you should use this to provide your own
+    // parsed parameter-list
+    if (!$parameters) {
+      // Find request headers
+      $request_headers = OAuthUtil::get_headers();
+
+      // Parse the query-string to find GET parameters
+      $parameters = OAuthUtil::parse_parameters($_SERVER['QUERY_STRING']);
+
+      // It's a POST request of the proper content-type, so parse POST
+      // parameters and add those overriding any duplicates from GET
+      if ($http_method == "POST"
+          && @strstr($request_headers["Content-Type"],
+                     "application/x-www-form-urlencoded")
+          ) {
+        $post_data = OAuthUtil::parse_parameters(
+          file_get_contents(self::$POST_INPUT)
+        );
+        $parameters = array_merge($parameters, $post_data);
+      }
+
+      // We have a Authorization-header with OAuth data. Parse the header
+      // and add those overriding any duplicates from GET or POST
+      if (@substr($request_headers['Authorization'], 0, 6) == "OAuth ") {
+        $header_parameters = OAuthUtil::split_header(
+          $request_headers['Authorization']
+        );
+        $parameters = array_merge($parameters, $header_parameters);
+      }
+
+    }
+
+    return new OAuthRequest($http_method, $http_url, $parameters);
+  }
+
+  /**
+   * pretty much a helper function to set up the request
+   */
+  public static function from_consumer_and_token($consumer, $token, $http_method, $http_url, $parameters=NULL) {
+    @$parameters or $parameters = array();
+    $defaults = array("oauth_version" => OAuthRequest::$version,
+                      "oauth_nonce" => OAuthRequest::generate_nonce(),
+                      "oauth_timestamp" => OAuthRequest::generate_timestamp(),
+                      "oauth_consumer_key" => $consumer->key);
+    if ($token)
+      $defaults['oauth_token'] = $token->key;
+
+    $parameters = array_merge($defaults, $parameters);
+
+    return new OAuthRequest($http_method, $http_url, $parameters);
+  }
+
+  public function set_parameter($name, $value, $allow_duplicates = true) {
+    if ($allow_duplicates && isset($this->parameters[$name])) {
+      // We have already added parameter(s) with this name, so add to the list
+      if (is_scalar($this->parameters[$name])) {
+        // This is the first duplicate, so transform scalar (string)
+        // into an array so we can add the duplicates
+        $this->parameters[$name] = array($this->parameters[$name]);
+      }
+
+      $this->parameters[$name][] = $value;
+    } else {
+      $this->parameters[$name] = $value;
+    }
+  }
+  
+
+  public function set_http_header(&$multipart = NULL) {
+       if (empty($this->parameters)) {
+               $this->http_header[] = 'Content-Type:';
+      $this->http_header[] = 'Content-Length:';
+       } else {
+               if($multipart) $this->http_header[] = $this->to_header(); //add OAuth header if we post multipart
+               $this->http_header[] = 'Expect: ';
+       }
+  }
+
+  public function get_parameter($name) {
+    return isset($this->parameters[$name]) ? $this->parameters[$name] : null;
+  }
+
+  public function get_parameters() {
+    return $this->parameters;
+  }
+
+  public function unset_parameter($name) {
+    unset($this->parameters[$name]);
+  }
+
+  /**
+   * The request parameters, sorted and concatenated into a normalized string.
+   * @return string
+   */
+  public function get_signable_parameters() {
+    // Grab all parameters
+    $params = $this->parameters;
+
+    // Remove oauth_signature if present
+    // Ref: Spec: 9.1.1 ("The oauth_signature parameter MUST be excluded.")
+    if (isset($params['oauth_signature'])) {
+      unset($params['oauth_signature']);
+    }
+
+    return OAuthUtil::build_http_query($params);
+  }
+
+  /**
+   * Returns the base string of this request
+   *
+   * The base string defined as the method, the url
+   * and the parameters (normalized), each urlencoded
+   * and the concated with &.
+   */
+  public function get_signature_base_string() {
+    $parts = array(
+      $this->get_normalized_http_method(),
+      $this->get_normalized_http_url(),
+      $this->get_signable_parameters()
+    );
+
+    $parts = OAuthUtil::urlencode_rfc3986($parts);
+
+    return implode('&', $parts);
+  }
+
+  /**
+   * just uppercases the http method
+   */
+  public function get_normalized_http_method() {
+    return strtoupper($this->http_method);
+  }
+
+  /**
+   * parses the url and rebuilds it to be
+   * scheme://host/path
+   */
+  public function get_normalized_http_url() {
+    $parts = parse_url($this->http_url);
+
+    $port = @$parts['port'];
+    $scheme = $parts['scheme'];
+    $host = $parts['host'];
+    $path = @$parts['path'];
+
+    $port or $port = ($scheme == 'https') ? '443' : '80';
+
+    if (($scheme == 'https' && $port != '443')
+        || ($scheme == 'http' && $port != '80')) {
+      $host = "$host:$port";
+    }
+    return "$scheme://$host$path";
+  }
+
+  /**
+   * builds a url usable for a GET request
+   */
+  public function to_url() {
+    $post_data = $this->to_postdata();
+    $out = $this->get_normalized_http_url();
+    if ($post_data) {
+      $out .= '?'.$post_data;
+    }
+    return $out;
+  }
+
+  /**
+   * builds the data one would send in a POST request
+   */
+  public function to_postdata() {
+    return OAuthUtil::build_http_query($this->parameters);
+  }
+
+  /**
+   * builds the Authorization: header
+   */
+  public function to_header($realm=NULL) {
+    $out = 'Authorization: OAuth ';
+       if ($realm) $out .= 'realm="'.$realm.'",';
+    $total = array();
+    foreach ($this->parameters as $k => $v) {
+      if (substr($k, 0, 5) != "oauth") continue;
+      if (is_array($v)) {
+        throw new OAuthException('Arrays not supported in headers');
+      }
+      $out .= OAuthUtil::urlencode_rfc3986($k) .
+              '="' .
+              OAuthUtil::urlencode_rfc3986($v) .
+              '",';
+    }
+    return substr($out,0,-1);
+  }
+
+  public function __toString() {
+    return $this->to_url();
+  }
+
+
+  public function sign_request($signature_method, $consumer, $token) {
+    $this->set_parameter(
+      "oauth_signature_method",
+      $signature_method->get_name(),
+      false
+    );
+    $signature = $this->build_signature($signature_method, $consumer, $token);
+    $this->set_parameter("oauth_signature", $signature, false);
+  }
+
+  public function build_signature($signature_method, $consumer, $token) {
+    $signature = $signature_method->build_signature($this, $consumer, $token);
+    return $signature;
+  }
+
+  /**
+   * util function: current timestamp
+   */
+  private static function generate_timestamp() {
+    return $_SERVER['REQUEST_TIME'];
+  }
+
+  /**
+   * util function: current nonce
+   */
+  private static function generate_nonce() {
+    $mt = microtime();
+    $rand = mt_rand();
+
+    return md5($mt . $rand); // md5s look nicer than numbers
+  }
+}
+
+class OAuthUtil {
+  public static function urlencode_rfc3986($input) {
+  if (is_array($input)) {
+    return array_map(array('OAuthUtil', 'urlencode_rfc3986'), $input);
+  } else if (is_scalar($input)) {
+    return str_replace(
+      '+',
+      ' ',
+      str_replace('%7E', '~', rawurlencode($input))
+    );
+  } else {
+    return '';
+  }
+}
+
+
+  // This decode function isn't taking into consideration the above
+  // modifications to the encoding process. However, this method doesn't
+  // seem to be used anywhere so leaving it as is.
+  public static function urldecode_rfc3986($string) {
+    return urldecode($string);
+  }
+
+  // Utility function for turning the Authorization: header into
+  // parameters, has to do some unescaping
+  // Can filter out any non-oauth parameters if needed (default behaviour)
+  public static function split_header($header, $only_allow_oauth_parameters = true) {
+    $pattern = '/(([-_a-z]*)=("([^"]*)"|([^,]*)),?)/';
+    $offset = 0;
+    $params = array();
+    while (preg_match($pattern, $header, $matches, PREG_OFFSET_CAPTURE, $offset) > 0) {
+      $match = $matches[0];
+      $header_name = $matches[2][0];
+      $header_content = (isset($matches[5])) ? $matches[5][0] : $matches[4][0];
+      if (preg_match('/^oauth_/', $header_name) || !$only_allow_oauth_parameters) {
+        $params[$header_name] = OAuthUtil::urldecode_rfc3986($header_content);
+      }
+      $offset = $match[1] + strlen($match[0]);
+    }
+
+    if (isset($params['realm'])) {
+      unset($params['realm']);
+    }
+
+    return $params;
+  }
+
+  // helper to try to sort out headers for people who aren't running apache
+  public static function get_headers() {
+    if (function_exists('apache_request_headers')) {
+      // we need this to get the actual Authorization: header
+      // because apache tends to tell us it doesn't exist
+      return apache_request_headers();
+    }
+    // otherwise we don't have apache and are just going to have to hope
+    // that $_SERVER actually contains what we need
+    $out = array();
+    foreach ($_SERVER as $key => $value) {
+      if (substr($key, 0, 5) == "HTTP_") {
+        // this is chaos, basically it is just there to capitalize the first
+        // letter of every word that is not an initial HTTP and strip HTTP
+        // code from przemek
+        $key = str_replace(
+          " ",
+          "-",
+          ucwords(strtolower(str_replace("_", " ", substr($key, 5))))
+        );
+        $out[$key] = $value;
+      }
+    }
+    return $out;
+  }
+
+  // This function takes a input like a=b&a=c&d=e and returns the parsed
+  // parameters like this
+  // array('a' => array('b','c'), 'd' => 'e')
+  public static function parse_parameters( $input ) {
+    if (!isset($input) || !$input) return array();
+
+    $pairs = explode('&', $input);
+
+    $parsed_parameters = array();
+    foreach ($pairs as $pair) {
+      $split = explode('=', $pair, 2);
+      $parameter = OAuthUtil::urldecode_rfc3986($split[0]);
+      $value = isset($split[1]) ? OAuthUtil::urldecode_rfc3986($split[1]) : '';
+
+      if (isset($parsed_parameters[$parameter])) {
+        // We have already recieved parameter(s) with this name, so add to the list
+        // of parameters with this name
+
+        if (is_scalar($parsed_parameters[$parameter])) {
+          // This is the first duplicate, so transform scalar (string) into an array
+          // so we can add the duplicates
+          $parsed_parameters[$parameter] = array($parsed_parameters[$parameter]);
+        }
+
+        $parsed_parameters[$parameter][] = $value;
+      } else {
+        $parsed_parameters[$parameter] = $value;
+      }
+    }
+    return $parsed_parameters;
+  }
+
+  public static function build_http_query($params,$multipart=NULL) {
+    if (!$params) return '';
+
+    // Urlencode both keys and values
+    $keys = OAuthUtil::urlencode_rfc3986(array_keys($params));
+    $values = OAuthUtil::urlencode_rfc3986(array_values($params));
+    $params = array_combine($keys, $values);
+
+    // Parameters are sorted by name, using lexicographical byte value ordering.
+    // Ref: Spec: 9.1.1 (1)
+    uksort($params, 'strcmp');
+
+    $pairs = array();
+    foreach ($params as $parameter => $value) {
+      if (is_array($value)) {
+        // If two or more parameters share the same name, they are sorted by their value
+        // Ref: Spec: 9.1.1 (1)
+        natsort($value);
+        foreach ($value as $duplicate_value) {
+          $pairs[] = $parameter . '=' . $duplicate_value;
+        }
+      } else {
+        $pairs[] = $parameter . '=' . $value;
+      }
+    }
+    // For each parameter, the name is separated from the corresponding value by an '=' character (ASCII code 61)
+    // Each name-value pair is separated by an '&' character (ASCII code 38)
+    return implode('&', $pairs);
+  }
+}
+
+?>
index f60a10d..503e9a7 100644 (file)
@@ -12,7 +12,7 @@
                        <span class="status_body">
                        <span title="Retweets from people you follow appear in your timeline." class="big-retweet-icon"></span>
                        <span class="status_id">'.$status->id_str.'</span>
-                       <span class="status_word"><a class="user_name" href="user.php?id='.$status_owner->screen_name.'">'.$status_owner->screen_name.'</a> <span class="tweet">&nbsp;'.$text.'</span></span>
+                       <span class="status_word"><a class="user_name" href="user.php?id='.$status_owner->screen_name.'" id="'.$status_owner->screen_name.'">'.($_COOKIE['shownick']=='true' ? $status_owner->name : $status_owner->screen_name).'</a> <span class="tweet">&nbsp;'.$text.'</span></span>
                        <span class="actions">
                        <a class="replie_btn" title="Reply" href="#">Reply</a>
                        <a class="rt_btn" title="Retweet" href="#">Retweet</a>';
@@ -46,7 +46,7 @@
                        <span class="status_body">
                        <span title="Retweets from people you follow appear in your timeline." class="big-retweet-icon"></span><span class="status_id">'.$status->id_str.'</span>
                        <span class="status_word">
-                       <a class="user_name" href="user.php?id='.$status_owner->screen_name.'">'.$status_owner->screen_name.'</a><span class="tweet">&nbsp;'.$text.'</span></span>
+                       <a class="user_name" href="user.php?id='.$status_owner->screen_name.'" id="'.$status_owner->screen_name.'">'.($_COOKIE['shownick']=='true' ? $status_owner->name : $status_owner->screen_name).'</a><span class="tweet">&nbsp;'.$text.'</span></span>
                        <span class="actions">
                        <a class="replie_btn" title="Reply" href="#">Reply</a>
                        <a class="rt_btn" title="Retweet" href="#">Retweet</a>';
@@ -55,6 +55,8 @@
                        </span>
                        <span class="status_info">via '.$status->source.'
                        <span class="date"><a href="status.php?id='.$status->id_str.'" id="'.$date.'" target="_blank">'.date('Y-m-d H:i:s', $date).'</a></span>
+                       retweeted by '.$status->retweet_count.
+                       (($status->retweet_count>1)?' persons':' person').'
                        </span>
                        </span>';
                $html .= $status->favorited ? '<i class="faved"></i>' : '';
 
        function getRetweeters($id, $count = 20){
                $t = getTwitter();
-               $retweeters = $t->getRetweeters($id);
+               $retweets = $t->retweets($id, $count);
                $html = '<span class="vcard">';
-               foreach($retweeters as $retweeter){
-                       $user = $retweeter->user;
+               foreach($retweets as $retweet){
+                       $user = $retweet->user;
                        $html .= '<a class="url" title="'.$user->name.'" rel="contact" href="../user.php?id='.$user->screen_name.'">
                                <img class="photo fn" width="24" height="24" src="'.getAvatar($user->profile_image_url).'" alt="'.$user->name.'" />
                                </a>';
@@ -93,7 +95,7 @@
                </span>
                <span class="status_body">
                <span class="status_id">'.$status->id_str.'</span>
-               <span class="status_word"><a class="user_name" href="user.php?id='.$user->screen_name.'">'.$user->screen_name.'</a> <span class="tweet">&nbsp;'.$text.'</span></span>';
+               <span class="status_word"><a class="user_name" href="user.php?id='.$user->screen_name.'" id="'.$user->screen_name.'">'.($_COOKIE['shownick']=='true' ? $user->name : $user->screen_name).'</a> <span class="tweet">&nbsp;'.$text.'</span></span>';
                $output .= "<span class=\"actions\">
                        <a class=\"replie_btn\" title=\"Reply\" href=\"#\">Reply</a>
                        <a class=\"rt_btn\" title=\"Retweet\" href=\"#\">Retweet</a>
        function format_message($message,$isSentPage=false) {
                if ($isSentPage) {
                        $name = $message->recipient_screen_name;
+                       $nick = $message->recipient->name;
                        $imgurl = getAvatar($message->recipient->profile_image_url);
                        $messenger = $message->recipient;
                } else {
                        $name = $message->sender_screen_name;
+                       $nick = $message->sender->name;
                        $imgurl = getAvatar($message->sender->profile_image_url);
                        $messenger = $message->sender;
                }
                                </span>
                                <span class=\"status_body\">
                                        <span class=\"status_id\">$message->id </span>
-                                       <span class=\"status_word\"><a class=\"user_name\" href=\"user.php?id=$name\">$name</a> $text </span>
+                                       <span class=\"status_word\"><a class=\"user_name\" href=\"user.php?id=$name\" id=\"$name\">".($_COOKIE["shownick"]=='true' ? $nick : $name)."</a> $text </span>
                                        <span class=\"actions\">
                ";
                
index 05fb287..e6875ca 100644 (file)
-<?php\r
-       set_time_limit(15);\r
-       if(!isset($_SESSION)){\r
-               session_start();\r
-       }\r
-       include_once('mobile_device_detect.php');\r
-       mobile_device_detect(true,true,true,true,true,true,'https://t.orzdream.com/',false);\r
-       include_once('config.php');\r
-       include_once('utility.php');\r
-       include_once('twitteroauth.php');\r
-       include_once('oauth_lib.php');\r
-\r
-       function refreshProfile(){\r
-               $t = getTwitter();\r
-               $user = $t->veverify();\r
-               $time = $_SERVER['REQUEST_TIME']+3600*24*365;\r
-               setcookie('friends_count', $user->friends_count, $time, '/');\r
-               setcookie('statuses_count', $user->statuses_count, $time, '/');\r
-               setcookie('followers_count', $user->followers_count, $time, '/');\r
-               setcookie('imgurl', getAvatar($user->profile_image_url), $time, '/');\r
-               setcookie('name', $user->screen_name, $time, '/');\r
-               setcookie('listed_count', GetListed($t), $time, '/');\r
-       }\r
-\r
-       function getDefCookie($name, $default="") {\r
-               if (getCookie($name)) return getCookie($name);\r
-               else return $default;\r
-       }\r
-       function format_time($time){\r
-               date_default_timezone_set('UTC');\r
-               return strtotime($time);\r
-       }\r
-       function formatText($text) {\r
-               //如果开启了魔术引号\" \' 转回来\r
-               if (get_magic_quotes_gpc()) {\r
-                       $text = stripslashes($text);\r
-               }\r
-\r
-               //添加url链接\r
-               $urlReg = '/(((http|https|ftp):\/\/){1}([[:alnum:]\-\.])+(\.)(([[:alnum:]]){2,4})?([[:alnum:]\/+=%#&@\:\;_\.~\?\!\-\,]*))/i';\r
-               $text = preg_replace($urlReg, '<a href="\1" target="_blank" rel="noreferrer">\1</a>', $text);\r
-\r
-               //添加@链接\r
-               $atReg = '/\B@{1}(([a-zA-Z0-9\_\.\-])+)/i';\r
-               $text = preg_replace($atReg,    '<a href="user.php?id=\1" target="_blank">\0</a>', $text);\r
-\r
-               //添加 list 链接\r
-               $listReg = '/(\<a[\w+=\:\%\#\&\.~\?\"\'\/\- ]+\>@{1}([a-zA-Z0-9_\.\-]+)<\/a\>([\/a-zA-Z0-9_\.\-]+))/i';\r
-               $text = preg_replace($listReg,  '<a href="list.php?id=\2\3" target="_blank">@\2\3</a>', $text);\r
-\r
-               //添加标签链接\r
-               $tagReg = "/\B(\#{1}([\w]*[\pN\pC\pL]+[\w]*))([\s]*)/u";\r
-               $text = preg_replace($tagReg, '<a target="_blank" href="search.php?q=%23\2">#<span class="hashtag">\2</span></a>\3', $text);\r
-\r
-               $text = formatTweetID($text);\r
-\r
-               return $text;\r
-       }\r
-\r
-       function formatEntities(&$entities,$html){\r
-               $user_mentions = $entities->user_mentions;\r
-               $hashtags = $entities->hashtags;\r
-               $urls = $entities->urls;\r
-               if(count($user_mentions) > 0) {\r
-                       foreach($user_mentions as $user_mention) {\r
-                               $name = $user_mention->screen_name;\r
-                               $html = str_replace("@$name","<a href=\"user.php?id=$name\" target=\"_blank\">@$name</a>",$html);\r
-                       }\r
-               }\r
-               if(count($hashtags) > 0) {\r
-                       foreach($hashtags as $hashtag) {\r
-                               $text = $hashtag->text;\r
-                               $html = str_replace("#$text","<a target=\"_blank\" href=\"search.php?q=%23$text\">#<span class=\"hashtag\">$text</span></a>",$html);\r
-                       }       \r
-               }\r
-               if(count($urls) > 0) {\r
-                       $scheme = (!isset($_SERVER['HTTPS']) || $_SERVER['HTTPS'] != "on") ? 'http' : 'https';\r
-                       foreach($urls as $url) {\r
-                               $exp = is_null($url->expanded_url) ? $url->url : $url->expanded_url;\r
-                               if(substr($url->url,0,4) != 'http') $url->url = 'http://'.$url->url;\r
-                               if(isset($url->display_url)) {\r
-                                       $dis = $url->display_url;\r
-                               } else {\r
-                                       $tmp = explode('://', $url->url);\r
-                                       $dis = $tmp[1];\r
-                               }\r
-                               $html = str_replace($url->url,"<a href=\"$exp\" target=\"_blank\" rel=\"noreferrer\" class=\"tweet_url\">$dis</a>",$html);\r
-                       }       \r
-               }\r
-               if(isset($entities->media)) {\r
-                       $medias = $entities->media;\r
-                       foreach($medias as $media) {\r
-                               $url = $media->media_url_https;\r
-                               if (getcookie('p_avatar') == 'true') {\r
-                                               $url = 'img.php?imgurl='.$url;\r
-                               }\r
-                               $html = str_replace($media->url,"<a href=\"$url\" target=\"_blank\" rel=\"noreferrer\">$media->display_url</a>",$html);\r
-                       }\r
-               }\r
-               return $html;\r
-       }\r
-\r
-       function formatTweetID($text){\r
-               $reg = '/(\<a[\w+=@\:\%\#\&\.~\?\"\'\/\-\! ]+\>[\S]+<\/a\>)/i';\r
-               preg_match_all($reg, $text, $tmpMatches);\r
-               if(count($tmpMatches) > 0){\r
-                       $text = preg_replace($reg, '$_holder_$', $text);\r
-               }\r
-               preg_match_all('/([\d]{10,})/', $text, $matches);\r
-               if(count($matches) > 0){\r
-                       $matches = array_unique($matches[0]);\r
-                       foreach($matches as $match){\r
-                               $text = str_replace($match, '<a title="We think it\'s a tweet ID, isn\'t it?" href="status.php?id='.$match.'" target="_blank">'.$match.'</a>', $text);\r
-                       }\r
-                       $tmpReg = '/\$_holder_\$/i';\r
-                       foreach($tmpMatches[0] as $match){\r
-                               $text = preg_replace($tmpReg, $match, $text, 1);\r
-                       }\r
-               }\r
-               return $text;\r
-       }\r
-\r
-       function processCurl($url,$postdata=false,$header=false)\r
-       {\r
-               $ch = curl_init($url);\r
-\r
-               curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);\r
-               curl_setopt($ch, CURLOPT_VERBOSE, 1);\r
-               curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);\r
-               curl_setopt($ch, CURLOPT_TIMEOUT,120);\r
-               \r
-               if($postdata !== false) {\r
-                       curl_setopt ($ch, CURLOPT_POST, true);\r
-                       curl_setopt ($ch, CURLOPT_POSTFIELDS, $postdata);\r
-               }\r
-               \r
-               if($header !== false) {\r
-                       curl_setopt($ch, CURLOPT_HTTPHEADER, $header);\r
-               }\r
-               \r
-               $response = curl_exec($ch);\r
-               $responseInfo=curl_getinfo($ch);\r
-               curl_close($ch);\r
-               if( intval( $responseInfo['http_code'] ) == 200 )\r
-                       return $response;               \r
-               else\r
-                       return false;\r
-       }\r
-\r
-       function objectifyXml( $data ){\r
-\r
-               if( function_exists('simplexml_load_string') ) {\r
-                       $obj = simplexml_load_string( $data );\r
-               }\r
-               if (isset($obj->error) || !$obj) return false;\r
-               else return $obj;\r
-\r
-               return false;\r
-       }\r
-\r
-       function objectifyJson($data){\r
-               if(function_exists("json_decode")){\r
-                       $obj = json_decode($data);\r
-               }\r
-               if(!isset($obj->error) || $obj){\r
-                       return $obj;\r
-               }\r
-               return false;\r
-       }\r
-\r
-\r
-       function imageUpload($image){\r
-               $t = getTwitter();\r
-               $signingurl = 'https://api.twitter.com/1/account/verify_credentials.json';\r
-               $request = OAuthRequest::from_consumer_and_token($t->consumer, $t->token, 'GET', $signingurl, array());\r
-               $request->sign_request($t->sha1_method, $t->consumer, $t->token);\r
-               $r_header = $request->to_header("http://api.twitter.com/");\r
-               \r
-               $url = 'http://img.ly/api/2/upload.json';\r
-               $postdata = array('media' => $image);           \r
-               $ch = curl_init($url);          \r
-               if($postdata !== false)\r
-               {\r
-                       curl_setopt ($ch, CURLOPT_POST, true);\r
-                       curl_setopt ($ch, CURLOPT_POSTFIELDS, $postdata);\r
-               }\r
-               curl_setopt($ch, CURLOPT_HTTPHEADER, array('X-Auth-Service-Provider: '.$signingurl,'X-Verify-Credentials-'.$r_header)); \r
-               curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);\r
-               curl_setopt($ch, CURLOPT_USERAGENT, 'embr');\r
-               curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);\r
-               curl_setopt($ch, CURLOPT_TIMEOUT,120);\r
-               curl_setopt($ch, CURLOPT_CONNECTTIMEOUT,5);\r
-\r
-               $response = curl_exec($ch);\r
-               $response_info=curl_getinfo($ch);\r
-               curl_close($ch);\r
-               \r
-               if ($response_info['http_code'] == 200) {\r
-                       return objectifyJson($response);\r
-               } else {\r
-                       return null;\r
-               }\r
-       }\r
-       \r
-       function getTwitter() {\r
-               if(loginStatus()){\r
-                       $access_token = $_SESSION['access_token'] ? $_SESSION['access_token'] : null;\r
-                       $oauth_token = $access_token ? $access_token['oauth_token'] : $_COOKIE['oauth_token'];\r
-                       $oauth_token_secret = $access_token ? $access_token['oauth_token_secret'] : $_COOKIE['oauth_token_secret'];\r
-                       $oauth = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET, $access_token['oauth_token'], $access_token['oauth_token_secret']);\r
-                       return $oauth;\r
-               }\r
-               return null;\r
-       }\r
-\r
-   function loginStatus() {\r
-          if(isset($_SESSION['login_status'])){\r
-             return $_SESSION['login_status'] == 'verified' ? true : false;\r
-          }elseif(getEncryptCookie("oauth_token") != "" && getEncryptCookie("oauth_token_secret") != "" && getEncryptCookie("user_id") != "" && getEncryptCookie("twitese_name") != ""){\r
-             $access_token = array("oauth_token" => getEncryptCookie("oauth_token"), "oauth_token_secret" => getEncryptCookie("oauth_token_secret"), "user_id" => getEncryptCookie("user_id"), "screen_name" => getEncryptCookie("twitese_name"));\r
-             $_SESSION['access_token'] = $access_token;\r
-             $_SESSION['login_status'] = 'verified';\r
-             refreshProfile();\r
-             return true;\r
-          }\r
-          return false;\r
-   }\r
-\r
-       function GetListed($t, $cursor = false){\r
-               $lists = $t->beAddedLists($t->username, $cursor);\r
-               $listed = count($lists->lists);\r
-               if($lists->next_cursor > 1){\r
-                       $listed += GetListed($t, $lists->next_cursor);\r
-               }\r
-               return  $listed;\r
-       }\r
-\r
-       function getAvatar($profileImg){\r
-               if (getcookie('p_avatar') == 'true') {\r
-                               return 'img.php?imgurl='.$profileImg;\r
-               }\r
-               return preg_replace('/https?:\/\/\w+([0-9])\.twimg\.com/i','https://s3.amazonaws.com/twitter_production',$profileImg);\r
-       }\r
-\r
-       // $target: can't be current user\r
-       // $source: use the current user as the source user implicitly if not specified\r
-       // 9 => no relationship\r
-       // 1 => fo each other\r
-       // 2 => $source fo $target\r
-       // 3 => $target fo $source\r
-       // 4 => $source blocking $target\r
-       function getRelationship($target, $source = false){\r
-               $relationship = getTwitter()->relationship($target, $source)->relationship;\r
-               $target = $relationship->target;\r
-               $source = $relationship->source;\r
-               if($source->blocking == 1){\r
-                       return 4;\r
-               }\r
-               if($source->following == 1 && $target->following == 1){\r
-                       return 1;\r
-               }\r
-               if($source->following == 1 && $target->following != 1){\r
-                       return 2;\r
-               }\r
-               if($source->following != 1 && $target->following == 1){\r
-                       return 3;\r
-               }\r
-               return 9;\r
-       }\r
-       \r
-       function urlshorten($url, $type='goo.gl'){\r
-               switch($type){\r
-                       case 'goo.gl':\r
-                       $data = json_encode(array('longUrl' => $url));\r
-                       $api = 'https://www.googleapis.com/urlshortener/v1/url?key=AIzaSyDsX2BAo9Jc2yG3Pq1VbLQALqdrtDFvXkg';\r
-                       $header = array('Content-type: application/json');\r
-                       $result = objectifyJson(processCurl($api,$data,$header))->id;\r
-                       break;\r
-                       case 'zi.mu':\r
-                       $api = 'http://zi.mu/api.php?format=simple&action=shorturl&url=';\r
-                       $result = objectifyJson(processCurl($api.rawurlencode($url)));\r
-                       break;\r
-                       default:\r
-                       break;\r
-               }\r
-               return $result;\r
-       }\r
-?>\r
+<?php
+       set_time_limit(15);
+       if(!isset($_SESSION)){
+               session_start();
+       }
+       include_once('mobile_device_detect.php');
+       mobile_device_detect(true,true,true,true,true,true,'https://t.orzdream.com/',false);
+       include_once('config.php');
+       include_once('utility.php');
+       include_once('twitteroauth.php');
+       include_once('oauth_lib.php');
+
+       function refreshProfile(){
+               $t = getTwitter();
+               $user = $t->veverify();
+               $time = $_SERVER['REQUEST_TIME']+3600*24*365;
+               setcookie('friends_count', $user->friends_count, $time, '/');
+               setcookie('statuses_count', $user->statuses_count, $time, '/');
+               setcookie('followers_count', $user->followers_count, $time, '/');
+               setcookie('imgurl', getAvatar($user->profile_image_url), $time, '/');
+               setcookie('name', $user->screen_name, $time, '/');
+               setcookie('listed_count', $user->listed_count, $time, '/');
+       }
+
+       function getDefCookie($name, $default="") {
+               if (getCookie($name)) return getCookie($name);
+               else return $default;
+       }
+       function format_time($time){
+               date_default_timezone_set('UTC');
+               return strtotime($time);
+       }
+       function formatText($text) {
+               //如果开启了魔术引号\" \' 转回来
+               if (get_magic_quotes_gpc()) {
+                       $text = stripslashes($text);
+               }
+
+               //添加url链接
+               $urlReg = '/(((http|https|ftp):\/\/){1}([[:alnum:]\-\.])+(\.)(([[:alnum:]]){2,4})?([[:alnum:]\/+=%#&@\:\;_\.~\?\!\-\,]*))/i';
+               $text = preg_replace($urlReg, '<a href="\1" target="_blank" rel="noreferrer">\1</a>', $text);
+
+               //添加@链接
+               $atReg = '/\B@{1}(([a-zA-Z0-9\_\.\-])+)/i';
+               $text = preg_replace($atReg,    '<a href="user.php?id=\1" target="_blank">\0</a>', $text);
+
+               //添加 list 链接
+               $listReg = '/(\<a[\w+=\:\%\#\&\.~\?\"\'\/\- ]+\>@{1}([a-zA-Z0-9_\.\-]+)<\/a\>([\/a-zA-Z0-9_\.\-]+))/i';
+               $text = preg_replace($listReg,  '<a href="list.php?id=\2\3" target="_blank">@\2\3</a>', $text);
+
+               //添加标签链接
+               $tagReg = "/\B(\#{1}([\w]*[\pN\pC\pL]+[\w]*))([\s]*)/u";
+               $text = preg_replace($tagReg, '<a target="_blank" href="search.php?q=%23\2">#<span class="hashtag">\2</span></a>\3', $text);
+
+               $text = formatTweetID($text);
+
+               return $text;
+       }
+
+       function formatEntities(&$entities,$html){
+               $user_mentions = $entities->user_mentions;
+               $hashtags = $entities->hashtags;
+               $urls = $entities->urls;
+               if(count($user_mentions) > 0) {
+                       foreach($user_mentions as $user_mention) {
+                               $name = $user_mention->screen_name;
+                               $html = str_replace("@$name","<a href=\"user.php?id=$name\" target=\"_blank\">@$name</a>",$html);
+                       }
+               }
+               if(count($hashtags) > 0) {
+                       foreach($hashtags as $hashtag) {
+                               $text = $hashtag->text;
+                               $html = str_replace("#$text","<a target=\"_blank\" href=\"search.php?q=%23$text\">#<span class=\"hashtag\">$text</span></a>",$html);
+                       }       
+               }
+               if(count($urls) > 0) {
+                       $scheme = (!isset($_SERVER['HTTPS']) || $_SERVER['HTTPS'] != "on") ? 'http' : 'https';
+                       foreach($urls as $url) {
+                               $exp = is_null($url->expanded_url) ? $url->url : $url->expanded_url;
+                               if(substr($url->url,0,4) != 'http') $url->url = 'http://'.$url->url;
+                               if(isset($url->display_url)) {
+                                       $dis = $url->display_url;
+                               } else {
+                                       $tmp = explode('://', $url->url);
+                                       $dis = $tmp[1];
+                               }
+                               $html = str_replace($url->url,"<a href=\"$exp\" target=\"_blank\" rel=\"noreferrer\" class=\"tweet_url\">$dis</a>",$html);
+                       }       
+               }
+               if(isset($entities->media)) {
+                       $medias = $entities->media;
+                       foreach($medias as $media) {
+                               $url = $media->media_url_https;
+                               if (getcookie('p_avatar') == 'true') {
+                                               $url = 'img.php?imgurl='.$url;
+                               }
+                               $html = str_replace($media->url,"<a href=\"$url\" target=\"_blank\" rel=\"noreferrer\">$media->display_url</a>",$html);
+                       }
+               }
+               return $html;
+       }
+
+       function formatTweetID($text){
+               $reg = '/(\<a[\w+=@\:\%\#\&\.~\?\"\'\/\-\! ]+\>[\S]+<\/a\>)/i';
+               preg_match_all($reg, $text, $tmpMatches);
+               if(count($tmpMatches) > 0){
+                       $text = preg_replace($reg, '$_holder_$', $text);
+               }
+               preg_match_all('/([\d]{10,})/', $text, $matches);
+               if(count($matches) > 0){
+                       $matches = array_unique($matches[0]);
+                       foreach($matches as $match){
+                               $text = str_replace($match, '<a title="We think it\'s a tweet ID, isn\'t it?" href="status.php?id='.$match.'" target="_blank">'.$match.'</a>', $text);
+                       }
+                       $tmpReg = '/\$_holder_\$/i';
+                       foreach($tmpMatches[0] as $match){
+                               $text = preg_replace($tmpReg, $match, $text, 1);
+                       }
+               }
+               return $text;
+       }
+
+       function processCurl($url,$postdata=false,$header=false)
+       {
+               $ch = curl_init($url);
+
+               curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
+               curl_setopt($ch, CURLOPT_VERBOSE, 1);
+               curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
+               curl_setopt($ch, CURLOPT_TIMEOUT,120);
+               
+               if($postdata !== false) {
+                       curl_setopt ($ch, CURLOPT_POST, true);
+                       curl_setopt ($ch, CURLOPT_POSTFIELDS, $postdata);
+               }
+               
+               if($header !== false) {
+                       curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
+               }
+               
+               $response = curl_exec($ch);
+               $responseInfo=curl_getinfo($ch);
+               curl_close($ch);
+               if( intval( $responseInfo['http_code'] ) == 200 )
+                       return $response;               
+               else
+                       return false;
+       }
+
+       function objectifyXml( $data ){
+
+               if( function_exists('simplexml_load_string') ) {
+                       $obj = simplexml_load_string( $data );
+               }
+               if (isset($obj->error) || !$obj) return false;
+               else return $obj;
+
+               return false;
+       }
+
+       function objectifyJson($data){
+               if(function_exists("json_decode")){
+                       $obj = json_decode($data);
+               }
+               if(!isset($obj->error) || $obj){
+                       return $obj;
+               }
+               return false;
+       }
+
+
+       function imageUpload($image){
+               $t = getTwitter();
+               $signingurl = API_URL.'/account/verify_credentials.json';
+               $request = OAuthRequest::from_consumer_and_token($t->consumer, $t->token, 'GET', $signingurl, array());
+               $request->sign_request($t->sha1_method, $t->consumer, $t->token);
+               $r_header = $request->to_header("https://api.twitter.com/");
+               
+               $url = 'http://img.ly/api/2/upload.json';
+               $postdata = array('media' => $image);           
+               $ch = curl_init($url);          
+               if($postdata !== false)
+               {
+                       curl_setopt ($ch, CURLOPT_POST, true);
+                       curl_setopt ($ch, CURLOPT_POSTFIELDS, $postdata);
+               }
+               curl_setopt($ch, CURLOPT_HTTPHEADER, array('X-Auth-Service-Provider: '.$signingurl,'X-Verify-Credentials-'.$r_header)); 
+               curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
+               curl_setopt($ch, CURLOPT_USERAGENT, 'embr');
+               curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
+               curl_setopt($ch, CURLOPT_TIMEOUT,120);
+               curl_setopt($ch, CURLOPT_CONNECTTIMEOUT,5);
+
+               $response = curl_exec($ch);
+               $response_info=curl_getinfo($ch);
+               curl_close($ch);
+               
+               if ($response_info['http_code'] == 200) {
+                       return objectifyJson($response);
+               } else {
+                       return $response_info['http_code'];
+               }
+       }
+       
+       function getTwitter() {
+               if(loginStatus()){
+                       $access_token = $_SESSION['access_token'] ? $_SESSION['access_token'] : null;
+                       $oauth_token = $access_token ? $access_token['oauth_token'] : $_COOKIE['oauth_token'];
+                       $oauth_token_secret = $access_token ? $access_token['oauth_token_secret'] : $_COOKIE['oauth_token_secret'];
+                       $oauth = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET, $access_token['oauth_token'], $access_token['oauth_token_secret']);
+                       return $oauth;
+               }
+               return null;
+       }
+
+   function loginStatus() {
+          if(isset($_SESSION['login_status'])){
+             return $_SESSION['login_status'] == 'verified' ? true : false;
+          }elseif(getEncryptCookie("oauth_token") != "" && getEncryptCookie("oauth_token_secret") != "" && getEncryptCookie("user_id") != "" && getEncryptCookie("twitese_name") != ""){
+             $access_token = array("oauth_token" => getEncryptCookie("oauth_token"), "oauth_token_secret" => getEncryptCookie("oauth_token_secret"), "user_id" => getEncryptCookie("user_id"), "screen_name" => getEncryptCookie("twitese_name"));
+             $_SESSION['access_token'] = $access_token;
+             $_SESSION['login_status'] = 'verified';
+             refreshProfile();
+             return true;
+          }
+          return false;
+   }
+
+       function getAvatar($profileImg){
+               if (getcookie('p_avatar') == 'true') {
+                               return 'img.php?imgurl='.$profileImg;
+               }
+               return preg_replace('/https?:\/\/\w+([0-9])\.twimg\.com/i','https://s3.amazonaws.com/twitter_production',$profileImg);
+       }
+
+       // $target: can't be current user
+       // $source: use the current user as the source user implicitly if not specified
+       // 9 => no relationship
+       // 1 => fo each other
+       // 2 => $source fo $target
+       // 3 => $target fo $source
+       // 4 => $source blocking $target
+       function getRelationship($target, $source = false){
+               $relationship = getTwitter()->relationship($target, $source)->relationship;
+               $target = $relationship->target;
+               $source = $relationship->source;
+               if($source->blocking != null){
+                       return 4;
+               }
+               if($source->following == true && $target->following == true){
+                       return 1;
+               }
+               if($source->following == true && $target->following == false){
+                       return 2;
+               }
+               if($source->following == false && $target->following == true){
+                       return 3;
+               }
+               return 9;
+       }
+       
+       function urlshorten($url, $type='goo.gl'){
+               switch($type){
+                       case 'goo.gl':
+                       $data = json_encode(array('longUrl' => $url));
+                       $api = 'https://www.googleapis.com/urlshortener/v1/url?key=AIzaSyDsX2BAo9Jc2yG3Pq1VbLQALqdrtDFvXkg';
+                       $header = array('Content-type: application/json');
+                       $result = objectifyJson(processCurl($api,$data,$header))->id;
+                       break;
+                       case 'zi.mu':
+                       $api = 'http://zi.mu/api.php?format=simple&action=shorturl&url=';
+                       $result = objectifyJson(processCurl($api.rawurlencode($url)));
+                       break;
+                       default:
+                       break;
+               }
+               return $result;
+       }
+
+       function expandRedirect($shorturl, &$hops) {
+               if (count($hops) >= 10) {
+                       return false;
+               }
+               $head = array_change_key_case(get_headers($shorturl, TRUE), CASE_LOWER);
+               if (!isset($head['location']) || empty($head['location'])) {
+                       return $shorturl;
+               }
+               $prevhop = $shorturl;
+               foreach((array)$head['location'] as $redir) {
+                       if (substr($redir, 0, 1)=='/' || preg_match('/[\.\/]'.preg_quote(parse_url($prevhop, PHP_URL_HOST)).'$/', parse_url($redir, PHP_URL_HOST))) {
+                               return $prevhop;
+                       }
+                       $hops[] = $prevhop;
+                       $prevhop = $redir;
+               }
+               return expandRedirect($redir, $hops);
+       }
+?>
diff --git a/lib/twitter.php b/lib/twitter.php
deleted file mode 100644 (file)
index a61a02f..0000000
+++ /dev/null
@@ -1,1169 +0,0 @@
-<?php
-if (get_magic_quotes_gpc()) {
-
-       $_REQUEST = array_map('stripslashes', $_REQUEST);
-       $_GET     = array_map('stripslashes', $_GET);
-       $_POST    = array_map('stripslashes', $_POST);
-       $_COOKIE  = array_map('stripslashes', $_COOKIE);
-
-}
-class twitter{
-       var $username='';
-       var $password='';
-       var $user_agent='API';
-       var $type='json';
-
-       var $headers=array('Expect:', 'X-Twitter-Client: ','X-Twitter-Client-Version: ','X-Twitter-Client-URL: ');
-       var $responseInfo=array();
-       var $suppress_response_code = false;
-       var $debug = false;
-       public $timeout = 5;
-       public $connecttimeout = 5;
-
-       function twitter($username = '', $password = '', $type = 'json')
-       {
-               if ($username != '' && $password != '') {
-                       $this->username = $username;
-                       $this->password = $password;
-                       $this->type = $type;
-               }
-       }
-
-       function veverify()
-       {
-               $request = API_URL . '/account/verify_credentials.' . $this->type;
-               return $this->objectify( $this->process($request, false, 0) );
-       }
-
-       /**** Get user theme ****/
-       function getTheme()
-       {
-               $twit = $this->veverify();
-               $theme = array( 'background-color' => $twit->profile_background_color, 'background-image-url' => $twit->profile_background_image_url, 'background-tile' => $twit->profile_background_tile == true ? 'repeat' : 'no-repeat', 'link-color' => $twit->profile_link_color, 'sidebar-border-color' => $twit->profile_sidebar_border_color, 'sidebar-fill-color' => $twit->profile_sidebar_fill_color, 'text-color' => $twit->profile_text_color);
-               return $theme;
-       }
-
-
-       /**** Status Methods ****/
-
-       function showStatus( $id )
-       {
-               if( !in_array( $this->type, array( 'xml','json' ) ) )
-                       return false;
-
-               $request = API_URL . '/statuses/show/'.$id . '.' . $this->type;
-               return $this->objectify( $this->process($request) );
-       }
-
-       function update( $status, $replying_to = false )
-       {
-               if( !in_array( $this->type, array( 'xml','json' ) ) )
-                       return false;
-
-               $args = array();
-               if( $status )
-                       $args['status'] = $status;
-               if( $replying_to )
-                       $args['in_reply_to_status_id'] = $replying_to;
-               $args['source'] = 'API';
-
-               $qs = '';
-               if( !empty( $args ) )
-                       $qs = $this->_glue( $args );
-
-               $request = API_URL . '/statuses/update.' . $this->type . $qs;
-
-               return $this->objectify( $this->process($request, true) );
-       }
-
-       function deleteStatus( $id ) {
-               if( !in_array( $this->type, array( 'xml','json' ) ) )
-                       return false;
-
-               $request = API_URL . '/statuses/destroy/' . $id . '.' . $this->type;
-               return $this->objectify( $this->process( $request, true ) );
-       }
-
-
-       /**** Timeline Methods ****/
-
-       function publicTimeline( $sinceid = false )
-       {
-               if( !in_array( $this->type, array( 'xml','json','rss','atom' ) ) )
-                       return false;
-
-               $qs='';
-               if( $sinceid !== false )
-                       $qs = '?since_id=' . intval($sinceid);
-               $request = API_URL . '/statuses/public_timeline.' . $this->type . $qs;
-
-               return $this->objectify( $this->process($request) );
-       }
-
-       function userTimeline($page=false,$id=false,$count=false,$since_id=false)
-       {
-               if( !in_array( $this->type, array( 'xml','json','rss','atom' ) ) )
-                       return false;
-
-               $args = array();
-               if( $id )
-                       $args['id'] = $id;
-               if( $count )
-                       $args['count'] = (int) $count;
-               if( $since_id )
-                       $args['since_id'] = (int) $since_id;
-               if( $page )
-                       $args['page'] = (int) $page;
-
-               $qs = '';
-               if( !empty( $args ) )
-                       $qs = $this->_glue( $args );
-
-               if( $id === false )
-                       $request = API_URL . '/statuses/user_timeline.' . $this->type . $qs;
-               else
-                       $request = API_URL . '/statuses/user_timeline/' . rawurlencode($id) . '.' . $this->type . $qs;
-               $response = $this->process($request);
-               if($response == false){
-                       return 'protected';
-               }
-               return $this->objectify($response);
-
-       }
-
-       function friendsTimeline( $page = false, $since_id = false,  $count = false )
-       {
-               if( !in_array( $this->type, array( 'xml','json','rss','atom' ) ) )
-                       return false;
-
-               $args = array();
-               if( $count )
-                       $args['count'] = $count;
-               if( $since_id )
-                       $args['since_id'] = $since_id;
-               if( $page )
-                       $args['page'] = (int) $page;
-
-               $qs = '';
-               if( !empty( $args ) )
-                       $qs = $this->_glue( $args );
-
-               $request = API_URL . '/statuses/friends_timeline.' . $this->type . $qs;
-               return $this->objectify( $this->process($request) );
-
-       }
-
-       function replies( $page = false, $since_id = false )
-       {
-               if( !in_array( $this->type, array( 'xml','json','rss','atom' ) ) )
-                       return false;
-
-               $args = array();
-               if( $page )
-                       $args['page'] = (int) $page;
-               if( $since_id )
-                       $args['since_id'] = $since_id;
-
-               $qs = '';
-               if( !empty( $args ) )
-                       $qs = $this->_glue( $args );
-
-               $request = API_URL . '/statuses/mentions.' . $this->type . $qs;    
-
-               return $this->objectify( $this->process($request) );
-
-       }
-
-
-       /**** Direct Message Methods ****/
-
-       function directMessages( $page = false, $since_id = false, $count = null )
-       {
-               if( !in_array( $this->type, array( 'xml','json','rss','atom' ) ) )
-                       return false;
-
-               $qs='?';
-               $qsparams = array();
-               if( $since_id )
-                       $qsparams['since_id'] = $since_id;
-               if( $page )
-                       $qsparams['page'] = (int) $page;
-
-               $request = API_URL . '/direct_messages.' . $this->type . '?' . $this->arrToStr($qsparams);
-
-               return $this->objectify( $this->process($request) );
-       }
-
-       function sentDirectMessage( $page = false, $since = false, $since_id = false )
-       {
-               if( !in_array( $this->type, array( 'xml','json' ) ) )
-                       return false;
-
-               $qs = '?';
-               $qsparams = array();
-               if( $since !== false )
-                       $qsparams['since'] = rawurlencode($since);
-               if( $since_id )
-                       $qsparams['since_id'] = (int) $since_id;
-               if( $page )
-                       $qsparams['page'] = (int) $page;
-
-               $request = API_URL . '/direct_messages/sent.' . $this->type  . '?' . $this->arrToStr($qsparams);
-               return $this->objectify( $this->process($request) );
-       }
-
-       function sendDirectMessage( $user, $text )
-       {
-               if( !in_array( $this->type, array( 'xml','json' ) ) )
-                       return false;
-
-               $request = API_URL . '/direct_messages/new.' . $this->type;
-               $postargs = 'user=' . rawurlencode($user) . '&text=' . rawurlencode($text);
-
-               return $this->objectify( $this->process($request, $postargs) );
-       }
-
-       function deleteDirectMessage( $id )
-       {
-               if( !in_array( $this->type, array( 'xml','json' ) ) )
-                       return false;
-
-               $request = API_URL . '/direct_messages/destroy/' . $id . '.' . $this->type;
-               return $this->objectify( $this->process( $request, true ) );
-       }
-
-
-       /**** User Methods ****/
-
-       function showUser( $id = false , $email = false, $user_id = false, $screen_name=false )
-       {
-               if( !in_array( $this->type, array( 'xml','json' ) ) )
-                       return false;
-
-               if (!$id) 
-                       $id = $this->username;
-               if( $user_id ) :
-                       $qs = '?user_id=' . $user_id;
-               elseif ( $screen_name ) :
-                       $qs = '?screen_name=' . (string) $screen_name;
-               elseif ( $email ) :
-                       $qs = '?email=' . (string) $email;
-               else :
-                       $qs = $id;
-
-endif;
-
-$request = API_URL . '/users/show/' . $qs . '.' . $this->type;
-
-return $this->objectify( $this->process($request) );
-       }
-
-       function friends( $id = false, $page = false , $count = 30 )
-       {
-               if( !in_array( $this->type, array( 'xml','json' ) ) )
-                       return false;
-
-               $args = array();
-               if( $id )
-                       $args['id'] = $id;
-               if( $count )
-                       $args['count'] = (int) $count;
-               $args['cursor'] = $page ? $page : -1; // ¸ü»»ÁËÅжϱí´ïʽ
-               $qs = '';
-               if( !empty( $args ) )
-                       $qs = $this->_glue( $args );
-
-               $request = API_URL . ($id ?  "/statuses/friends/$id.$this->type" : "/statuses/friends.$this->type");
-               $request .= $qs;
-               return $this->objectify( $this->process($request) );
-       }
-
-       function relationship($target, $source = false){
-               if($target == $this->username){
-                       return -1;
-               }
-               $args = array();
-               $args['target_screen_name'] = $target;
-               if($source){
-                       $args['source_screen_name'] = $source;
-               }
-               $request = API_TWITTER."/1/friendships/show.$this->type".$this->_glue($args);
-               return $this->objectify($this->process($request));
-       }
-
-       function followers( $id = false, $page = false , $count = 30 )
-       {
-               if( !in_array( $this->type, array( 'xml','json' ) ) )
-                       return false;
-
-               $args = array();
-               if( $id )
-                       $args['id'] = $id;
-               if( $count )
-                       $args['count'] = (int) $count;
-               $args['cursor'] = $page ? $page : -1; // ¸ü»»ÁËÅжϱí´ïʽ
-               $qs = '';
-               if( !empty( $args ) )
-                       $qs = $this->_glue( $args );
-
-               $request = API_URL . ($id ?  "/statuses/followers/$id.$this->type" : "/statuses/followers.$this->type");
-               $request .= $qs;
-
-               return $this->objectify( $this->process($request) );
-       }
-
-       /****** Favorites ******/
-
-       function getFavorites( $page=false )
-       {
-               if( !in_array( $this->type, array( 'xml','json','rss','atom' ) ) )
-                       return false;
-
-               if( $page != false )
-                       $qs = '?page=' . $page;
-
-               $request = API_URL . '/favorites.' . $this->type . $qs; 
-               return $this->objectify( $this->process($request) );
-       }
-
-       function makeFavorite( $id )
-       {
-               if( !in_array( $this->type, array( 'xml','json' ) ) )
-                       return false;
-
-               $request = API_URL . '/favorites/create/' . $id . '.' . $this->type;
-               return $this->objectify( $this->process($request, $args) );
-       }
-
-       function removeFavorite( $id )
-       {
-               if( !in_array( $this->type, array( 'xml','json' ) ) )
-                       return false;
-
-               $request = API_URL . '/favorites/destroy/' . $id . '.' . $this->type;
-               return $this->objectify( $this->process($request, true) );      
-       }
-
-
-       /**** Friendship Methods ****/
-
-       function isFriend( $user_a, $user_b )
-       {
-               if( !in_array( $this->type, array( 'xml','json' ) ) )
-                       return false;
-
-               $args = array();
-               $args['user_a'] = $user_a;
-               $args['user_b'] = $user_b;
-               $qs = $this->_glue( $args );
-
-               $request = API_URL . '/friendships/exists.' . $this->type . $qs;
-               return $this->objectify( $this->process($request) );
-       }
-
-       function followUser( $id, $notifications = false )
-       {
-               if( !in_array( $this->type, array( 'xml','json' ) ) )
-                       return false;
-
-               $request = API_URL . '/friendships/create/' . $id . '.' . $this->type;
-               if( $notifications )
-                       $request .= '?follow=true';
-
-               return $this->objectify( $this->process($request, true) );
-       }
-
-       function destroyUser( $id )
-       {
-               if( !in_array( $this->type, array( 'xml','json' ) ) )
-                       return false;
-
-               $request = API_URL . '/friendships/destroy/' . $id . '.' . $this->type;
-               return $this->objectify( $this->process($request, true) );
-       }
-
-       /****** Block Methods ******/
-       function blockingList($page = false){
-               $url = API_URL."/blocks/blocking.$this->type";
-               if($page){
-                       $url .= "?page=$page";
-               }
-               return $this->objectify($this->process($url));
-       }
-
-       function blockingIDs(){
-               $url = API_URL."blocks/blocking/ids.$this->type";
-               return $this->objectify($this->process($url));
-       }
-
-       function blockUser($id)
-       {
-               if( !in_array( $this->type, array( 'xml','json' ) ) )
-                       return false;
-               $request = API_URL . '/blocks/create/' . $id . '.' . $this->type;
-               $args = array();
-               $arps['post_method'] = 1;
-               $result = $this->curl_process($request, $args);
-               if($result->error == 'Not found'){
-                       return false;
-               }else{
-                       return $result;
-               }
-       }
-
-       function unblockUser($id)
-       {
-               if( !in_array( $this->type, array( 'xml','json' ) ) )
-                       return false;
-               $request = API_URL . '/blocks/destroy/' . $id . '.' . $this->type;
-               $args = array();
-               $arps['post_method'] = 1;
-               $result = $this->curl_process($request, $args);
-               if($result->error == 'Not found'){
-                       return false;
-               }else{
-                       return $result;
-               }
-       }
-
-       function isBlocked($id)
-       {               
-               $request = API_URL . '/blocks/exists/' . $id . '.' . $this->type;
-               $result = $this->curl_process($request);
-               if($result->error == 'Not found'){
-                       return "false";
-               }else{
-                       return $result;
-               }
-       }
-
-       /****** Trends ******/
-       function trends(){
-               $url = "http://search.twitter.com/trends.$this->type";
-               return $this->curl_process($url);
-       }
-
-       /* ---------- Spam ---------- */
-       function reportSpam($screen_name){
-               $url = API_TWITTER."/1/report_spam.$this->type";
-               $args = array();
-               $args['screen_name'] = $screen_name;
-               return $this->curl_process($url, $args);
-       }
-
-       /****** Social Graph ******/
-
-       function socialGraphFollowing( $id = false)
-       {
-               if( !in_array( $this->type, array( 'xml','json' ) ) )
-                       return false;
-
-               $request = API_URL . '/friends/ids';
-               if( $id )
-                       $request .= '/' . (int) $id . '.' . $this->type;
-
-               return $this->objectify( $this->process($request) );
-       }
-
-       function socialGraphFollowedBy( $id = false )
-       {
-               if( !in_array( $this->type, array( 'xml','json' ) ) )
-                       return false;
-
-               $request = API_URL . '/followers/ids';
-               if( $id )
-                       $request .= '/' . (int) $id . '.' . $this->type;
-
-               return $this->objectify( $this->process($request) );
-       }
-
-
-       /****** Account Methods ******/
-
-       function updateDevice( $device )
-       {
-               if( !in_array( $this->type, array( 'xml','json' ) ) )
-                       return false;
-
-               if( !in_array( $device, array('im','sms','none') ) )
-                       return false;
-
-               $qs = '?device=' . $device;
-               $request = API_URL . '/account/update_delivery_device.' . $this->type . $qs;
-               return $this->objectify( $this->process( $request ) );
-       }
-
-       function updateAvatar( $file )
-       {
-               if( !in_array( $this->type, array( 'xml','json' ) ) )
-                       return false;
-
-               // Adding @ ensures the POST will be raw multipart data encoded. This MUST be a file, not a URL. Handle it outside of the class.
-               $postdata = array( 'image' => "@$file");
-               $request = API_URL . '/account/update_profile_image.' . $this->type;
-               return $this->objectify( $this->process( $request, $postdata ) );
-       }
-
-       function updateBackground( $file )
-       {
-               if( !in_array( $this->type, array( 'xml','json' ) ) )
-                       return false;
-
-               // Adding @ ensures the POST will be raw multipart data encoded. This MUST be a file, not a URL. Handle it outside of the class.
-               $postdata = array( 'image' => "@$file");
-               $request = API_URL . '/account/update_profile_background_image.' . $this->type;
-               return $this->objectify( $this->process( $request, $postdata ) );
-       }
-
-       function updateProfile( $fields = array() )
-       {
-               if( !in_array( $this->type, array( 'xml','json' ) ) )
-                       return false;
-
-               $postdata = array();
-               foreach( $fields as $pk => $pv ) :
-                       switch( $pk ) 
-                       {
-                       case 'name' :
-                               $postdata[$pk] = (string) substr( $pv, 0, 20 );
-                               break;
-                       case 'email' :
-                               if( preg_match( '/\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b/i', $pv ) )
-                                       $postdata[$pk] = (string) $pv;
-                               break;
-                       case 'url' :
-                               $postdata[$pk] = (string) substr( $pv, 0, 100 );
-                               break;
-                       case 'location' :
-                               $postdata[$pk] = (string) substr( $pv, 0, 30 );
-                               break;
-                       case 'description' :
-                               $postdata[$pk] = (string) substr( $pv, 0, 160 );
-                               break;
-                       default :
-                               break;
-                       }
-endforeach;
-
-$request = API_URL . '/account/update_profile.' . $this->type;
-return $this->objectify( $this->process( $request, $postdata ) );
-       }
-
-       function updateColors( $colors = array() )
-       {
-               if( !in_array( $this->type, array( 'xml','json' ) ) )
-                       return false;
-
-               $postdata = array();
-               foreach( $colors as $ck => $cv ) :
-                       if( preg_match('/^(?:(?:[a-f\d]{3}){1,2})$/i', $hex) ) :
-                               $postdata[$ck] = (string) $cv;
-endif;
-endforeach;
-
-$request = API_URL . '/account/update_profile_colors.' . $this->type;
-return $this->objectify( $this->process( $request, $postdata ) );
-       }
-
-
-       /**** Search Method ****/
-
-       function search( $q = false, $page = false, $rpp = false)
-       {
-               if( !$q )
-                       return false;
-               $qs = '?q='.urlencode($q);
-               if( $page )
-                       $qs .= '&page='.$page;
-               if($rpp){
-                       $qs .= '&rpp='.$rpp;
-               }
-               $searchApiUrl = strpos(API_URL, "twitter.com") > 0 ? "http://search.twitter.com" : API_URL;
-               $request = $searchApiUrl . '/search.' . $this->type . $qs;
-
-               return $this->objectify( $this->process($request) );
-       }
-
-       /**** List Method ****/
-
-       function createdLists( $username = '', $cursor = false )
-       {
-               if( !in_array( $this->type, array( 'xml','json','rss','atom' ) ) )
-                       return false;
-
-               $args = array();
-               if( $cursor )
-                       $args['cursor'] = $cursor;
-
-               $qs = '';
-               if( !empty( $args ) )
-                       $qs = $this->_glue( $args );
-
-               $request = API_URL . '/' . $username . '/lists.' . $this->type . $qs;    
-
-               return $this->objectify( $this->process($request) );
-
-       }
-
-       function followedLists( $username = '', $cursor = false )
-       {
-               if( !in_array( $this->type, array( 'xml','json','rss','atom' ) ) )
-                       return false;
-
-               $args = array();
-               if( $cursor )
-                       $args['cursor'] = $cursor;
-
-               $qs = '';
-               if( !empty( $args ) )
-                       $qs = $this->_glue( $args );
-
-               $request = API_URL . '/' . $username . '/lists/subscriptions.' . $this->type . $qs;    
-
-               return $this->objectify( $this->process($request) );
-
-       }
-
-       function beAddedLists( $username = '', $cursor = false )
-       {
-               if( !in_array( $this->type, array( 'xml','json','rss','atom' ) ) )
-                       return false;
-
-               $args = array();
-               if( $cursor )
-                       $args['cursor'] = $cursor;
-
-               $qs = '';
-               if( !empty( $args ) )
-                       $qs = $this->_glue( $args );
-
-               $request = API_URL . '/' . $username . '/lists/memberships.' . $this->type . $qs;    
-
-               return $this->objectify( $this->process($request) );
-
-       }
-
-       //id¸ñʽ£ºusername/listname Àý:bang590/temp ÏÂͬ
-       function listStatus( $id, $page = false, $since_id = false )
-       {
-               if( !in_array( $this->type, array( 'xml','json','rss','atom' ) ) )
-                       return false;
-
-               if (!$id) {
-                       return false;
-               }
-
-               $arr = explode('/', $id);
-               if (count($arr) != 2) return false;
-               $username = $arr[0];
-               $listname = $arr[1];
-
-               $args = array();
-               if( $page )
-                       $args['page'] = (int) $page;
-               if( $since_id )
-                       $args['since_id'] = $since_id;
-
-               $qs = '';
-               if( !empty( $args ) )
-                       $qs = $this->_glue( $args );
-
-               $request = API_URL . "/$username/lists/$listname/statuses." . $this->type . $qs;    
-
-               return $this->objectify( $this->process($request) );
-
-       }
-
-       function listInfo( $id ) {
-               if( !in_array( $this->type, array( 'xml','json' ) ) )
-                       return false;
-
-               if (!$id) {
-                       return false;
-               }
-
-               $arr = explode('/', $id);
-               if (count($arr) != 2) return false;
-               $username = $arr[0];
-               $listname = $arr[1];
-
-               $request = API_URL . "/$username/lists/$listname." . $this->type;    
-               return $this->objectify( $this->process($request) );
-       }
-
-       function isFollowedList( $id )
-       {
-               if( !in_array( $this->type, array( 'xml','json' ) ) )
-                       return false;
-
-               $arr = explode('/', $id);
-               if (count($arr) != 2) return false;
-               $username = $arr[0];
-               $listname = $arr[1];
-
-               $request = API_URL . "/$username/$listname/subscribers/$this->username." . $this->type;
-               return $this->objectify( $this->process($request) );
-       }
-
-
-       function listMembers( $id, $cursor = false )
-       {
-               if( !in_array( $this->type, array( 'xml','json' ) ) )
-                       return false;
-
-               $arr = explode('/', $id);
-               if (count($arr) != 2) return false;
-               $username = $arr[0];
-               $listname = $arr[1];
-
-               $args = array();
-               if( $cursor )
-                       $args['cursor'] = $cursor;
-               $qs = '';
-               if( !empty( $args ) )
-                       $qs = $this->_glue( $args );
-
-               $request = API_URL . "/1/$username/$listname/members." . $this->type . $qs;  
-               return $this->objectify( $this->process($request) );
-       }
-
-       function listFollowers( $id, $cursor = false )
-       {
-               if( !in_array( $this->type, array( 'xml','json' ) ) )
-                       return false;
-
-               $arr = explode('/', $id);
-               if (count($arr) != 2) return false;
-               $username = $arr[0];
-               $listname = $arr[1];
-
-               $args = array();
-               if( $cursor )
-                       $args['cursor'] = $cursor;
-               $qs = '';
-               if( !empty( $args ) )
-                       $qs = $this->_glue( $args );
-
-               $request = API_URL . "/1/$username/$listname/subscribers." . $this->type . $qs;  
-               return $this->objectify( $this->process($request) );
-       }
-
-       function followList( $id )
-       {
-               if( !in_array( $this->type, array( 'xml','json' ) ) )
-                       return false;
-
-               $arr = explode('/', $id);
-               if (count($arr) != 2) return false;
-               $username = $arr[0];
-               $listname = $arr[1];
-
-               $request = API_URL . "/1/$username/$listname/subscribers." . $this->type;  
-               return $this->objectify( $this->process($request, true) );
-       }
-
-       function unfollowList( $id )
-       {
-               if( !in_array( $this->type, array( 'xml','json' ) ) )
-                       return false;
-
-               $arr = explode('/', $id);
-               if (count($arr) != 2) return false;
-               $username = $arr[0];
-               $listname = $arr[1];
-
-               $request = API_URL . "/1/$username/$listname/subscribers." . $this->type;  
-               return $this->objectify( $this->process($request, "DELETE") );
-       }
-
-       function createList( $name, $description, $isProtect)
-       {
-               if( !in_array( $this->type, array( 'xml','json' ) ) )
-                       return false;
-
-               $mode = $isProtect ? "private" : "public";
-               $args = array();
-               if( $name )
-                       $args['name'] = $name;
-               if( $description )
-                       $args['description'] = $description;
-               if( $isProtect )
-                       $args['mode'] = $mode;
-               $qs = '';
-               if( !empty( $args ) )
-                       $qs = $this->_glue( $args );
-
-               $request = API_URL . "/$this->username/lists." . $this->type . $qs; 
-
-               return $this->objectify( $this->process($request, true) );
-       }
-
-       function editList( $prename, $name, $description, $isProtect)
-       {
-               if( !in_array( $this->type, array( 'xml','json' ) ) )
-                       return false;
-
-               $mode = $isProtect ? "private" : "public";
-               $args = array();
-               if( $name )
-                       $args['name'] = $name;
-               if( $description )
-                       $args['description'] = $description;
-               if( $isProtect )
-                       $args['mode'] = $mode;
-               $qs = '';
-               if( !empty( $args ) )
-                       $qs = $this->_glue( $args );
-
-               $request = API_URL . "/$this->username/lists/$prename." . $this->type . $qs; 
-
-               return $this->objectify( $this->process($request, true) );
-       }
-
-       function deleteList( $id)
-       {
-               if( !in_array( $this->type, array( 'xml','json' ) ) )
-                       return false;
-
-               $arr = explode('/', $id);
-               if (count($arr) != 2) return false;
-               $username = $arr[0];
-               $listname = $arr[1];
-
-               $request = API_URL . "/$username/lists/$listname." . $this->type; 
-
-               return $this->objectify( $this->process($request, "DELETE") );
-       }
-
-
-       function deleteListMember( $id, $memberid )
-       {
-               if( !in_array( $this->type, array( 'xml','json' ) ) )
-                       return false;
-
-               $arr = explode('/', $id);
-               if (count($arr) != 2) return false;
-               $username = $arr[0];
-               $listname = $arr[1];
-
-               $args = array();
-               if( $memberid )
-                       $args['id'] = $memberid;
-               $qs = '';
-               if( !empty( $args ) )
-                       $qs = $this->_glue( $args );
-
-               $request = API_URL . "/$username/$listname/members." . $this->type . $qs;  
-
-               return $this->objectify( $this->process($request, "DELETE") );
-       }
-
-       function addListMember( $listid, $memberid )
-       {
-               if( !in_array( $this->type, array( 'xml','json' ) ) )
-                       return false;
-
-               $args = array();
-               if( $memberid )
-                       $args['id'] = $memberid;
-               $qs = '';
-               if( !empty( $args ) )
-                       $qs = $this->_glue( $args );
-
-               $request = API_URL . "/$this->username/$listid/members." . $this->type . $qs;  
-               return $this->objectify( $this->process($request, true) );
-       }
-
-       /* ---------- Retweet ---------- */
-       function getRetweeters($id, $count = false){
-               $url = "http://api.twitter.com/1/statuses/retweets/$id.$this->type";
-               if($count != false){
-                       $url .= "?count=$count";
-               }
-               return $this->objectify($this->process($url, $args));
-       }
-
-       function retweet($id){
-               $url = "http://api.twitter.com/1/statuses/retweet/$id.$this->type";
-               $args = array();
-               $args['post_method'] = true;
-               return $this->curl_process($url, $args);
-       }
-
-       function retweets($id, $count = false){
-               $url = "http://api.twitter.com/1/statuses/retweets/id.$this->type";
-               if($count){
-                       $url .= "?count=".($count > 100 ? 100 : $count);
-               }
-               return $this->curl_process($url);
-       }
-
-       function retweeted_by_me($page = false, $count = 20, $since_id = false, $max_id = false){
-               $url = "http://api.twitter.com/1/statuses/retweeted_by_me.$this->type";
-               $args = array();
-               if($since_id){
-                       $args['since_id'] = $since_id;
-               }
-               if($max_id){
-                       $args['max_id'] = $max_id;
-               }
-               if($count){
-                       $args['count'] = $count;
-               }
-               if($page){
-                       $args['page'] = $page;
-               }
-               $url .= $this->_glue($args);
-               return $this->curl_process($url);
-       }
-
-       function retweeted_to_me($page = false, $count = false, $since_id = false, $max_id = false){
-               $url = "http://api.twitter.com/1/statuses/retweeted_to_me.$this->type";
-               $args = array();
-               if($since_id){
-                       $args['since_id'] = $since_id;
-               }
-               if($max_id){
-                       $args['max_id'] = $max_id;
-               }
-               if($count){
-                       $args['count'] = $count;
-               }
-               if($page){
-                       $args['page'] = $page;
-               }
-               $url .= $this->_glue($args);
-               return $this->curl_process($url);
-       }
-
-       function retweets_of_me($page = false, $count = false, $since_id = false, $max_id = false){
-               $url = "http://api.twitter.com/1/statuses/retweets_of_me.$this->type";
-               $args = array();
-               if($since_id){
-                       $args['since_id'] = $since_id;
-               }
-               if($max_id){
-                       $args['max_id'] = $max_id;
-               }
-               if($count){
-                       $args['count'] = $count;
-               }
-               if($page){
-                       $args['page'] = $page;
-               }
-               $url .= $this->_glue($args);
-               return $this->curl_process($url);
-       }
-
-       /**** Twitese Method ****/
-
-       function rank( $page = false, $count = false )
-       {
-               $args = array();
-               if( $page )
-                       $args['page'] = $page;
-               if( $count )
-                       $args['count'] = $count;
-               $qs = $this->_glue( $args );
-
-               $request = TWITESE_API_URL . '/rank.' . $this->type . $qs;
-
-               return $this->objectify( $this->process($request) );
-       }
-
-       function browse( $page = false, $count = false )
-       {
-               $args = array();
-               if( $page )
-                       $args['page'] = $page;
-               if( $count )
-                       $args['count'] = $count;
-               $qs = $this->_glue( $args );
-
-               $request = TWITESE_API_URL . '/browse.' . $this->type . $qs;
-
-               return $this->objectify( $this->process($request) );
-       }
-       /**** API Rate Limit ****/
-       function ratelimit()
-       {
-               if( !in_array( $this->type, array( 'xml','json' ) ) )
-                       return false;
-               $request = API_URL . '/account/rate_limit_status.' . $this->type;
-               return $this->objectify( $this->process($request) );
-       }
-
-       function ratelimit_status()
-       {
-               return $this->ratelimit();
-       }
-
-       /**** Upload Photo ****/
-       /****
-               function twitgooUpload( $image ) {
-                               $postdata = array( 'media' => "@$image", 'username' => $this->username, 'password' => $this->password);
-                       $request = 'http://twitgoo.com/api/upload';
-                       $this->type = 'xml';
-                       return $this->objectify( $this->process( $request, $postdata ) );
-               }
-       ****/   
-       function imglyUpload( $image ) {
-               $postdata = array( 'media' => "@$image", 'username' => $this->username, 'password' => $this->password);
-               $request = 'http://img.ly/api/upload';
-               $this->type = 'xml';
-               $this->ssl_mode = 1;
-               return $this->objectify( $this->process( $request, $postdata ) );
-       }
-
-       /****** Tests ******/
-
-       function twitterAvailable()
-       {
-               if( !in_array( $this->type, array( 'xml','json' ) ) )
-                       return false;
-
-               $request = API_URL . '/help/test.' . $this->type;
-               if( $this->objectify( $this->process($request) ) == 'ok' )
-                       return true;
-
-               return false;
-       }
-
-
-       /**** request method ****/
-       function process($url,$postargs=false,$ssl_mode=0)
-       {
-               if ($this->debug) {
-                       echo $url;
-               }
-               $url = ( $this->suppress_response_code ) ? $url . '&suppress_response_code=true' : $url;
-               $ch = curl_init($url);
-               curl_setopt($ch, CURLOPT_HTTPHEADER, array("Expect:"));
-
-               if($postargs !== false)
-               {
-                       curl_setopt ($ch, CURLOPT_POST, true);
-                       curl_setopt ($ch, CURLOPT_POSTFIELDS, $postargs);
-                       if ($postargs === "DELETE") {
-                               curl_setopt ($ch, CURLOPT_POSTFIELDS, "_method=DELETE");
-                       }
-               }
-
-
-               if($this->username !== false && $this->password !== false)
-                       curl_setopt($ch, CURLOPT_USERPWD, $this->username.':'.$this->password );
-
-               curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
-               //                  curl_setopt($ch, CURLOPT_VERBOSE, 1);
-               curl_setopt($ch, CURLOPT_USERAGENT, $this->user_agent);
-               curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, $ssl_mode);
-
-               $response = curl_exec($ch);
-
-               $this->responseInfo=curl_getinfo($ch);
-               curl_close($ch);
-               if(intval($this->responseInfo['http_code'] ) == 200)
-                       return $response;    
-               else
-                       return false;
-       }
-
-       function curl_process($url, $postargs = false)
-       {
-               $url = ( $this->suppress_response_code ) ? $url . '&suppress_response_code=true' : $url;
-               $ch = curl_init($url);
-               curl_setopt($ch, CURLOPT_HTTPHEADER, array("Expect:"));
-
-               if($postargs !== false)
-               {
-                       if(isset($postargs['post_method'])){
-                               curl_setopt ($ch, CURLOPT_POST, true);
-                       }else{
-                               curl_setopt ($ch, CURLOPT_POST, true);
-                               curl_setopt ($ch, CURLOPT_POSTFIELDS, $postargs);
-                               if ($postargs === "DELETE") {
-                                       curl_setopt ($ch, CURLOPT_POSTFIELDS, "_method=DELETE");
-                               }
-                       }
-               }
-
-               if($this->username !== false && $this->password !== false)
-                       curl_setopt($ch, CURLOPT_USERPWD, $this->username.':'.$this->password );
-
-               curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $this->connecttimeout);
-               curl_setopt($ch, CURLOPT_TIMEOUT, $this->timeout);
-               curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
-               curl_setopt($ch, CURLOPT_USERAGENT, $this->user_agent);
-               curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
-
-               $response = curl_exec($ch);
-
-               $this->responseInfo = curl_getinfo($ch);
-               curl_close($ch);
-
-               if($response === false){
-                       return false;
-               }
-               if($this->type == 'xml'){
-                       return @simplexml_load_string($response);
-               }else if($this->type == 'json'){
-                       return @json_decode($response);
-               }
-       }
-
-       // Ôö¼Ó $api_type ²ÎÊý
-       function objectify( $data )
-       {
-               if($date === false){
-                       return;
-               }
-               if( $this->type ==  'json' ) {
-                       $result = @json_decode( $data );
-                       if ($this->debug) {
-                               echo '<pre>';
-                               print_r($result);
-                               echo '</pre>';
-                       }
-                       if (isset($result->error)) {
-                               if (substr_count($result->request, 'user_timeline') && $result->error == 'Not authorized') {
-                                       return 'protected';
-                               }
-                               return false;
-                       }
-                       else return $result;
-               }else if( $this->type == 'xml' ){
-                       if( function_exists('simplexml_load_string') ) {
-                               $obj = @simplexml_load_string( $data );
-                       }
-                       if ($this->debug) {
-                               echo '<pre>';
-                               print_r($obj);
-                               echo '</pre>';
-                       }
-                       if (isset($obj->error) || !$obj) return false;
-                       else return $obj;
-               }
-               else
-                       return false;
-       }
-
-       function arrToStr($postargs) {
-               $post_str = '';
-               foreach ($postargs as $key=>$value) {
-                       $post_str .= $key . "=" . $value . "&";
-               }
-               $post_str = substr($post_str, 0,-1);
-               return $post_str;
-       }
-
-       function _glue( $array )
-       {
-               $query_string = '';
-               foreach( $array as $key => $val ) :
-                       $query_string .= $key . '=' . rawurlencode( $val ) . '&';
-endforeach;
-
-return '?' . substr( $query_string, 0, strlen( $query_string )-1 );
-       }
-}
-?>
index 9dedf59..7c9157f 100644 (file)
-<?php\r
-/*\r
- * Abraham Williams (abraham@abrah.am) http://abrah.am\r
- *\r
- * Basic lib to work with Twitter's OAuth beta. This is untested and should not\r
- * be used in production code. Twitter's beta could change at anytime.\r
- *\r
- * Code based on:\r
- * Fire Eagle code - http://github.com/myelin/fireeagle-php-lib\r
- * twitterlibphp - http://github.com/jdp/twitterlibphp\r
- */\r
-\r
-//require_once('config.php');\r
-//require_once('oauth_lib.php');\r
-\r
-/**\r
- * Twitter OAuth class\r
- */\r
-class TwitterOAuth {\r
-       /* Contains the last HTTP status code returned */\r
-       public $http_code;\r
-       /* Contains the last API call */\r
-       public $last_api_call;\r
-       /* Set up the API root URL */\r
-       //public $host = "https://api.twitter.com/1/";\r
-       public $host = API_URL;\r
-       /* Set timeout default */\r
-       public $timeout = 5;\r
-       /* Set connect timeout */\r
-       public $connecttimeout = 30;\r
-       /* Verify SSL Cert */\r
-       public $ssl_verifypeer = FALSE;\r
-       /* Response type */\r
-       public $type = 'json';\r
-       /* Decode return json data */\r
-       public $decode_json = TRUE;\r
-\r
-       public $source = 'embr';\r
-\r
-       // user info\r
-       public $username;\r
-       public $screen_name;\r
-       public $user_id;\r
-       \r
-       //for debug use\r
-       public $curl_info;\r
-       public $http_header;\r
-\r
-       /**\r
-        * Set API URLS\r
-        */\r
-       function accessTokenURL()  { return 'https://api.twitter.com/oauth/access_token'; }\r
-       function authenticateURL() { return 'https://api.twitter.com/oauth/authenticate'; }\r
-       function authorizeURL()    { return 'https://api.twitter.com/oauth/authorize'; }\r
-       function requestTokenURL() { return 'https://api.twitter.com/oauth/request_token'; }\r
-\r
-       /**\r
-        * Debug helpers\r
-        */\r
-       function lastStatusCode() { return $this->http_status; }\r
-       function lastAPICall() { return $this->last_api_call; }\r
-\r
-       /**\r
-        * construct TwitterOAuth object\r
-        */\r
-       function __construct($consumer_key, $consumer_secret, $oauth_token = NULL, $oauth_token_secret = NULL) {\r
-               $this->sha1_method = new OAuthSignatureMethod_HMAC_SHA1();\r
-               $this->consumer = new OAuthConsumer($consumer_key, $consumer_secret);\r
-               if (!empty($oauth_token) && !empty($oauth_token_secret)) {\r
-                       $this->token = new OAuthConsumer($oauth_token, $oauth_token_secret);\r
-                       $this->screen_name = $_SESSION['access_token']['screen_name'];\r
-                       $this->username = $_SESSION['access_token']['screen_name'];\r
-                       $this->user_id = $_SESSION['access_token']['user_id'];\r
-               } else {\r
-                       $this->token = NULL;\r
-               }\r
-       }\r
-\r
-\r
-       /**\r
-        * Get a request_token from Twitter\r
-        *\r
-        * @returns a key/value array containing oauth_token and oauth_token_secret\r
-        */\r
-       function getRequestToken($oauth_callback = NULL) {\r
-               $parameters = array();\r
-               if (!empty($oauth_callback)) {\r
-                       $parameters['oauth_callback'] = $oauth_callback;\r
-               } \r
-               $request = $this->oAuthRequest($this->requestTokenURL(), 'GET', $parameters);\r
-               $token = OAuthUtil::parse_parameters($request);\r
-               $this->token = new OAuthConsumer($token['oauth_token'], $token['oauth_token_secret']);\r
-               return $token;\r
-       }\r
-\r
-       /**\r
-        * Get the authorize URL\r
-        *\r
-        * @returns a string\r
-        */\r
-       function getAuthorizeURL($token) {\r
-               if (is_array($token)) {\r
-                       $token = $token['oauth_token'];\r
-               }\r
-               return $this->authorizeURL() . "?oauth_token={$token}";\r
-       }\r
-\r
-       /**\r
-        * Exchange the request token and secret for an access token and\r
-        * secret, to sign API calls.\r
-        *\r
-        * @returns array("oauth_token" => the access token,\r
-        *                "oauth_token_secret" => the access secret)\r
-        */\r
-       function getAccessToken($oauth_verifier = FALSE) {\r
-               $parameters = array();\r
-               if (!empty($oauth_verifier)) {\r
-                       $parameters['oauth_verifier'] = $oauth_verifier;\r
-               }\r
-               $request = $this->oAuthRequest($this->accessTokenURL(), 'GET', $parameters);\r
-               $token = OAuthUtil::parse_parameters($request);\r
-               $this->token = new OAuthConsumer($token['oauth_token'], $token['oauth_token_secret']);\r
-               return $token;\r
-       }\r
-\r
-       /**\r
-        * GET wrappwer for oAuthRequest.\r
-        */\r
-       function get($url, $parameters = array()) {\r
-               $response = $this->oAuthRequest($url, 'GET', $parameters);\r
-               if($response == false){\r
-                       return false;\r
-               }\r
-               if ($this->type == 'json' && $this->decode_json) {\r
-                       return json_decode($response);\r
-               }elseif($this->type == 'xml' && function_exists('simplexml_load_string')){\r
-                       return simplexml_load_string($response);\r
-               }\r
-               return $response;\r
-       }\r
-\r
-       /**\r
-        * POST wreapper for oAuthRequest.\r
-        */\r
-       function post($url, $parameters = array(), $multipart = NULL) {\r
-               $response = $this->oAuthRequest($url, 'POST', $parameters, $multipart);\r
-               if($response === false){\r
-                       return false;\r
-               }\r
-               if ($this->type === 'json' && $this->decode_json) {\r
-                       return json_decode($response);\r
-               }elseif($this->type == 'xml' && function_exists('simplexml_load_string')){\r
-                       return simplexml_load_string($response);\r
-               }\r
-               return $response;\r
-       }\r
-\r
-       /**\r
-        * DELTE wrapper for oAuthReqeust.\r
-        */\r
-       function delete($url, $parameters = array()) {\r
-               $response = $this->oAuthRequest($url, 'DELETE', $parameters);\r
-               if($response === false){\r
-                       return false;\r
-               }\r
-               if ($this->type === 'json' && $this->decode_json) {\r
-                       return json_decode($response);\r
-               }elseif($this->type == 'xml' && function_exists('simplexml_load_string')){\r
-                       return simplexml_load_string($response);\r
-               }\r
-               return $response;\r
-       }\r
-\r
-       /**\r
-        * Format and sign an OAuth / API request, then make an HTTP request\r
-        */\r
-       function oAuthRequest($url, $method, $parameters, $multipart=NULL) {\r
-               if ($url[0] == '/') { //non-twitter.com api shall offer the entire url.\r
-                       $url = "{$this->host}{$url}.{$this->type}";\r
-               }\r
-               $request = OAuthRequest::from_consumer_and_token($this->consumer, $this->token, $method, $url, $parameters);\r
-               $request->sign_request($this->sha1_method, $this->consumer, $this->token);\r
-               $request->set_http_header($multipart);\r
-               \r
-               $ci = curl_init();\r
-               /* Curl settings */\r
-               curl_setopt($ci, CURLOPT_CONNECTTIMEOUT, $this->connecttimeout);\r
-               curl_setopt($ci, CURLOPT_TIMEOUT, $this->timeout);\r
-               curl_setopt($ci, CURLOPT_RETURNTRANSFER, TRUE);\r
-               curl_setopt($ci, CURLOPT_SSL_VERIFYPEER, $this->ssl_verifypeer);\r
-\r
-               switch ($method) {\r
-               case 'GET':\r
-                       curl_setopt($ci, CURLOPT_URL, $request->to_url());\r
-                       curl_setopt($ci, CURLOPT_HTTPHEADER, array('Expect:'));\r
-                       break;\r
-               case 'POST':\r
-                       $postfields = $multipart ? $multipart : $request->to_postdata();\r
-                       curl_setopt($ci, CURLOPT_URL, $request->get_normalized_http_url());\r
-                       curl_setopt($ci, CURLOPT_HTTPHEADER, $request->http_header);\r
-                       curl_setopt($ci, CURLOPT_POST, TRUE);\r
-                       if (!empty($postfields)) {\r
-                               curl_setopt($ci, CURLOPT_POSTFIELDS, $postfields);\r
-                       }\r
-                       break;\r
-               case 'DELETE':\r
-                       $postfields = $request->to_postdata($multipart);\r
-                       $url = $request->get_normalized_http_url();\r
-                       curl_setopt($ci, CURLOPT_CUSTOMREQUEST, 'DELETE');\r
-                       curl_setopt($ci, CURLOPT_HTTPHEADER, array('Expect:'));\r
-                       if (!empty($postfields)) {\r
-                               $url = "{$url}?{$postfields}";\r
-                               curl_setopt($ci, CURLOPT_URL, $url);\r
-                       }\r
-               }\r
-\r
-               $response = curl_exec($ci);\r
-               $this->http_header = $request->http_header;\r
-               $this->curl_info = curl_getinfo($ci);\r
-               $this->http_code = curl_getinfo($ci, CURLINFO_HTTP_CODE);\r
-               $this->last_api_call = curl_getinfo($ci, CURLINFO_EFFECTIVE_URL);\r
-               \r
-               curl_close ($ci);\r
-               \r
-               return $response;\r
-       }\r
-       \r
-\r
-       /* ---------- API METHODS ---------- */\r
-       /*                                   */\r
-       /* ---------- Block ---------- */\r
-       function blockingIDs(){\r
-               $url = '/blocks/blocking/ids';\r
-               return $this->get($url);\r
-       }\r
-\r
-       function blockingList($id, $cursor=-1, $skip_status = 1){\r
-               $url = '/blocks/list';\r
-               $args = array();\r
-               if($id)\r
-                       $args['user_id'] = $id;\r
-               if($cursor)\r
-                       $args['cursor'] = $cursor;\r
-               $args['skip_status'] = $skip_status;\r
-               return $this->get($url, $args);\r
-       }\r
-\r
-       function blockUser($id){\r
-               $url = "/blocks/create/$id";\r
-               return $this->post($url);\r
-       }\r
-\r
-       function isBlocked($id){\r
-               $url = "/blocks/exists/$id";\r
-               return $this->get($url);\r
-       }\r
-\r
-       function unblockUser($id){\r
-               $url = "/blocks/destroy/$id";\r
-               return $this->delete($url);\r
-       }\r
-\r
-       /* ---------- Messages ---------- */\r
-       function deleteDirectMessage($id){\r
-               $url = "/direct_messages/destroy/$id";\r
-               return $this->delete($url);\r
-       }\r
-\r
-       function directMessages($page = false, $since_id = false, $count = null, $include_entities = true){\r
-               $url = '/direct_messages';\r
-               $args = array();\r
-               if( $since_id )\r
-                       $args['since_id'] = $since_id;\r
-               if( $page )\r
-                       $args['page'] = $page;\r
-               if($include_entities)\r
-                       $args['include_entities'] = $include_entities;\r
-               return $this->get($url, $args);\r
-       }\r
-\r
-       function sendDirectMessage($user, $text){\r
-               $url = '/direct_messages/new';\r
-               $args = array();\r
-               $args['user'] = $user;\r
-               if($text)\r
-                       $args['text'] = $text;\r
-               return $this->post($url, $args);\r
-       }\r
-\r
-       function sentDirectMessage($page = false, $since = false, $since_id = false){\r
-               $url = '/direct_messages/sent';\r
-               $args = array();\r
-               if($since)\r
-                       $args['since'] = $since;\r
-               if($since_id)\r
-                       $args['since_id'] = $since_id;\r
-               if($page)\r
-                       $args['page'] = $page;\r
-               return $this->get($url, $args);\r
-       }\r
-\r
-       /* ---------- List ---------- */\r
-       function addListMember($listid, $memberid){\r
-               $url = "/lists/members/create_all";\r
-               $args = array();\r
-               if($listid) \r
-                       $args['slug'] = $listid;\r
-               if($memberid)\r
-                       $args['user_id'] = $memberid;\r
-               \r
-               return $this->post($url, $args);\r
-       }\r
-\r
-       function beAddedLists($owner_screen_name = '', $cursor = false){\r
-               $url = "/lists/memberships";\r
-               $args = array();\r
-               if($owner_screen_name)\r
-                       $args['owner_screen_name'] = $owner_screen_name;\r
-               if($cursor){\r
-                       $args['cursor'] = $cursor;\r
-               }\r
-               return $this->get($url, $args);\r
-       }\r
-\r
-       function createList($name, $description, $isPortect){\r
-               $url = "/lists/create";\r
-               $args = array();\r
-               if($name)\r
-                       $args['name'] = $name;\r
-               if($description)\r
-                       $args['description'] = $description;\r
-               if($isProtect)\r
-                       $args['mode'] = 'private';\r
-               \r
-               return $this->post($url, $args);\r
-       }\r
-\r
-       function createdLists($username = '', $cursor = false){\r
-               $url = "/lists/ownerships";\r
-               $args = array();\r
-               if($cursor)\r
-                       $args['cursor'] = $cursor;\r
-               \r
-               return $this->get($url, $args);\r
-       }\r
-\r
-       function deleteList($id){\r
-               $url = "/lists/destroy";\r
-               $args = array();\r
-               $args['owner_screen_name'] = $arr[0];\r
-               $args['slug'] = $arr[1];\r
-               return $this->post($url, $args);\r
-       }\r
-\r
-       function deleteListMember($id, $memberid){\r
-               $arr = explode("/", $id);\r
-               $url = "/lists/members/destroy_all";\r
-               $args = array();\r
-               $args['slug'] = $arr[1];\r
-               if($memberid)\r
-                       $args['id'] = $memberid;\r
-               \r
-               return $this->post($url, $args);\r
-       }\r
-\r
-       function editList($prename, $name, $description, $isProtect){\r
-               $url = "/lists/update";\r
-               $args = array();\r
-               if($prename)\r
-                       $args['slug'] = $prename;\r
-               if($name)\r
-                       $args['name'] = $name;\r
-               if($description)\r
-                       $args['description'] = $description;\r
-               if($isProtect)\r
-                       $args['mode'] = "private";\r
-               return $this->post($url, $args);\r
-       }\r
-\r
-       function followedLists($username = '', $cursor = false){\r
-               $url = "/lists/subscriptions";\r
-               $args = array();\r
-               if($username) \r
-                       $args['user_id'] = $username;\r
-               if($cursor)\r
-                       $args['cursor'] = $cursor;\r
-               return $this->get($url, $args);\r
-       }\r
-\r
-       function followList($id){\r
-               $url = "/lists/subscribers/create";\r
-               $arr = explode("/", $id);\r
-               $args = array();\r
-               $args['owner_screen_name'] = $arr[0];\r
-               $args['slug'] = $arr[1];\r
-               return $this->post($url, $args);\r
-       }\r
-\r
-       function isFollowedList($id){\r
-               $url = "/lists/subscribers/show";\r
-               $arr = explode('/', $id);\r
-               $args = array();\r
-               $args['owner_screen_name'] = $arr[0];\r
-               $args['slug'] = $arr[1];\r
-               $args['user_id'] = $this->username;\r
-               return $this->get($url, $args);\r
-       }\r
-\r
-       function listFollowers($id, $cursor = false, $skip_status = 1){\r
-               $url = "/lists/subscribers";\r
-               $arr = explode('/', $id);\r
-               $args = array();\r
-               $args['owner_screen_name'] = $arr[0];\r
-               $args['slug'] = $arr[1];\r
-               if($cursor){\r
-                       $args['cursor'] = $cursor;\r
-               }\r
-               $args['skip_status'] = $skip_status;\r
-               return $this->get($url, $args);\r
-       }\r
-\r
-       function listInfo($id){\r
-               $arr = explode('/', $id);\r
-               $url = "/lists/show";\r
-               $args = array();\r
-               $args['owner_screen_name'] = $arr[0];\r
-               $args['slug'] = $arr[1];\r
-               return $this->get($url, $args);\r
-       }\r
-\r
-       function listMembers($id, $cursor = false, $skip_status = 1){\r
-               $arr = explode("/", $id);\r
-               $url = "/lists/members";\r
-               $args = array();\r
-               $args['owner_screen_name'] = $arr[0];\r
-               $args['slug'] = $arr[1];\r
-               if($cursor){\r
-                       $args['cursor'] = $cursor;\r
-               }\r
-               $args['skip_status'] = $skip_status;\r
-               return $this->get($url, $args);\r
-\r
-       }\r
-\r
-       function listStatus($id, $page = false, $since_id = false,$include_rts = true, $include_entities = true){\r
-               $arr = explode('/', $id);\r
-               $url = '/lists/statuses';\r
-               $args = array();\r
-               $args['slug'] = $arr[1];\r
-               $args['owner_screen_name'] = $arr[0];\r
-               if($page){\r
-                       $args['page'] = $page;\r
-               }\r
-               if($since_id){\r
-                       $args['since_id'] = $since_id;\r
-               }\r
-               if($include_rts)\r
-                       $args['include_rts'] = $include_rts;\r
-               if($include_entities)\r
-                       $args['include_entities'] = $include_entities;\r
-               return $this->get($url, $args);\r
-       }\r
-\r
-       function unfollowList($id){\r
-               $arr = explode("/", $id);\r
-               $url = "/lists/subscribers/destroy";\r
-               $args = array();\r
-               $args['owner_screen_name'] = $arr[0];\r
-               $args['slug'] = $arr[1];\r
-               return $this->post($url, $args);\r
-       }\r
-\r
-       /* ---------- Friendship ---------- */\r
-       function destroyUser($id){\r
-               $url = "/friendships/destroy/$id";\r
-               return $this->delete($url);\r
-       }\r
-\r
-       function followers($id = false, $page = false, $skip_status = true){\r
-               $url = 'followers/list';\r
-               if( $id )\r
-                       $args['user_id'] = $id;\r
-               $args['cursor'] = $page ? $page : -1;\r
-               $args['skip_status'] = $skip_status;\r
-               return $this->get($url, $args);\r
-       }\r
-\r
-       function followUser($id, $notifications = false){\r
-               $url = "/friendships/create/$id";\r
-               $args = array();\r
-               if($notifications)\r
-                       $args['follow'] = true;\r
-               return $this->post($url, $args);\r
-       }\r
-\r
-       function friends($id = false, $page = false, $skip_status = true){\r
-               $url = '/friends/list';\r
-               $args = array();\r
-               if( $id )\r
-                       $args['user_id'] = $id;\r
-               $args['cursor'] = $page ? $page : -1;\r
-               $args['skip_status'] = $skip_status;\r
-               return $this->get($url, $args);\r
-       }\r
-\r
-       function isFriend($user_a, $user_b){\r
-               $url = '/friendships/exists';\r
-               $args = array();\r
-               $args['user_a'] = $user_a;\r
-               $args['user_b'] = $user_b;\r
-               return $this->get($url, $args);\r
-       }\r
-\r
-       function friendship($source_screen_name,$target_screen_name){\r
-               $url = '/friendships/show';\r
-               $args = array();\r
-               $args['source_screen_name'] = $source_screen_name;\r
-               $args['target_screen_name'] = $target_screen_name;\r
-               return $this->get($url, $args);\r
-       }\r
-       \r
-       function relationship($target, $source = false){\r
-               $url = '/friendships/show';\r
-               $args = array();\r
-               $args['target_screen_name'] = $target;\r
-               if($source){\r
-                       $args['source_screen_name'] = $source;\r
-               }\r
-               return $this->get($url, $args);\r
-       }\r
-\r
-       function showUser($id = false, $email = false, $user_id = false, $screen_name = false,$include_entities = true){\r
-               $url = '/users/show';\r
-               $args = array();\r
-               if($id)\r
-                       $args['id'] = $id;\r
-               elseif($screen_name)\r
-                       $args['id'] = $screen_name;\r
-               else\r
-                       $args['id'] = $this->user_id;\r
-\r
-               return $this->get($url, $args);\r
-       }\r
-\r
-       /* ---------- Ratelimit ---------- */\r
-       function ratelimit(){\r
-               $url = '/account/rate_limit_status';\r
-               return $this->get($url,array(),false);\r
-       }\r
-\r
-       /* ---------- Retweet ---------- */\r
-       function getRetweeters($id, $count = false){\r
-               $url = "/statuses/retweets/$id";\r
-               if($count != false) {\r
-                       $url .= "?count=$count";\r
-               }\r
-               return $this->get($url);\r
-       }\r
-\r
-       function retweet($id){\r
-               $url = "/statuses/retweet/$id";\r
-               return $this->post($url);\r
-       }\r
-\r
-       function retweets($id, $count = 20,$include_entities = true){\r
-               if($count > 100){\r
-                       $count = 100;\r
-               }\r
-               $url = "/statuses/retweets/$id";\r
-               $args = array();\r
-               $args['count'] = unt;\r
-               if($include_ities)\r
-                       $args['include_entities'] = $include_entities;\r
-               return $this->get($url,$args);\r
-       }\r
-\r
-       function retweets_of_me($page = false, $count = false, $since_id = false, $max_id = false,$include_entities = true){\r
-               $url = '/statuses/retweets_of_me';\r
-               $args = array();\r
-               if($since_id)\r
-                       $args['since_id'] = $since_id;\r
-               if($max_id)\r
-                       $args['max_id'] = $max_id;\r
-               if($count)\r
-                       $args['count'] = $count;\r
-               if($page)\r
-                       $args['page'] = $page;\r
-               if($include_entities)\r
-                       $args['include_entities'] = $include_entities;\r
-               return $this->get($url, $args);\r
-       }\r
-\r
-       /* ---------- Search ---------- */\r
-       function search($q = false, $max_id = false, $include_entities = true){\r
-               $url = "/search/tweets";\r
-               if(!$q) {\r
-                       return false;\r
-               } else {\r
-                       $args = array();\r
-                       $args['q'] = $q;\r
-               }\r
-               if($max_id)\r
-                       $args['max_id'] = $max_id;\r
-               if($include_entities)\r
-                       $args['include_entities'] = $include_entities;\r
-               return $this->get($url, $args);\r
-       }\r
-\r
-       /* ---------- Spam ---------- */\r
-       function reportSpam($screen_name){\r
-               $url = '/report_spam';\r
-               $args = array();\r
-               $args['screen_name'] = $screen_name;\r
-               return $this->post($url, $args);\r
-       }\r
-\r
-       /* ---------- Timeline ---------- */\r
-       function deleteStatus($id){\r
-               $url = "/statuses/destroy/$id";\r
-               return $this->delete($url);\r
-       }\r
-\r
-       function homeTimeline($page = false, $since_id = false, $count = false, $include_entities = true) {\r
-               $url = '/statuses/home_timeline';\r
-               $args = array();\r
-               if($page)\r
-                       $args['page'] = $page;\r
-               if($since_id)\r
-                       $args['since_id'] = $since_id;\r
-               if($count)\r
-                       $args['count'] = $count;\r
-               if($include_entities)\r
-                       $args['include_entities'] = $include_entities;\r
-               return $this->get($url, $args);\r
-       }\r
-       \r
-       function friendsTimeline($page = false, $since_id = false, $count = false,$include_entities = true){\r
-               $url = '/statuses/friends_timeline';\r
-               $args = array();\r
-               if($page)\r
-                       $args['page'] = $page;\r
-               if($since_id)\r
-                       $args['since_id'] = $since_id;\r
-               if($count)\r
-                       $args['count'] = $count;\r
-               if($include_entities)\r
-                       $args['include_entities'] = $include_entities;\r
-               return $this->get($url, $args);\r
-       }\r
-\r
-       function getFavorites($page = false,$userid=false,$include_entities = true){\r
-               $url = '/favorites/list';\r
-               $args = array();\r
-               if($userid)\r
-                       $args['user_id'] = $userid;\r
-               if($page)\r
-                       $args['page'] = $page;\r
-               if($include_entities)\r
-                       $args['include_entities'] = $include_entities;\r
-               return $this->get($url, $args);\r
-       }\r
-\r
-       function makeFavorite($id){\r
-               $url = "/favorites/create/$id";\r
-               return $this->post($url);\r
-       }\r
-\r
-       function publicTimeline($sinceid = false,$include_entities = true){\r
-               $url = '/statuses/public_timeline';\r
-               $args = array();\r
-               if($sinceid){\r
-                       $args['since_id'] = $sinceid;\r
-               }\r
-               if($include_entities)\r
-                       $args['include_entities'] = $include_entities;\r
-               return $this->get($url, $args);\r
-       }\r
-\r
-       function removeFavorite($id){\r
-               $url = "/favorites/destroy/$id";\r
-               return $this->post($url);\r
-       }\r
-\r
-       function replies($page = false, $since_id = false,$include_entities = true){\r
-               $url = '/statuses/mentions_timeline';\r
-               $args = array();\r
-               if($page)\r
-                       $args['page'] = (int) $page;\r
-               if($since_id)\r
-                       $args['since_id'] = $since_id;\r
-               if($include_entities)\r
-                       $args['include_entities'] = $include_entities;\r
-               return $this->get($url, $args);\r
-       }\r
-\r
-       function showStatus($id,$include_entities = true){\r
-               $url = "/statuses/show/";\r
-               $args = array();\r
-               if($id)\r
-                       $args['id'] = $id;\r
-               if($include_entities)\r
-                       $args['include_entities'] = $include_entities;\r
-               return $this->get($url,$args);\r
-       }\r
-\r
-       function update($status, $replying_to = false,$include_entities = true){\r
-               try{\r
-                       $url = '/statuses/update';\r
-                       $args = array();\r
-                       $args['status'] = $status;\r
-                       if($replying_to)\r
-                               $args['in_reply_to_status_id'] = $replying_to;\r
-                       if($include_entities)\r
-                               $args['include_entities'] = $include_entities;\r
-                       return $this->post($url, $args);\r
-               }catch(Exception $ex){\r
-                       echo $ex->getLine." : ".$ex->getMessage();\r
-               }\r
-       }\r
-\r
-       function userTimeline($page = false, $id = false, $count = false, $since_id = false, $include_rts = true, $include_entities = true){\r
-               $url = '/statuses/user_timeline';\r
-               $args = array();\r
-               if($page)\r
-                       $args['page'] = $page;\r
-               if($id)\r
-                       $args['id'] = $id;\r
-               if($count)\r
-                       $args['count'] = $count;\r
-               if($since_id)\r
-                       $args['since_id'] = $since_id;\r
-               if($include_rts)\r
-                       $args['include_rts'] = $include_rts;\r
-               if($include_entities)\r
-                       $args['include_entities'] = $include_entities;\r
-               $response = $this->get($url, $args);\r
-               return $response;\r
-       }\r
-\r
-       function trends_closest($lat = false, $long=false) {\r
-               $url = "/trends/closest";\r
-               $args = array();\r
-               if ($lat)\r
-                       $args['lat'] = $lat;\r
-               if ($long)\r
-                       $args['long'] = $long;\r
-               return $this->get($url, $args);\r
-       }\r
-       \r
-       function trends_place($id = 1) {\r
-               $url = "/trends/place";\r
-               $args = array();\r
-               if ($id)\r
-                       $args['id'] = $id;\r
-               return $this->get($url, $args);\r
-       }\r
-       /* ---------- Misc. ---------- */\r
-       function twitterAvailable(){\r
-               $url = "/help/test";\r
-               if($this->get($url) == 'ok'){\r
-                       return true;\r
-               }\r
-               return false;\r
-       }\r
-\r
-       function veverify($skip_status = false){\r
-               $url = '/account/verify_credentials';\r
-               $args = array('skip_status' => $skip_status);\r
-               return $this->get($url,$args);\r
-       }\r
-       \r
-       function updateProfile($fields = array(), $skip_status = true){\r
-               $url = '/account/update_profile';\r
-               $args = array();\r
-               foreach( $fields as $pk => $pv ){\r
-                       switch( $pk ){\r
-                       case 'name' :\r
-                               $args[$pk] = (string) substr( $pv, 0, 20 );\r
-                               break;\r
-                       case 'url' :\r
-                               $args[$pk] = (string) substr( $pv, 0, 100 );\r
-                               break;\r
-                       case 'location' :\r
-                               $args[$pk] = (string) substr( $pv, 0, 30 );\r
-                               break;\r
-                       case 'description' :\r
-                               $args[$pk] = (string) substr( $pv, 0, 160 );\r
-                               break;\r
-                       default :\r
-                               break;\r
-                       }\r
-                       $args['skip_status'] = $skip_status;\r
-               }\r
-               return $this->post($url, $args);\r
-       }\r
-       \r
-       /* media */\r
-       function updateProfileImage($image, $skip_status=true) {\r
-               $url = '/account/update_profile_image';\r
-               $mul = array();\r
-               if($image){\r
-                       $mul['image']=$image;\r
-               }\r
-               if($skip_status) {\r
-                       $args['skip_status']=$skip_status;\r
-               }\r
-               return $this->post($url, $args, $mul);\r
-       }\r
-       \r
-       function updateProfileBackground($image, $skip_status=true) {\r
-               $url = '/account/update_profile_background_image';\r
-               $mul = array();\r
-               if($image){\r
-                       $mul['image']=$image;\r
-                       $mul['skip_status']=$skip_status;\r
-               }\r
-               return $this->post($url, NULL, $mul);\r
-       }\r
-       \r
-       function updateMedia($status,$image,$replying_to = false) {\r
-               $url = 'https://upload.twitter.com/1/statuses/update_with_media'.$this->type;\r
-               $args = array();\r
-               if($status) $args['status'] = $status;\r
-               if($replying_to) $args['in_reply_to_status_id'] = $replying_to;\r
-               $mul = array();\r
-               if($image) $mul['media'][] = $image;\r
-               return $this->post($url,$args,$mul);\r
-       }\r
-}\r
-\r
+<?php
+/*
+ * Abraham Williams (abraham@abrah.am) http://abrah.am
+ *
+ * Basic lib to work with Twitter's OAuth beta. This is untested and should not
+ * be used in production code. Twitter's beta could change at anytime.
+ *
+ * Code based on:
+ * Fire Eagle code - http://github.com/myelin/fireeagle-php-lib
+ * twitterlibphp - http://github.com/jdp/twitterlibphp
+ */
+
+//require_once('config.php');
+//require_once('oauth_lib.php');
+
+/**
+ * Twitter OAuth class
+ */
+class TwitterOAuth {
+       /* Contains the last HTTP status code returned */
+       public $http_code;
+       /* Contains the last API call */
+       public $last_api_call;
+       /* Set up the API root URL */
+       public $host = API_URL;
+       /* Set timeout default */
+       public $timeout = 5;
+       /* Set connect timeout */
+       public $connecttimeout = 30;
+       /* Verify SSL Cert */
+       public $ssl_verifypeer = FALSE;
+
+       public $source = 'embr';
+
+       // user info
+       public $username;
+       public $screen_name;
+       public $user_id;
+       
+       //for debug use
+       public $curl_info;
+       public $http_header;
+
+       /**
+        * Set API URLS
+        */
+       function accessTokenURL()  { return 'https://api.twitter.com/oauth/access_token'; }
+       function authenticateURL() { return 'https://api.twitter.com/oauth/authenticate'; }
+       function authorizeURL()    { return 'https://api.twitter.com/oauth/authorize'; }
+       function requestTokenURL() { return 'https://api.twitter.com/oauth/request_token'; }
+
+       /**
+        * Debug helpers
+        */
+       function lastStatusCode() { return $this->http_status; }
+       function lastAPICall() { return $this->last_api_call; }
+
+       /**
+        * construct TwitterOAuth object
+        */
+       function __construct($consumer_key, $consumer_secret, $oauth_token = NULL, $oauth_token_secret = NULL) {
+               $this->sha1_method = new OAuthSignatureMethod_HMAC_SHA1();
+               $this->consumer = new OAuthConsumer($consumer_key, $consumer_secret);
+               if (!empty($oauth_token) && !empty($oauth_token_secret)) {
+                       $this->token = new OAuthConsumer($oauth_token, $oauth_token_secret);
+                       $this->screen_name = $_SESSION['access_token']['screen_name'];
+                       $this->username = $_SESSION['access_token']['screen_name'];
+                       $this->user_id = $_SESSION['access_token']['user_id'];
+               } else {
+                       $this->token = NULL;
+               }
+       }
+
+
+       /**
+        * Get a request_token from Twitter
+        *
+        * @returns a key/value array containing oauth_token and oauth_token_secret
+        */
+       function getRequestToken($oauth_callback = NULL) {
+               $parameters = array();
+               if (!empty($oauth_callback)) {
+                       $parameters['oauth_callback'] = $oauth_callback;
+               } 
+               $request = $this->oAuthRequest($this->requestTokenURL(), 'GET', $parameters);
+               $token = OAuthUtil::parse_parameters($request);
+               $this->token = new OAuthConsumer($token['oauth_token'], $token['oauth_token_secret']);
+               return $token;
+       }
+
+       /**
+        * Get the authorize URL
+        *
+        * @returns a string
+        */
+       function getAuthorizeURL($token) {
+               if (is_array($token)) {
+                       $token = $token['oauth_token'];
+               }
+               return $this->authorizeURL() . "?oauth_token={$token}";
+       }
+
+       /**
+        * Exchange the request token and secret for an access token and
+        * secret, to sign API calls.
+        *
+        * @returns array("oauth_token" => the access token,
+        *                "oauth_token_secret" => the access secret)
+        */
+       function getAccessToken($oauth_verifier = FALSE) {
+               $parameters = array();
+               if (!empty($oauth_verifier)) {
+                       $parameters['oauth_verifier'] = $oauth_verifier;
+               }
+               $request = $this->oAuthRequest($this->accessTokenURL(), 'GET', $parameters);
+               $token = OAuthUtil::parse_parameters($request);
+               $this->token = new OAuthConsumer($token['oauth_token'], $token['oauth_token_secret']);
+               return $token;
+       }
+
+       /**
+        * GET wrappwer for oAuthRequest.
+        */
+       function get($url, $parameters = array()) {
+               $response = $this->oAuthRequest($url, 'GET', $parameters);
+               if($response == false){
+                       return false;
+               }
+               return json_decode($response);
+       }
+
+       /**
+        * POST wreapper for oAuthRequest.
+        */
+       function post($url, $parameters = array(), $multipart = NULL) {
+               $response = $this->oAuthRequest($url, 'POST', $parameters, $multipart);
+               if($response === false){
+                       return false;
+               }
+               return json_decode($response);
+       }
+
+       /**
+        * Format and sign an OAuth / API request, then make an HTTP request
+        */
+       function oAuthRequest($url, $method, $parameters, $multipart=NULL) {
+               if ($url[0] == '/') { //non-twitter.com api shall offer the entire url.
+                       $url = "{$this->host}{$url}.json";
+               }
+               $request = OAuthRequest::from_consumer_and_token($this->consumer, $this->token, $method, $url, $parameters);
+               $request->sign_request($this->sha1_method, $this->consumer, $this->token);
+               $request->set_http_header($multipart);
+               
+               $ci = curl_init();
+               /* Curl settings */
+               curl_setopt($ci, CURLOPT_CONNECTTIMEOUT, $this->connecttimeout);
+               curl_setopt($ci, CURLOPT_TIMEOUT, $this->timeout);
+               curl_setopt($ci, CURLOPT_RETURNTRANSFER, TRUE);
+               curl_setopt($ci, CURLOPT_SSL_VERIFYPEER, $this->ssl_verifypeer);
+
+               switch ($method) {
+               case 'GET':
+                       curl_setopt($ci, CURLOPT_URL, $request->to_url());
+                       curl_setopt($ci, CURLOPT_HTTPHEADER, array('Expect:'));
+                       break;
+               case 'POST':
+                       $postfields = $multipart ? $multipart : $request->to_postdata();
+                       curl_setopt($ci, CURLOPT_URL, $request->get_normalized_http_url());
+                       curl_setopt($ci, CURLOPT_HTTPHEADER, $request->http_header);
+                       curl_setopt($ci, CURLOPT_POST, TRUE);
+                       if (!empty($postfields)) {
+                               curl_setopt($ci, CURLOPT_POSTFIELDS, $postfields);
+                       }
+               }
+
+               $response = curl_exec($ci);
+               $this->http_header = $request->http_header;
+               $this->curl_info = curl_getinfo($ci);
+               $this->http_code = curl_getinfo($ci, CURLINFO_HTTP_CODE);
+               $this->last_api_call = curl_getinfo($ci, CURLINFO_EFFECTIVE_URL);
+               
+               curl_close ($ci);
+               
+               return $response;
+       }
+       
+
+       /* ---------- API METHODS ---------- */
+       /*                                   */
+       /* ---------- Block ---------- */
+       function blockingList($id, $cursor=-1, $skip_status = true){
+               $url = '/blocks/list';
+               $args = array();
+               if($id)
+                       $args['screen_name'] = $id;
+               if($cursor)
+                       $args['cursor'] = $cursor;
+               $args['skip_status'] = $skip_status;
+               return $this->get($url, $args);
+       }
+
+       function blockUser($id){
+               $url = "/blocks/create";
+               $args = array();
+               $args['screen_name'] = $id;
+               return $this->post($url, $args);
+       }
+
+       function unblockUser($id){
+               $url = "/blocks/destroy";
+               $args = array();
+               $args['screen_name'] = $id;
+               return $this->post($url, $args);
+       }
+
+       /* ---------- Messages ---------- */
+       function deleteDirectMessage($id){
+               $url = "/direct_messages/destroy";
+               $args = array();
+               $args['id'] = $id;
+               return $this->post($url, $args);
+       }
+
+       function directMessages($since_id = false, $max_id = false, $count = false, $include_entities = true){
+               $url = '/direct_messages';
+               $args = array();
+               if( $since_id )
+                       $args['since_id'] = $since_id;
+               if( $max_id )
+                       $args['max_id'] = $max_id;
+               if( $count )
+                       $args['count'] = $count;
+               if($include_entities)
+                       $args['include_entities'] = $include_entities;
+               return $this->get($url, $args);
+       }
+
+       function sentDirectMessages($since_id = false, $max_id = false, $count = false, $include_entities = true){
+               $url = '/direct_messages/sent';
+               $args = array();
+               if($since_id)
+                       $args['since_id'] = $since_id;
+               if( $max_id )
+                       $args['max_id'] = $max_id;
+               if( $count )
+                       $args['count'] = $count;
+               if($include_entities)
+                       $args['include_entities'] = $include_entities;
+               return $this->get($url, $args);
+       }
+
+       /* ---------- List ---------- */
+       function addListMember($listid, $id, $memberid){
+               $url = "/lists/members/create_all";
+               $args = array();
+               if($listid)
+                       $args['slug'] = $listid;
+               if($id)
+                       $args['owner_screen_name'] = $id;
+               if($memberid){
+                       $args['screen_name'] = $memberid;
+               }
+               return $this->post($url, $args);
+       }
+
+       function beAddedLists($username = '', $cursor = false){
+               $url = "/lists/memberships";
+               $args = array();
+               if($username)
+                       $args['screen_name'] = $username;
+               if($cursor){
+                       $args['cursor'] = $cursor;
+               }
+               return $this->get($url, $args);
+       }
+
+       function createList($name, $description, $isPortect){
+               $url = "/lists/create";
+               $args = array();
+               if($name)
+                       $args['name'] = $name;
+               if($description)
+                       $args['description'] = $description;
+               if($isProtect)
+                       $args['mode'] = 'private';
+               
+               return $this->post($url, $args);
+       }
+
+       function myLists($username = false, $user_id = false, $count = false){
+               $url = "/lists/ownerships";
+               $args = array();
+               if($username){
+                       $args['screen_name'] = $username;
+               } else {
+                       $args['screen_name'] = $this->username;
+               }
+               
+               return $this->get($url, $args);
+       }
+
+       function deleteList($slug){
+               $url = "/lists/destroy";
+               $args = array();
+               $args['slug'] = $slug;
+               $args['owner_screen_name'] = $this->username;
+               return $this->post($url, $args);
+       }
+
+       function deleteListMember($slug, $owner, $memberid){
+               $url = "/lists/members/destroy_all";
+               $args = array();
+               $args['slug'] = $slug;
+               $args['owner_screen_name'] = $owner;
+               $args['user_id'] = $memberid;
+               
+               return $this->post($url, $args);
+       }
+
+       function editList($prename, $name, $description, $isProtect){
+               $url = "/lists/update";
+               $args = array();
+               if($prename)
+                       $args['slug'] = $prename;
+               if($name)
+                       $args['name'] = $name;
+               if($description)
+                       $args['description'] = $description;
+               if($isProtect)
+                       $args['mode'] = "private";
+               return $this->post($url, $args);
+       }
+
+       function followedLists($username = '', $cursor = false){
+               $url = "/lists/subscriptions";
+               $args = array();
+               if($username)
+                       $args['screen_name'] = $username;
+               if($cursor)
+                       $args['cursor'] = $cursor;
+               return $this->get($url, $args);
+       }
+
+       function followList($id){
+               $url = "/lists/subscribers/create";
+               $arr = explode("/", $id);
+               $args = array();
+               $args['slug'] = $arr[1];
+               $args['owner_screen_name'] = $arr[0];
+               return $this->post($url, $args);
+       }
+
+       function isFollowedList($id){
+               $url = "/lists/subscribers/show";
+               $arr = explode('/', $id);
+               $args = array();
+               $args['owner_screen_name'] = $arr[0];
+               $args['slug'] = $arr[1];
+               $args['screen_name'] = $this->username;
+               return isset($this->get($url, $args)->screen_name);
+       }
+
+       function listFollowers($id, $cursor = false, $skip_status = true){
+               $url = "/lists/subscribers";
+               $arr = explode('/', $id);
+               $args = array();
+               $args['slug'] = $arr[1];
+               $args['owner_screen_name'] = $arr[0];
+               if($cursor){
+                       $args['cursor'] = $cursor;
+               }
+               $args['skip_status'] = $skip_status;
+               return $this->get($url, $args);
+       }
+
+       function listInfo($id){
+               $arr = explode('/', $id);
+               $url = "/lists/show";
+               $args = array();
+               $args['slug'] = $arr[1];
+               $args['owner_screen_name'] = $arr[0];
+               return $this->get($url, $args);
+       }
+
+       function listMembers($id, $cursor = false, $skip_status = true){
+               $url = "/lists/members";
+               $arr = explode("/", $id);
+               $args = array();
+               $args['slug'] = $arr[1];
+               $args['owner_screen_name'] = $arr[0];
+               if($cursor){
+                       $args['cursor'] = $cursor;
+               }
+               $args['skip_status'] = $skip_status;
+               return $this->get($url, $args);
+
+       }
+
+       function listStatus($id, $since_id = false, $max_id = false, $include_rts = true, $include_entities = true){
+               $arr = explode('/', $id);
+               $url = "/lists/statuses";
+               $args = array();
+               $args['slug'] = $arr[1];
+               $args['owner_screen_name'] = $arr[0];
+               if($since_id)
+                       $args['since_id'] = $since_id;
+               if($max_id)
+                       $args['max_id'] = $max_id;
+               if($include_rts)
+                       $args['include_rts'] = $include_rts;
+               if($include_entities)
+                       $args['include_entities'] = $include_entities;
+               return $this->get($url, $args);
+       }
+
+       function unfollowList($id){
+               $url = "/lists/subscribers/destroy";
+               $arr = explode("/", $id);
+               $args = array();
+               $args['slug'] = $arr[1];
+               $args['owner_screen_name'] = $arr[0];
+               return $this->post($url, $args);
+       }
+
+       /* ---------- Friendship ---------- */
+       function destroyUser($id){
+               $url = "/friendships/destroy";
+               $args = array();
+               $args['screen_name'] = $id;
+               return $this->post($url, $args);
+       }
+
+       function followers($id = false, $cursor = -1, $skip_status = true){ // GET statuses/friends is removed, try GET followers/list instead
+               $url = '/followers/list';
+               $args = array();
+               if( $id )
+                       $args['screen_name'] = $id;
+               if($cursor)
+                       $args['cursor'] = $cursor;
+               $args['skip_status'] = $skip_status;
+               return $this->get($url, $args);
+       }
+
+       function followUser($id, $notifications = false){
+               $url = "/friendships/create";
+               $args = array();
+               $args['screen_name'] = $id;
+               if($notifications)
+                       $args['follow'] = true;
+               return $this->post($url, $args);
+       }
+
+       function friends($id = false, $cursor = -1, $skip_status = true){ // GET statuses/friends is removed, try GET friends/list instead
+               $url = '/friends/list';
+               $args = array();
+               if( $id )
+                       $args['screen_name'] = $id;
+               if($cursor)
+                       $args['cursor'] = $cursor;
+               $args['skip_status'] = $skip_status;
+               return $this->get($url, $args);
+       }
+       
+       function relationship($target_screen_name, $source_screen_name = false){
+               $url = '/friendships/show';
+               $args = array();
+               $args['target_screen_name'] = $target_screen_name;
+               $args['source_screen_name'] = $source_screen_name ? $source_screen_name : $this->username;
+               return $this->get($url, $args);
+       }
+
+       function showUser($screen_name = false, $user_id = false, $include_entities = true){
+               $url = '/users/show';
+               $args = array();
+               if($screen_name)
+                       $args['screen_name'] = $screen_name;
+               else
+                       $args['user_id'] = $user_id ? $user_id : $this->user_id;
+               return $this->get($url, $args);
+       }
+
+       /* ---------- Ratelimit ---------- */
+       /* this API changed a lot due to the
+        * update of twitter's limit policy,
+        * get only status limits here by
+        * default                        */
+       function ratelimit($resources = "statuses"){
+               $url = '/application/rate_limit_status';
+               $args = array();
+               $args['resources'] = $resources;
+               return $this->get($url, $args);
+       }
+
+       /* ---------- Retweet ---------- */
+       function retweet($id){
+               $url = "/statuses/retweet/$id";
+               return $this->post($url);
+       }
+
+       function retweets($id, $count = 20){
+               if($count > 100){
+                       $count = 100;
+               }
+               $url = "/statuses/retweets/$id";
+               $args = array();
+               $args['count'] = $count;
+               return $this->get($url,$args);
+       }
+
+       function retweets_of_me($count = false, $since_id = false, $max_id = false, $include_entities = true){
+               $url = '/statuses/retweets_of_me';
+               $args = array();
+               if($since_id)
+                       $args['since_id'] = $since_id;
+               if($max_id)
+                       $args['max_id'] = $max_id;
+               if($count)
+                       $args['count'] = $count;
+               if($include_entities)
+                       $args['include_entities'] = $include_entities;
+               return $this->get($url, $args);
+       }
+
+       /* ---------- Search ---------- */
+       function savedSearches(){
+               $url = '/saved_searches/list';
+               return $this->get($url);
+       }
+
+       function deleteSavedSearch($ssid){
+               $url = "/saved_searches/destroy/{$ssid}";
+               return $this->post($url);
+       }
+
+       function saveSearch($query){
+               $url = "/saved_searches/create";
+               $args = array();
+               $args['query'] = $query;
+               return $this->post($url, $args);
+       }
+
+       function search($q = false, $since_id = false, $max_id = false, $include_entities = true){
+               $url = '/search/tweets';
+               if(!$q) {
+                       return false;
+               } else {
+                       $args = array();
+                       $args['q'] = $q;
+               }
+               if($since_id){
+                       $args['since_id'] = $since_id;
+               }
+               if($max_id){
+                       $args['max_id'] = $max_id;
+               }
+               if($include_entities){
+                       $args['include_entities'] = $include_entities;
+               }
+               return $this->get($url, $args);
+       }
+
+       /* ---------- Spam ---------- */
+       function reportSpam($screen_name){
+               $url = '/users/report_spam';
+               $args = array();
+               $args['screen_name'] = $screen_name;
+               return $this->post($url, $args);
+       }
+
+       /* ---------- Timeline ---------- */
+       function deleteStatus($id){
+               $url = "/statuses/destroy/$id";
+               return $this->post($url);
+       }
+
+       function homeTimeline($since_id = false, $max_id = false, $count = false, $include_entities = true) {
+               $url = '/statuses/home_timeline';
+               $args = array();
+               if($max_id)
+                       $args['max_id'] = $max_id;
+               if($since_id)
+                       $args['since_id'] = $since_id;
+               if($count)
+                       $args['count'] = $count;
+               else
+                       $args['count'] = 30;
+               if($include_entities)
+                       $args['include_entities'] = $include_entities;
+               return $this->get($url, $args);
+       }
+       
+       function getFavorites($userid = false, $sinceid = false, $maxid = false, $count = false, $include_entities = true){
+               $url = '/favorites/list';
+               $args = array();
+               if($userid)
+                       $args['screen_name'] = $userid;
+               if($sinceid)
+                       $args['since_id'] = $sinceid;
+               if($maxid)
+                       $args['max_id'] = $maxid;
+               if($count)
+                       $args['count'] = $count;
+               if($include_entities)
+                       $args['include_entities'] = $include_entities;
+               return $this->get($url, $args);
+       }
+
+       function makeFavorite($id){
+               $url = "/favorites/create";
+               $args = array();
+               if($id)
+                       $args['id'] = $id;
+               return $this->post($url, $args);
+       }
+
+       function removeFavorite($id){
+               $url = "/favorites/destroy";
+               $args = array();
+               if($id)
+                       $args['id'] = $id;
+               return $this->post($url, $args);
+       }
+
+       function replies($since_id = false, $max_id = false, $count = false, $include_entities = true){
+               $url = '/statuses/mentions_timeline';
+               $args = array();
+               if($max_id)
+                       $args['max_id'] = $max_id;
+               if($since_id)
+                       $args['since_id'] = $since_id;
+               if($count)
+                       $args['count'] = $count;
+               if($include_entities)
+                       $args['include_entities'] = $include_entities;
+               return $this->get($url, $args);
+       }
+
+       function showStatus($id,$include_entities = true){
+               $url = "/statuses/show";
+               $args = array();
+               if($id)
+                       $args['id'] = $id;
+               if($include_entities)
+                       $args['include_entities'] = $include_entities;
+               return $this->get($url,$args);
+       }
+
+       function update($status, $replying_to = false,$include_entities = true){
+               try{
+                       $url = '/statuses/update';
+                       $args = array();
+                       $args['status'] = $status;
+                       if($replying_to)
+                               $args['in_reply_to_status_id'] = $replying_to;
+                       if($include_entities)
+                               $args['include_entities'] = $include_entities;
+                       return $this->post($url, $args);
+               }catch(Exception $ex){
+                       echo $ex->getLine." : ".$ex->getMessage();
+               }
+       }
+
+       function userTimeline($id = false, $since_id = false, $max_id = false, $count = false, $include_rts = true, $include_entities = true){
+               $url = '/statuses/user_timeline';
+               $args = array();
+               if($max_id)
+                       $args['max_id'] = $max_id;
+               if($id)
+                       $args['screen_name'] = $id;
+               if($count)
+                       $args['count'] = $count;
+               if($since_id)
+                       $args['since_id'] = $since_id;
+               if($include_rts)
+                       $args['include_rts'] = $include_rts;
+               if($include_entities)
+                       $args['include_entities'] = $include_entities;
+               $response = $this->get($url, $args);
+               return $response;
+       }
+
+       function trends_closest($lat = false, $long=false) {
+               $url = "/trends/closest";
+               $args = array();
+               if ($lat)
+                       $args['lat'] = $lat;
+               if ($long)
+                       $args['long'] = $long;
+               return $this->get($url, $args);
+       }
+       
+       function trends_place($id = 1) {
+               $url = "/trends/place";
+               $args = array();
+               if ($id)
+                       $args['id'] = $id;
+               return $this->get($url, $args);
+       }
+       /* ---------- Misc. ---------- */
+       function veverify($skip_status = false){
+               $url = '/account/verify_credentials';
+               $args = array('skip_status' => $skip_status);
+               return $this->get($url,$args);
+       }
+       
+       function updateProfile($fields = array(), $skip_status = true){
+               $url = '/account/update_profile';
+               $args = array();
+               foreach( $fields as $pk => $pv ){
+                       switch( $pk ){
+                       case 'name' :
+                               $args[$pk] = (string) substr( $pv, 0, 20 );
+                               break;
+                       case 'url' :
+                               $args[$pk] = (string) substr( $pv, 0, 100 );
+                               break;
+                       case 'location' :
+                               $args[$pk] = (string) substr( $pv, 0, 30 );
+                               break;
+                       case 'description' :
+                               $args[$pk] = (string) substr( $pv, 0, 160 );
+                               break;
+                       default :
+                               break;
+                       }
+                       $args['skip_status'] = $skip_status;
+               }
+               return $this->post($url, $args);
+       }
+       
+       /* media */
+       function updateProfileImage($image, $skip_status = true) {
+               $url = '/account/update_profile_image';
+               $args = array();
+               if($image){
+                       $args['image']=$image;
+                       $args['skip_status']=$skip_status;
+               }
+               return $this->post($url, $args);
+       }
+       
+       function updateProfileBackground($image, $tile = false, $skip_status = true) {
+               $url = '/account/update_profile_background_image';
+               $args = array();
+               if($image){
+                       $args['image']=$image;
+               }
+               if($tile){
+                       $args['tile']=($tile === 'true');
+               }
+               $args['skip_status']=$skip_status;
+               return $this->post($url, $args);
+       }
+       
+       function updateMedia($status,$image,$replying_to = false) {
+               $url = 'statuses/update_with_media';
+               $args = array();
+               if($status) $args['status'] = $status;
+               if($replying_to) $args['in_reply_to_status_id'] = $replying_to;
+               $mul = array();
+               if($image) $mul['media'][] = $image;
+               return $this->post($url,$args,$mul);
+       }
+}
+
index 0811c46..a526af9 100644 (file)
-<?php\r
-       function setEncryptCookie($key, $value, $time = 0, $path = '/') {\r
-               if (trim(SECURE_KEY) == '') {\r
-                       setcookie($key, $value, $time, $path);\r
-               } else {\r
-                       setcookie($key, encrypt($value), $time, $path);\r
-               }\r
-       }\r
-\r
-       function getEncryptCookie($key) {\r
-               if ( isset($_COOKIE[$key]) ) {\r
-                       if (trim(SECURE_KEY) == '') {\r
-                               return $_COOKIE[$key];\r
-                       } else {\r
-                               return decrypt($_COOKIE[$key]);\r
-                       }\r
-               } else { \r
-                       return null;\r
-               }\r
-       }\r
-\r
-       function getCookie($key) {\r
-               if ( isset($_COOKIE[$key]) ) \r
-                       return $_COOKIE[$key];\r
-               else \r
-                       return null;\r
-       }\r
-\r
-       function delCookie($key) {\r
-               setcookie($key, '', $_SERVER['REQUEST_TIME']-300, '/');\r
-       }\r
-\r
-       function encrypt($plain_text) {\r
-               if ( !function_exists('mcrypt_module_open') ) {\r
-                       return EDencrypt($plain_text, SECURE_KEY);\r
-               }\r
-               $td = mcrypt_module_open('blowfish', '', 'cfb', '');\r
-               $iv = mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_RAND);\r
-               mcrypt_generic_init($td, SECURE_KEY, $iv);\r
-               $crypt_text = mcrypt_generic($td, $plain_text);\r
-               mcrypt_generic_deinit($td);\r
-               return base64_encode($iv.$crypt_text);\r
-       }\r
-\r
-       function decrypt($crypt_text) {\r
-               if ( !function_exists('mcrypt_module_open') ) {\r
-                       return EDdecrypt($plain_text, SECURE_KEY);\r
-               }\r
-               $crypt_text = base64_decode($crypt_text);\r
-               $td = mcrypt_module_open('blowfish', '', 'cfb', '');\r
-               $ivsize = mcrypt_enc_get_iv_size($td);\r
-               $iv = substr($crypt_text, 0, $ivsize);\r
-               $crypt_text = substr($crypt_text, $ivsize);\r
-               mcrypt_generic_init($td, SECURE_KEY, $iv);\r
-               $plain_text = mdecrypt_generic($td, $crypt_text);\r
-               mcrypt_generic_deinit($td);\r
-\r
-               return $plain_text;\r
-       }\r
-\r
-       if ( !function_exists('mb_strlen') ) {\r
-               function mb_strlen($text, $encode) {\r
-                       if (strtolower($encode) == 'utf-8') {\r
-                               return preg_match_all('%(?:\r
-                                       [\x09\x0A\x0D\x20-\x7E]     # ASCII\r
-                                       | [\xC2-\xDF][\x80-\xBF]# non-overlong 2-byte\r
-                                       |  \xE0[\xA0-\xBF][\x80-\xBF] # excluding overlongs\r
-                                       | [\xE1-\xEC\xEE\xEF][\x80-\xBF]{2} # straight 3-byte\r
-                                       |  \xED[\x80-\x9F][\x80-\xBF] # excluding surrogates\r
-                                       |  \xF0[\x90-\xBF][\x80-\xBF]{2}    # planes 1-3\r
-                                       | [\xF1-\xF3][\x80-\xBF]{3}   # planes 4-15\r
-                                       |  \xF4[\x80-\x8F][\x80-\xBF]{2}    # plane 16\r
-                               )%xs',$text,$out);\r
-                       }else{\r
-                               return strlen($text);\r
-                       }\r
-               }\r
-       }\r
-       \r
-       function keyED($txt,$encrypt_key) {\r
-\r
-               $encrypt_key = md5($encrypt_key);\r
-               $ctr=0;\r
-               $tmp = "";\r
-\r
-               for ($i=0;$i<strlen($txt);$i++) {\r
-                       if ($ctr==strlen($encrypt_key)) $ctr=0;\r
-                       $tmp.= substr($txt,$i,1) ^ substr($encrypt_key,$ctr,1);\r
-                       $ctr++;\r
-               }\r
-\r
-               return $tmp;\r
-       }\r
-\r
-       function EDencrypt($txt,$key) {\r
-\r
-               srand((double)microtime()*1000000);\r
-               $encrypt_key = md5(rand(0,32000));\r
-               $ctr=0;\r
-               $tmp = "";\r
-\r
-               for ($i=0;$i<strlen($txt);$i++) {\r
-                       if ($ctr==strlen($encrypt_key)) $ctr=0;\r
-                       $tmp.= substr($encrypt_key,$ctr,1) . (substr($txt,$i,1) ^ substr($encrypt_key,$ctr,1));\r
-                       $ctr++;\r
-               }\r
-\r
-               return keyED($tmp,$key);\r
-       }\r
-\r
-       function EDdecrypt($txt,$key) {\r
-\r
-               $txt = keyED($txt,$key);\r
-               $tmp = "";\r
-\r
-               for ($i=0;$i<strlen($txt);$i++) {\r
-                       $md5 = substr($txt,$i,1);\r
-                       $i++;\r
-                       $tmp.= (substr($txt,$i,1) ^ $md5);\r
-               }\r
-\r
-               return $tmp;\r
-\r
-       }\r
-?>\r
+<?php
+       function setEncryptCookie($key, $value, $time = 0, $path = '/') {
+               if (trim(SECURE_KEY) == '') {
+                       setcookie($key, $value, $time, $path);
+               } else {
+                       setcookie($key, encrypt($value), $time, $path);
+               }
+       }
+
+       function getEncryptCookie($key) {
+               if ( isset($_COOKIE[$key]) ) {
+                       if (trim(SECURE_KEY) == '') {
+                               return $_COOKIE[$key];
+                       } else {
+                               return decrypt($_COOKIE[$key]);
+                       }
+               } else { 
+                       return null;
+               }
+       }
+
+       function getCookie($key) {
+               if ( isset($_COOKIE[$key]) ) 
+                       return $_COOKIE[$key];
+               else 
+                       return null;
+       }
+
+       function delCookie($key) {
+               setcookie($key, '', $_SERVER['REQUEST_TIME']-300, '/');
+       }
+
+       function encrypt($plain_text) {
+               if ( !function_exists('mcrypt_module_open') ) {
+                       return EDencrypt($plain_text, SECURE_KEY);
+               }
+               $td = mcrypt_module_open('blowfish', '', 'cfb', '');
+               $iv = mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_RAND);
+               mcrypt_generic_init($td, SECURE_KEY, $iv);
+               $crypt_text = mcrypt_generic($td, $plain_text);
+               mcrypt_generic_deinit($td);
+               return base64_encode($iv.$crypt_text);
+       }
+
+       function decrypt($crypt_text) {
+               if ( !function_exists('mcrypt_module_open') ) {
+                       return EDdecrypt($crypt_text, SECURE_KEY);
+               }
+               $crypt_text = base64_decode($crypt_text);
+               $td = mcrypt_module_open('blowfish', '', 'cfb', '');
+               $ivsize = mcrypt_enc_get_iv_size($td);
+               $iv = substr($crypt_text, 0, $ivsize);
+               $crypt_text = substr($crypt_text, $ivsize);
+               mcrypt_generic_init($td, SECURE_KEY, $iv);
+               $plain_text = mdecrypt_generic($td, $crypt_text);
+               mcrypt_generic_deinit($td);
+
+               return $plain_text;
+       }
+
+       if ( !function_exists('mb_strlen') ) {
+               function mb_strlen($text, $encode) {
+                       if (strtolower($encode) == 'utf-8') {
+                               return preg_match_all('%(?:
+                                       [\x09\x0A\x0D\x20-\x7E]     # ASCII
+                                       | [\xC2-\xDF][\x80-\xBF]# non-overlong 2-byte
+                                       |  \xE0[\xA0-\xBF][\x80-\xBF] # excluding overlongs
+                                       | [\xE1-\xEC\xEE\xEF][\x80-\xBF]{2} # straight 3-byte
+                                       |  \xED[\x80-\x9F][\x80-\xBF] # excluding surrogates
+                                       |  \xF0[\x90-\xBF][\x80-\xBF]{2}    # planes 1-3
+                                       | [\xF1-\xF3][\x80-\xBF]{3}   # planes 4-15
+                                       |  \xF4[\x80-\x8F][\x80-\xBF]{2}    # plane 16
+                               )%xs',$text,$out);
+                       }else{
+                               return strlen($text);
+                       }
+               }
+       }
+       
+       function keyED($txt,$encrypt_key) {
+
+               $encrypt_key = md5($encrypt_key);
+               $ctr=0;
+               $tmp = "";
+
+               for ($i=0;$i<strlen($txt);$i++) {
+                       if ($ctr==strlen($encrypt_key)) $ctr=0;
+                       $tmp.= substr($txt,$i,1) ^ substr($encrypt_key,$ctr,1);
+                       $ctr++;
+               }
+
+               return $tmp;
+       }
+
+       function EDencrypt($txt,$key) {
+
+               srand((double)microtime()*1000000);
+               $encrypt_key = md5(rand(0,32000));
+               $ctr=0;
+               $tmp = "";
+
+               for ($i=0;$i<strlen($txt);$i++) {
+                       if ($ctr==strlen($encrypt_key)) $ctr=0;
+                       $tmp.= substr($encrypt_key,$ctr,1) . (substr($txt,$i,1) ^ substr($encrypt_key,$ctr,1));
+                       $ctr++;
+               }
+
+               return keyED($tmp,$key);
+       }
+
+       function EDdecrypt($txt,$key) {
+
+               $txt = keyED($txt,$key);
+               $tmp = "";
+
+               for ($i=0;$i<strlen($txt);$i++) {
+                       $md5 = substr($txt,$i,1);
+                       $i++;
+                       $tmp.= (substr($txt,$i,1) ^ $md5);
+               }
+
+               return $tmp;
+
+       }
+?>
index d1df369..f12f7a6 100644 (file)
--- a/list.php
+++ b/list.php
@@ -1,79 +1,77 @@
-<?php \r
-       include ('lib/twitese.php');\r
-       $title = "@{$_GET['id']}";\r
-       include ('inc/header.php');\r
-       if (!loginStatus()) header('location: login.php');\r
-?>\r
-\r
-<script src="js/list.js"></script>\r
-\r
-<div id="statuses">\r
-       <?php \r
-               $p = 1;\r
-               if (isset($_GET['p'])) {\r
-                       $p = (int) $_GET['p'];\r
-                       if ($p <= 0) $p = 1;\r
-               }\r
-               \r
-               $id = isset($_GET['id'])? $_GET['id'] : false;\r
-               $t = getTwitter();\r
-               $statuses = $t->listStatus($id, $p);\r
-               $listInfo = $t->listInfo($id);\r
-               if ($statuses === false) {\r
-                       header('location: error.php');exit();\r
-               } \r
-               \r
-               $isFollower = false;\r
-               //$isFollower = $t->isFollowedList($id);\r
-               $empty = count($statuses) == 0? true: false;\r
-               if ($empty) {\r
-                       echo "<div id=\"empty\">No Tweet To Display</div>";\r
-               } else {\r
-       ?>\r
-       \r
-               \r
-       <div id="info_head">\r
-               <a href="https://twitter.com/<?php echo $userid ?>"><img id="info_headimg" src="<?php echo getAvatar($listInfo->user->profile_image_url); ?>" /></a>\r
-               <div id="info_name"><?php echo $id?></div>\r
-               <div id="info_relation">\r
-               <?php if ($isFollower) {?>\r
-                       <a id="list_block_btn" class="info_btn_hover" href="#">Unfollow</a>\r
-               <?php } else { ?>\r
-                       <a id="list_follow_btn" class="info_btn" href="#">Follow</a>\r
-               <?php } ?>\r
-                       <a id="list_send_btn" class="info_btn" href="#">Tweet</a>\r
-                       <a class="info_btn" href="list_followers.php?id=<?php echo $id?>">Followers (<?php echo $listInfo->subscriber_count?>)</a>\r
-                       <a class="info_btn" href="list_members.php?id=<?php echo $id?>">Members (<?php echo $listInfo->member_count?>)</a>\r
-               </div>\r
-       </div>\r
-       <div class="clear"></div>\r
-       \r
-       <?php \r
-               \r
-                       $output = '<ol class="timeline" id="allTimeline">';\r
-                       include('lib/timeline_format.php');\r
-                       foreach ($statuses as $status) {\r
-                               if (isset($status->retweeted_status)) {\r
-                                       $output .= format_retweet($status);\r
-                               } else { \r
-                                       $output .= format_timeline($status,$t->username);\r
-                               }\r
-                       }\r
-                       \r
-                       $output .= "</ol><div id=\"pagination\">";\r
-                       \r
-                       if ($p >1) $output .= "<a id=\"more\" class=\"round more\" style=\"float: left;\" href=\"list.php?id=$id&p=" . ($p-1) . "\">Back</a>";\r
-                       if (!$empty) $output .= "<a id=\"more\" class=\"round more\" style=\"float: right;\" href=\"list.php?id=$id&p=" . ($p+1) . "\">Next</a>";\r
-                       \r
-                       $output .= "</div>";\r
-                       \r
-                       echo $output;\r
-               }\r
-\r
-       ?>\r
-</div>\r
-\r
-<?php \r
-       include ('inc/sidebar.php');\r
-       include ('inc/footer.php');\r
-?>\r
+<?php 
+       include ('lib/twitese.php');
+       $title = "@{$_GET['id']}";
+       include ('inc/header.php');
+       if (!loginStatus()) header('location: login.php');
+?>
+
+<script src="js/list.js"></script>
+
+<div id="statuses">
+       <?php 
+               $id = isset($_GET['id'])? $_GET['id'] : false;
+               $since_id = isset($_GET['since_id'])? $_GET['since_id'] : false;
+               $max_id = isset($_GET['max_id'])? $_GET['max_id'] : false;
+               $t = getTwitter();
+               $statuses = $t->listStatus($id, $since_id, $max_id);
+               $listInfo = $t->listInfo($id);
+               if ($statuses === false) {
+                       header('location: error.php');exit();
+               } 
+               
+               $isFollower = $t->isFollowedList($id);
+       ?>
+
+       <div id="info_head">
+               <a href="user.php?id=<?php echo $listInfo->user->screen_name ?>"><img id="info_headimg" src="<?php echo getAvatar($listInfo->user->profile_image_url); ?>" /></a>
+               <div id="info_name"><?php echo $id?></div>
+               <div id="info_relation">
+               <?php if ($isFollower) {?>
+                       <a id="list_block_btn" class="info_btn_hover" href="#">Unfollow</a>
+               <?php } else { ?>
+                       <a id="list_follow_btn" class="info_btn" href="#">Follow</a>
+               <?php } ?>
+                       <a id="list_send_btn" class="info_btn" href="#">Tweet</a>
+                       <a class="info_btn" href="list_followers.php?id=<?php echo $id?>">Followers (<?php echo $listInfo->subscriber_count?>)</a>
+                       <a class="info_btn" href="list_members.php?id=<?php echo $id?>">Members (<?php echo $listInfo->member_count?>)</a>
+               </div>
+       </div>
+       <div class="clear"></div>
+
+       <?php 
+               $empty = count($statuses) == 0? true: false;
+               if ($empty) {
+                       echo "<div id=\"empty\">No Tweet To Display</div>";
+               } else {
+                       $output = '<ol class="timeline" id="allTimeline">';
+                       include('lib/timeline_format.php');
+                       $firstid = false;
+                       $lastid = false;
+                       foreach ($statuses as $status) {
+                               if (!$firstid) $firstid = $status->id_str;
+                               $lastid = $status->id_str;
+                               if (isset($status->retweeted_status)) {
+                                       $output .= format_retweet($status);
+                               } else { 
+                                       $output .= format_timeline($status,$t->username);
+                               }
+                       }
+                       $lastid = bcsub($lastid, "1");
+                       
+                       $output .= "</ol><div id=\"pagination\">";
+                       
+                       $output .= "<a id=\"less\" class=\"round more\" style=\"float: left;\" href=\"list.php?id={$id}&since_id={$firstid}\">Back</a>";
+                       $output .= "<a id=\"more\" class=\"round more\" style=\"float: right;\" href=\"list.php?id={$id}&max_id={$lastid}\">Next</a>";
+                       
+                       $output .= "</div>";
+                       
+                       echo $output;
+               }
+
+       ?>
+</div>
+
+<?php 
+       include ('inc/sidebar.php');
+       include ('inc/footer.php');
+?>
index 5ccda34..b29de0b 100644 (file)
@@ -1,11 +1,11 @@
-<?php \r
-       include ('lib/twitese.php');\r
-       $title = "@{$_GET['id']} - Followers";\r
-       include ('inc/header.php');\r
-       \r
-       $type = 'list_followers';\r
-       include ('inc/userlist.php');\r
-       \r
-       include ('inc/sidebar.php');\r
-       include ('inc/footer.php');\r
-?>\r
+<?php 
+       include ('lib/twitese.php');
+       $title = "@{$_GET['id']} - Followers";
+       include ('inc/header.php');
+       
+       $type = 'list_followers';
+       include ('inc/userlist.php');
+       
+       include ('inc/sidebar.php');
+       include ('inc/footer.php');
+?>
index b8a4300..ba42223 100644 (file)
@@ -1,12 +1,12 @@
-<?php\r
-include ('lib/twitese.php');\r
-$title = "@{$_GET['id']} - Following";\r
-include ('inc/header.php');\r
-?>\r
-<script src="js/list_members.js"></script>\r
-<?php\r
-$type = 'list_members';\r
-include ('inc/userlist.php');\r
-include ('inc/sidebar.php');\r
-include ('inc/footer.php');\r
-?>\r
+<?php
+include ('lib/twitese.php');
+$title = "@{$_GET['id']} - Following";
+include ('inc/header.php');
+?>
+<script src="js/list_members.js"></script>
+<?php
+$type = 'list_members';
+include ('inc/userlist.php');
+include ('inc/sidebar.php');
+include ('inc/footer.php');
+?>
index 133209d..e2fbad6 100644 (file)
--- a/lists.php
+++ b/lists.php
-<?php \r
-       include ('lib/twitese.php');\r
-       $title = "Lists";\r
-       include ('inc/header.php');\r
-       \r
-       if (!loginStatus()) header('location: login.php');\r
-?>\r
-\r
-<script src="js/lists.js"></script>\r
-\r
-<div id="statuses">\r
-       <?php \r
-               $t = getTwitter();\r
-               if ( isset($_POST['list_name']) ) {\r
-                       if ($_POST['is_edit'] == 0) {\r
-                               if (trim($_POST['list_name']) == '') {\r
-                                               echo "<div id=\"otherTip\">Fail to create list, the name CANNOT be empty</div>";\r
-                               } else {\r
-                                       $isProtect = isset($_POST['list_protect']) ? true : false;\r
-                                       $result = $t->createList($_POST['list_name'], $_POST['list_description'], $isProtect);\r
-                                       if ($result) {\r
-                                               echo "<div id=\"otherTip\">Success</div>";\r
-                                       } else {\r
-                                               echo "<div id=\"otherTip\">Failed, please retry</div>";\r
-                                       }\r
-                               }\r
-                       } else {\r
-                               if (trim($_POST['list_name']) == '') {\r
-                                               echo "<div id=\"otherTip\">Fail to create list, the name CANNOT be empty</div>";\r
-                               } else {\r
-                                       $isProtect = isset($_POST['list_protect']) ? true : false;\r
-                                       $result = $t->editList($_POST['pre_list_name'], $_POST['list_name'], $_POST['list_description'], $isProtect);\r
-                                       if ($result) {\r
-                                               echo "<div id=\"otherTip\">Success</div>";\r
-                                       } else {\r
-                                               echo "<div id=\"otherTip\">Failed, please retry</div>";\r
-                                       }\r
-                               }\r
-                       }\r
-               }\r
-               \r
-               if ( isset($_POST['list_members']) ) {\r
-                       if (trim($_POST['list_members']) == '') {\r
-                                       echo "<div id=\"otherTip\">Fail to add members, the member list is empty!</div>";\r
-                       } else {\r
-                               $listId = $_POST['member_list_name'];\r
-                               $result = $t->addListMember($listId, $_POST['list_members']);\r
-                               if (isset($result->error)) {\r
-                                       echo "<div id=\"otherTip\">Failed, please retry!</div>";\r
-                               } else {\r
-                                       echo "<div id=\"otherTip\">Success!</div>";\r
-                               }\r
-                       }\r
-               }\r
-       ?>\r
-       <?php \r
-               $isSelf = true;\r
-               if (isset($_GET['id'])) {\r
-                       $id = $_GET['id'];\r
-                       $isSelf = false;\r
-               } else {\r
-                       $id = $t->username;\r
-               }\r
-               $type = isset($_GET['t'])? $_GET['t'] : 1;\r
-               $c = isset($_GET['c'])? $_GET['c'] : -1;\r
-               switch ($type) {\r
-                       case 0:\r
-                               $lists = $t->followedLists($id, $c);\r
-                               break;\r
-                       case 1:\r
-                               $lists = $t->createdLists($id, $c);\r
-                               break;\r
-                       case 2:\r
-                               $lists = $t->beAddedLists($id, $c);\r
-                               break;\r
-                       default:\r
-                               $lists = false;\r
-               }\r
-               $nextlist = $lists->next_cursor;\r
-               $prelist = $lists->previous_cursor;\r
-               $lists = $lists->lists; \r
-               if ($lists === false) {\r
-                       header('location: error.php');exit();\r
-               } \r
-               \r
-               \r
-       ?>\r
-       <div id="subnav">\r
-       <?php if ($isSelf) { ?>\r
-               <?php if ($type == 0) {?>\r
-               <span class="subnavNormal">Lists you follow</span><span class="subnavLink"><a href="lists.php?t=1">Lists you created</a></span><span class="subnavLink"><a href="lists.php?t=2">Lists following you</a></span>\r
-               <?php } else if ($type == 1) {?>\r
-               <span class="subnavLink"><a href="lists.php?t=0">Lists you follow</a></span><span class="subnavNormal">Lists you created</span><span class="subnavLink"><a href="lists.php?t=2">Lists following you</a></span>\r
-               <?php } else {?>\r
-                       <span class="subnavLink"><a href="lists.php?t=0">Lists you follow</a></span><span class="subnavLink"><a href="lists.php?t=1">Lists you created</a></span><span class="subnavNormal">Lists following you</span>\r
-               <?php } ?>\r
-       <?php } else {?>\r
-               <?php if ($type == 0) {?>\r
-               <span class="subnavNormal">Following Lists</span><span class="subnavLink"><a href="lists.php?id=<?php echo $id?>&t=1">Created Lists</a></span><span class="subnavLink"><a href="lists.php?id=<?php echo $id?>&t=2">Lists Following</a></span>\r
-               <?php } else if ($type == 1) {?>\r
-               <span class="subnavLink"><a href="lists.php?t=0&id=<?php echo $id?>">Following Lists</a></span><span class="subnavNormal">Created Lists</span><span class="subnavLink"><a href="lists.php?id=<?php echo $id?>&t=2">Lists Following</a></span>\r
-               <?php } else {?>\r
-                       <span class="subnavLink"><a href="lists.php?t=0&id=<?php echo $id?>">Following Lists</a></span><span class="subnavLink"><a href="lists.php?id=<?php echo $id?>&t=1">Created Lists</a></span><span class="subnavNormal">Lists Following</span>\r
-               <?php } ?>\r
-       <?php } ?>\r
-    </div>\r
-    \r
-       <?php \r
-               \r
-               $empty = count($lists) == 0? true: false;\r
-               if ($empty) {\r
-                       echo "<div id=\"empty\">No Tweet To Display</div>";\r
-               } else {\r
-                       $output = '<ol class="rank_list">';                     \r
-                       foreach ($lists as $list) {\r
-               \r
-                               $listurl = substr($list->uri,1);\r
-                               $user = $list->user;\r
-                               $listname = explode('/',$list->full_name);\r
-                               $mode = $list->mode == 'private' ? "Private" : "";\r
-                               \r
-                               $output .= "\r
-                               <li>\r
-                                       <span class=\"rank_img\"><img src=\"".getAvatar($user->profile_image_url)."\" /></span>\r
-                                       <div class=\"rank_content\">\r
-                                               <span class=\"rank_num\"><span class=\"rank_name\"><a href=\"list.php?id=$listurl\"><em>$listname[0]/</em>$listname[1]</a></span></span>\r
-                                               <span class=\"rank_count\">Followers:$list->subscriber_count  Members:$list->member_count  $mode</span> \r
-                               ";\r
-                               if ($list->description != '') $output .= "<span class=\"rank_description\">Description: $list->description</span>";\r
-                               if ($type == 0) $output .= "<span id=\"list_action\"><a id=\"btn\" href=\"javascript:void()\" class=\"unfollow_list\">Unfollow</a></span>";\r
-                               if ($type == 1 && $isSelf) $output .= "<span id=\"list_action\"><a id=\"btn\" href=\"javascript:void()\" class=\"edit_list\">Edit</a> <a id=\"btn\" href=\"javascript:void()\" class=\"delete_list\">Delete</a> <a id=\"btn\" href=\"javascript:void()\" class=\"add_member\">Add Members</a></span>";\r
-                               $output .= "\r
-                                       </div>\r
-                               </li>\r
-                               ";\r
-                       }\r
-                       \r
-                       $output .= "</ol>";\r
-                       \r
-                       echo $output;\r
-               }\r
-               \r
-       ?>\r
-       \r
-       <?php if ($isSelf && $type == 1) {?>\r
-           <a href="javascript:void()" class="more round" id="list_create_btn" style="margin: 20px auto;">Create a new list</a>\r
-           <form method="POST" action="./lists.php?t=1" id="list_form">\r
-               <input type="hidden" name="pre_list_name" value="" id="pre_list_name" />\r
-               <input type="hidden" name="is_edit" value="0" id="is_edit" />\r
-               <span><label for="list_name">List name</label><input type="text" name="list_name" id="list_name" /></span>\r
-               <span><label for="list_description">Description</label><textarea type="text" name="list_description" id="list_description"></textarea></span>\r
-               <span><label for="list_protect">Private</label><input type="checkbox" name="list_protect" id="list_protect"  />\r
-                       <a style="background: transparent url(img/sprite-icons.png) no-repeat scroll -272px -16px; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; text-decoration: none; height: 10px; float: right; position: relative; width: 9px; left: 3px; top: -160px;" title="Close" onclick="$('#list_form').slideToggle(300)" href="#"></a>\r
-                       <input type="submit" class="btn" id="list_submit" value="Creat" />\r
-                       \r
-                       </span>\r
-               <span></span>\r
-           </form>\r
-           \r
-           \r
-       <?php }?>\r
-       \r
-       <div id="pagination">\r
-       <?php \r
-           if ($type == 0 || $type == 2) {\r
-               if ($isSelf) {\r
-                               if ($prelist != 0) echo "<a id=\"more\" class=\"round more\" style=\"float: left;\" href=\"lists.php?t=$type&c=$prelist\">Back</a>";\r
-                               if ($nextlist != 0) echo "<a id=\"more\" class=\"round more\" style=\"float: right;\" href=\"lists.php?t=$type&c=$nextlist\">Next</a>";\r
-               } else {\r
-                               if ($prelist != 0) echo "<a id=\"more\" class=\"round more\" style=\"float: left;\" href=\"lists.php?id=$id&t=$type&c=$prelist\">Back</a>";\r
-                               if ($nextlist != 0) echo "<a id=\"more\" class=\"round more\" style=\"float: right;\" href=\"lists.php?id=$id&t=$type&c=$nextlist\">Next</a>";\r
-               }\r
-               }\r
-       ?>\r
-       </div>\r
-</div>\r
-\r
-<?php \r
-       include ('inc/sidebar.php');\r
-       include ('inc/footer.php');\r
-?>\r
+<?php 
+       include ('lib/twitese.php');
+       $title = "Lists";
+       include ('inc/header.php');
+       
+       if (!loginStatus()) header('location: login.php');
+?>
+
+<script src="js/lists.js"></script>
+
+<div id="statuses">
+       <?php 
+               $t = getTwitter();
+
+               $isSelf = true;
+               if (isset($_GET['id'])) {
+                       $id = $_GET['id'];
+                       $isSelf = false;
+               } else {
+                       $id = $t->username;
+               }
+               $type = isset($_GET['t'])? $_GET['t'] : 1;
+               $c = isset($_GET['c'])? $_GET['c'] : -1;   // cursor
+               switch ($type) {
+                       case 0:
+                               $lists = $t->followedLists($id, $c);
+                               break;
+                       case 1:
+                               $lists = $t->myLists($id);
+                               break;
+                       case 2:
+                               $lists = $t->beAddedLists($id, $c);
+                               break;
+                       default:
+                               $lists = false;
+               }
+               $nextlist = $lists->next_cursor;
+               $prelist = $lists->previous_cursor;
+               $lists = $lists->lists; 
+               if ($lists === false) {
+                       header('location: error.php');exit();
+               } 
+               
+               
+       ?>
+       <div id="subnav">
+       <?php if ($isSelf) {
+               if ($type == 0) {?>
+               <span class="subnavNormal">Lists you follow</span><span class="subnavLink"><a href="lists.php?t=1">Lists you created</a></span><span class="subnavLink"><a href="lists.php?t=2">Lists following you</a></span>
+               <?php } else if ($type == 1) {?>
+               <span class="subnavLink"><a href="lists.php?t=0">Lists you follow</a></span><span class="subnavNormal">Lists you created</span><span class="subnavLink"><a href="lists.php?t=2">Lists following you</a></span>
+               <?php } else {?>
+                       <span class="subnavLink"><a href="lists.php?t=0">Lists you follow</a></span><span class="subnavLink"><a href="lists.php?t=1">All your lists</a></span><span class="subnavNormal">Lists following you</span>
+               <?php }
+       } else {
+               if ($type == 0) {?>
+               <span class="subnavNormal">Following Lists</span><span class="subnavLink"><a href="lists.php?id=<?php echo $id?>&t=1">All Lists</a></span><span class="subnavLink"><a href="lists.php?id=<?php echo $id?>&t=2">Lists Following @<?php echo $id?></a></span>
+               <?php } else if ($type == 1) {?>
+               <span class="subnavLink"><a href="lists.php?t=0&id=<?php echo $id?>">Following Lists</a></span><span class="subnavNormal">All Lists</span><span class="subnavLink"><a href="lists.php?id=<?php echo $id?>&t=2">Lists Following @<?php echo $id?></a></span>
+               <?php } else {?>
+                       <span class="subnavLink"><a href="lists.php?t=0&id=<?php echo $id?>">Following Lists</a></span><span class="subnavLink"><a href="lists.php?id=<?php echo $id?>&t=1">All Lists</a></span><span class="subnavNormal">Lists Following @<?php echo $id?></span>
+               <?php }
+       } ?>
+    </div>
+    
+       <?php 
+               
+               $empty = count($lists) == 0? true: false;
+               if ($empty) {
+                       echo "<div id=\"empty\">No Tweet To Display</div>";
+               } else {
+                       $output = '<ol class="rank_list">';                     
+                       foreach ($lists as $list) {
+               
+                               $listurl = substr($list->uri,1);
+                               $user = $list->user;
+                               $listname = explode('/',$list->full_name);
+                               $mode = $list->mode == 'private' ? "Private" : "Public";
+                               
+                               $output .= "
+                               <li>
+                                       <span class=\"rank_img\"><img src=\"".getAvatar($user->profile_image_url)."\" /></span>
+                                       <div class=\"rank_content\" id=\"list{$list->id_str}\">
+                                               <span class=\"rank_num\"><span class=\"rank_name\"><a href=\"list.php?id=$listurl\"><em>$listname[0]/</em>$listname[1]</a></span></span>
+                                               <span class=\"rank_count\">Followers: {$list->subscriber_count}&nbsp;&nbsp;Members: {$list->member_count}&nbsp;&nbsp;$mode</span> 
+                               ";
+                               if ($list->description != '') $output .= "<span class=\"rank_description\">Description: $list->description</span>";
+                               if ($type == 0) $output .= "<span id=\"list_action\"><a id=\"btn\" href=\"javascript:void()\" class=\"unfollow_list\">Unfollow</a></span>";
+                               if ($type == 1 && $isSelf) $output .= "<span id=\"list_action\"><a id=\"btn\" href=\"javascript:void()\" class=\"edit_list\">Edit</a> <a id=\"btn\" href=\"javascript:void()\" class=\"delete_list\">Delete</a> <a id=\"btn\" href=\"javascript:void()\" class=\"add_member\">Add Members</a></span>";
+                               $output .= "
+                                       </div>
+                               </li>
+                               ";
+                       }
+                       
+                       $output .= "</ol>";
+                       
+                       echo $output;
+               }
+               
+       ?>
+       
+       <?php if ($isSelf && $type == 1) {?>
+           <a href="#" class="more round" id="list_create_btn" style="margin: 20px auto;">Create a new list</a>
+           <form method="POST" action="./lists.php?t=1" id="list_form">
+               <input type="hidden" name="list_spanid" value="" id="list_spanid" />
+               <input type="hidden" name="pre_list_name" value="" id="pre_list_name" />
+               <input type="hidden" name="is_edit" value="0" id="is_edit" />
+               <span><label for="list_name">List name</label><input type="text" name="list_name" id="list_name" /></span>
+               <span><label for="list_description">Description</label><textarea type="text" name="list_description" id="list_description"></textarea></span>
+               <span><label for="list_protect">Private</label><input type="checkbox" name="list_protect" id="list_protect"  />
+                       <a style="background: transparent url(img/sprite-icons.png) no-repeat scroll -272px -16px; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; text-decoration: none; height: 10px; float: right; position: relative; width: 9px; left: 3px; top: -160px;" title="Close" onclick="$('#list_form').slideToggle(300)" href="#"></a>
+                       <input type="submit" class="btn" id="list_submit" value="" />
+                       
+                       </span>
+               <span></span>
+           </form>
+           
+           
+       <?php }?>
+       
+       <div id="pagination">
+       <?php 
+           if ($type == 0 || $type == 2) {
+               if ($isSelf) {
+                               if ($prelist != 0) echo "<a id=\"less\" class=\"round more\" style=\"float: left;\" href=\"lists.php?t=$type&c=$prelist\">Back</a>";
+                               if ($nextlist != 0) echo "<a id=\"more\" class=\"round more\" style=\"float: right;\" href=\"lists.php?t=$type&c=$nextlist\">Next</a>";
+               } else {
+                               if ($prelist != 0) echo "<a id=\"less\" class=\"round more\" style=\"float: left;\" href=\"lists.php?id=$id&t=$type&c=$prelist\">Back</a>";
+                               if ($nextlist != 0) echo "<a id=\"more\" class=\"round more\" style=\"float: right;\" href=\"lists.php?id=$id&t=$type&c=$nextlist\">Next</a>";
+               }
+               }
+       ?>
+       </div>
+</div>
+
+<?php 
+       include ('inc/sidebar.php');
+       include ('inc/footer.php');
+?>
index adbb78c..38c823f 100644 (file)
--- a/login.php
+++ b/login.php
@@ -73,8 +73,7 @@ function register() {
 }
 </script>
 </head>
-<?php if(BASIC_AUTH) require ('basic_auth.php'); ?>
+
 <body class="form-container">
 <div class="clear rounded_5px" id="container">
  <div id="header">
@@ -117,7 +116,7 @@ function register() {
 </fieldset>
 </form>
 <div style="background: none repeat scroll 0% 0% transparent;" id="footer">
-<p>&copy; 2013 Contributors <?php if(isset($_COOKIE['twitese_name'])) echo 'and '.$_COOKIE['twitese_name'];?> &middot; <a href="http://code.google.com/p/embr/" target="_blank" title="Embr Open Source">Open Source</a></p>
+<p>&copy; 2013 Contributors <?php if(isset($_COOKIE['twitese_name'])) echo 'and '.$_COOKIE['twitese_name'];?> &middot; <a href="https://github.com/AstroProfundis/embrr" target="_blank" title="Embrr Open Source">Open Source</a></p>
 </div>
 </div>
 </body>
diff --git a/login_action.php b/login_action.php
deleted file mode 100644 (file)
index 49b6ae0..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-<?php \r
-       include ('lib/twitese.php');\r
-       $title = "Sign In";\r
-       include ('inc/header.php');\r
-       \r
-?>\r
-\r
-<div id="login_area">\r
-       <div id="error">\r
-\r
-<?php\r
-       if ( isset($_POST['username']) && isset($_POST['password']) ) {\r
-               $remember = isset($_POST['remember']) ? true : false;\r
-               $result = verify($_POST['username'], $_POST['password'], $remember);\r
-               if ($result) {\r
-                       header('location: all.php');\r
-               } else {\r
-                       echo "<p>Login failed. Please check your username and password.</p>";\r
-               }\r
-       } else {\r
-               echo "<p>Illegal request. Please go back.</p>";\r
-       }\r
-?>\r
-\r
-       </div>\r
-</div> \r
-\r
-<?php \r
-       include ('inc/footer.php');\r
-?>\r
index f0727fc..4eb5946 100644 (file)
@@ -1,28 +1,28 @@
-<?php \r
-       if(!isset($_SESSION)){\r
-               session_start();\r
-       }\r
-       $time = $_SERVER['REQUEST_TIME']-300;\r
-       setcookie('oauth_token',"",$time);\r
-       setcookie('oauth_token_secret',"",$time);\r
-       setcookie('user_id',"",$time);\r
-       setcookie('twitese_name',"",$time);\r
-       setcookie('friends_count',"",$time);\r
-       setcookie('statuses_count',"",$time);\r
-       setcookie('followers_count',"",$time);\r
-       setcookie('imgurl',"",$time);\r
-       setcookie('name',"",$time);\r
-       setcookie('listed_count',"",$time);\r
-       setcookie('recover',"",$time);\r
-       setcookie('homeInterval',"",$time);\r
-       setcookie('updatesInterval',"",$time);\r
-       setcookie('proxify',"",$time);  \r
-       setcookie('Bgimage',"",$time);\r
-       setcookie('BgColor',"",$time);\r
-       setcookie('Bgrepeat',"",$time);\r
-       setcookie('Tip_Title',"",$time);\r
-       setcookie('Tip_Content',"",$time);\r
-       setcookie('Tip_More',"",$time);\r
-       session_destroy();\r
-       header('location: login.php');\r
-?>\r
+<?php 
+       if(!isset($_SESSION)){
+               session_start();
+       }
+       $time = $_SERVER['REQUEST_TIME']-300;
+       setcookie('oauth_token',"",$time);
+       setcookie('oauth_token_secret',"",$time);
+       setcookie('user_id',"",$time);
+       setcookie('twitese_name',"",$time);
+       setcookie('friends_count',"",$time);
+       setcookie('statuses_count',"",$time);
+       setcookie('followers_count',"",$time);
+       setcookie('imgurl',"",$time);
+       setcookie('name',"",$time);
+       setcookie('listed_count',"",$time);
+       setcookie('recover',"",$time);
+       setcookie('homeInterval',"",$time);
+       setcookie('updatesInterval',"",$time);
+       setcookie('proxify',"",$time);  
+       setcookie('Bgimage',"",$time);
+       setcookie('BgColor',"",$time);
+       setcookie('Bgrepeat',"",$time);
+       setcookie('Tip_Title',"",$time);
+       setcookie('Tip_Content',"",$time);
+       setcookie('Tip_More',"",$time);
+       session_destroy();
+       header('location: login.php');
+?>
index 0e7483f..6121966 100644 (file)
 
        <?php 
                $t = getTwitter();
-               $p = 1;
-               if (isset($_GET['p'])) {
-                       $p = (int) $_GET['p'];
-                       if ($p <= 0) $p = 1;
-               }
+                $since_id = isset($_GET['since_id']) ? $_GET['since_id'] : false;
+                $max_id = isset($_GET['max_id']) ? $_GET['max_id'] : false;
        
                if ($isSentPage) {
-                       $messages = $t->sentDirectMessage($p);
+                       $messages = $t->sentDirectMessages($since_id, $max_id);
                } else {
-                       $messages = $t->directMessages($p);
+                       $messages = $t->directMessages($since_id, $max_id);
                }
                if ($messages === false) {
                        header('location: error.php');exit();
-               } 
-               $empty = count($messages) == 0? true: false;
-               if ($empty) {
-                       echo "<div id=\"empty\">No tweets to display.</div>";
+               }
+
+               $count_t = count($messages);
+               if ($count_t > 1) {
+                       $empty = 0; // 0 for not empty
+               } else if ($count_t < 1) {
+                       $empty = 1; // 1 for no tweet to display
+               } else {
+                       $empty = $t->http_code == 429 ? 2 : 0;
+               }
+
+               if ($empty == 1) {
+                       echo "<div id=\"empty\">No message to display.</div>";
+               } else if ($empty == 2) {
+                       echo "<div id=\"empty\">API quota is used out, please wait for a moment before next refresh.</div>";
                } else {
                        include ('lib/timeline_format.php');
                        $output = '<ol class="timeline" id="allMessage">';
                        
                        $output .= "</ol><div id=\"pagination\">";
                        
-                       
+                       $firstmsg = $messages[0]->id_str;
+                       $lastmsg = bcsub($messages[count($messages)-1]->id_str, "1");
                        if ($isSentPage) {
-                               if ($p >1) $output .= "<a id=\"more\" class=\"round more\" style=\"float: left;\" href=\"message.php?t=sent&p=" . ($p-1) . "\">Back</a>";
-                               if (!$empty) $output .= "<a id=\"more\" class=\"round more\" style=\"float: right;\" href=\"message.php?t=sent&p=" . ($p+1) . "\">Next</a>";
+                               $output .= "<a id=\"less\" class=\"round more\" style=\"float: left;\" href=\"message.php?t=sent&since_id=" . $firstmsg . "\">Back</a>";
+                               $output .= "<a id=\"more\" class=\"round more\" style=\"float: right;\" href=\"message.php?t=sent&max_id=" . $lastmsg . "\">Next</a>";
                        } else {
-                               if ($p >1) $output .= "<a id=\"more\" class=\"round more\" style=\"float: left;\" href=\"message.php?p=" . ($p-1) . "\">Back</a>";
-                               if (!$empty) $output .= "<a id=\"more\" class=\"round more\" style=\"float: right;\" href=\"message.php?p=" . ($p+1) . "\">Next</a>";
+                               $output .= "<a id=\"less\" class=\"round more\" style=\"float: left;\" href=\"message.php?since_id=" . $firstmsg ."\">Back</a>";
+                               $output .= "<a id=\"more\" class=\"round more\" style=\"float: right;\" href=\"message.php?max_id=" . $lastmsg ."\">Next</a>";
                        }
                        
                        $output .= "</div>";    
diff --git a/nexus.php b/nexus.php
deleted file mode 100644 (file)
index 87f5b3e..0000000
--- a/nexus.php
+++ /dev/null
@@ -1,150 +0,0 @@
-<?php\r
-       include ('lib/twitese.php');\r
-       $title = "Nexus";\r
-       include ('inc/header.php');     \r
-       if (!loginStatus()) header('location: login.php');      \r
-?>\r
-<style type="text/css">\r
-#analyze {\r
-display: block; \r
-float: left; \r
-width: 200px; \r
-margin-left: 145px; \r
-margin-top: 20px; \r
-height: 40px;\r
-background-color:#FFFFFF;\r
-background-image:url("../img/more.gif");\r
-background-position:left top;\r
-background-repeat:repeat-x;\r
-border-color:#DDDDDD #AAAAAA #AAAAAA #DDDDDD;\r
-border-style:solid;\r
-border-width:1px;\r
-color:#666666;\r
-display:block;\r
-font-family:Tahoma,Arial,sans-serif;\r
-font-size:14px;\r
-font-weight:700;\r
-letter-spacing:1px;\r
-line-height:1.5em;\r
-margin-bottom:6px;\r
-outline-style:none;\r
-outline-width:medium;\r
-text-align:center;\r
-text-shadow:1px 1px 1px #FFFFFF;\r
-}\r
-#analyze:hover {\r
-background-position:left -78px;\r
-border:1px solid #BBBBBB;\r
-text-decoration:none;\r
-}\r
-#analyze:active {\r
-background-position:left -38px;\r
-color:#666666;\r
-}\r
-#analyze.loading  {\r
-background-color:transparent;\r
-background-image:url("../img/ajax.gif");\r
-background-position:50% 50%;\r
-background-repeat:no-repeat;\r
-border:medium none;\r
-cursor:default !important;\r
-}\r
-#analyze::-moz-focus-inner {\r
-border:0 none;}\r
-#users  {\r
-box-shadow:0 2px 10px #333333; \r
--webkit-box-shadow: 0 2px 10px #333333;\r
--moz-box-shadow: 0 2px 10px #333333;\r
-background:url("../img/bg-front.gif") repeat-x scroll 0 bottom transparent;\r
-display:block;\r
-float:left;\r
-margin-bottom:10px;\r
-margin-left:25px;\r
-margin-top:25px;\r
-padding:15px 15px 20px 0;\r
-width:480px;\r
-}\r
-#users h2 {\r
-background:url("../img/nexus_logo.png") no-repeat scroll 0 0 transparent;\r
-color:#666666;\r
-height:44px;\r
-margin:0 0 0 15px;\r
-text-indent:-9999em;\r
-width:117px;\r
-}\r
-#descr {display: block; float: left; clear: both; text-shadow: 1px 1px rgb(238, 238, 238); margin: 10px 0 15px 15px; color: rgb(51, 51, 51);font-size:12px}\r
-.at_sym_1 {display: block; float: left; vertical-align: middle; clear: both; margin-top: 7px; font-size: 14px; margin-left: 55px; color: rgb(51, 51, 51);}\r
-.at_sym_2 {display: block; float: left; margin-left: 15px; vertical-align: middle; font-size: 14px; margin-top: 7px; color: rgb(51, 51, 51);}\r
-.and_sym {display: block; float: left; margin-left: 15px; vertical-align: middle; font-weight: bold; font-size: 14px; margin-top: 7px; color: rgb(102, 102, 102);}\r
-.user_input {\r
-border:1px solid #A7A6AA;\r
-color:#666666;\r
-display:block;\r
-float:left;\r
-font-family:tahoma;\r
-font-size:14px;\r
-font-weight:bold;\r
-letter-spacing:1px;\r
-margin-left:5px;\r
-margin-top:3px;\r
-padding:5px;\r
-vertical-align:top;\r
-width:130px;\r
-}\r
-#result {\r
-display:block;\r
-float:left;\r
-width:460px;\r
-height:200px;\r
-margin-left:20px;\r
-margin-top:10px;\r
-}\r
-.intro  {\r
-background:url("../img/nexus_intro.png") no-repeat scroll 0 0 transparent;\r
-}\r
-.sect {\r
-box-shadow:0px 0px 5px #c2c2c2; \r
--webkit-box-shadow: 0px 0px 5px #c2c2c2;\r
--moz-box-shadow: 0px 0px 5px #c2c2c2;\r
-display: block; \r
-float: left; \r
-height: 0px; \r
-margin-left: 15px; \r
-color: #EEEEEE; \r
-width: 464px; \r
-margin-top: 10px;\r
-}\r
-#result h3  {\r
-color:red;\r
-display:block;\r
-font-size:20px;\r
-margin-top:90px;\r
-margin-left:0 !important;\r
-text-align:center;\r
-}\r
-</style>\r
-<script type="text/javascript" src="js/nexus.js"></script>\r
-<div id="statuses" class="column round-left">\r
-<div class="round" id="users">\r
-<h2>\r
-<span>Nexus</span>\r
-</h2>\r
-<hr class="sect" />\r
-<p id="result" class="intro"></p>\r
-<p id="descr">Rabr Nexus is a tool helps you analyze relationships between you or the others.</p>\r
-<label class="at_sym_1">@</label>\r
-<input type="text" id="user_1" name="user_1" class="user_input" onfocus="this.select()" onmouseover="this.focus()" value="<?php if (isset($_GET['target'])) echo $_GET['target'] ?>" />\r
-<label class="and_sym">and</label>\r
-<label class="at_sym_2">@</label>\r
-<input type="text" id="user_2" name="user_2" class="user_input" onfocus="this.select()" onmouseover="this.focus()" value="<?php if (isset($_GET['source'])) echo $_GET['source'] ?>"/>\r
-<input type="submit" id="analyze" class="round" value="Analyze" />\r
-</div>\r
-</div>\r
-\r
-<?php \r
-       include ('inc/sidebar.php');\r
-?>\r
-\r
-<?php \r
-       include ('inc/footer.php');\r
-?>\r
index eae87c5..e0b09f5 100644 (file)
--- a/oauth.php
+++ b/oauth.php
-<?php\r
-       /* Start session and load lib */\r
-       if(!isset($_SESSION)){\r
-               session_start();\r
-       }\r
-       include_once('lib/twitese.php');\r
-       foreach ($AUTH_ID as &$id) {\r
-               $id = strtoupper($id);\r
-       }\r
-       if (isset($_REQUEST['oauth_token'])) {\r
-               if($_SESSION['oauth_token'] !== $_REQUEST['oauth_token']) {\r
-                       $_SESSION['oauth_status'] = 'oldtoken';\r
-                       session_destroy();\r
-                       header('Location: login.php?oauth=old');exit();\r
-               }else{\r
-                       /* Create TwitteroAuth object with app key/secret and token key/secret from default phase */\r
-                       $connection = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET, $_SESSION['oauth_token'], $_SESSION['oauth_token_secret']);\r
-\r
-                       /* Request access tokens from twitter */\r
-                       $access_token = $connection->getAccessToken($_REQUEST['oauth_verifier']);\r
-\r
-                       /* Save the access tokens. Normally these would be saved in a database for future use. */\r
-                       $_SESSION['access_token'] = $access_token;\r
-\r
-                       /* Remove no longer needed request tokens */\r
-                       unset($_SESSION['oauth_token']);\r
-                       unset($_SESSION['oauth_token_secret']);\r
-\r
-                       /* If HTTP response is 200 continue otherwise send to connect page to retry */\r
-                       if (200 == $connection->http_code) {\r
-                               /* The user has been verified and the access tokens can be saved for future use */\r
-                               $_SESSION['login_status'] = 'verified';\r
-                               $t = getTwitter();\r
-                               $user = $t->veverify();\r
-                               \r
-                               if ( ID_AUTH && (!in_array(strtoupper($t->screen_name),$AUTH_ID)) ){\r
-                                       session_destroy();\r
-                                       header("Location: login.php?oauth=denied");exit;\r
-                               }\r
-                               /* And set new cookies */\r
-                               $time = $_SERVER['REQUEST_TIME']+3600*24*365;\r
-                               setEncryptCookie('oauth_token', $access_token['oauth_token'], $time, '/');\r
-                               setEncryptCookie('oauth_token_secret', $access_token['oauth_token_secret'], $time, '/');\r
-                               setEncryptCookie('user_id', $access_token['user_id'], $time, '/');\r
-                               setEncryptCookie('twitese_name', $t->screen_name, $time, '/');\r
-                               refreshProfile();\r
-                               \r
-                               if(!isset($_COOKIE['showpic'])){\r
-                                       setcookie('showpic', 'true', $time, '/');\r
-                               }\r
-                               if(!isset($_COOKIE['mediaPre'])){\r
-                                       setcookie('mediaPre', 'true', $time, '/');\r
-                               }\r
-                               if(!isset($_COOKIE['loginPage'])) {\r
-                                       header('Location: index.php');exit();\r
-                               } else {\r
-                                       $scheme = (!isset($_SERVER['HTTPS']) || $_SERVER['HTTPS'] != "on") ? 'http' : 'https';\r
-                                       $port = $_SERVER['SERVER_PORT'] != 80 ? ':'.$_SERVER['SERVER_PORT'] : '';\r
-                                       $login_page = $scheme . '://' . $_SERVER['HTTP_HOST'] . $port . $_COOKIE['loginPage'];\r
-                                       header('Location: '. $login_page);exit();\r
-                               }\r
-                               \r
-                       } else {\r
-                               session_destroy();\r
-                               header('Location: login.php?oauth=error');exit();\r
-                       }\r
-               }\r
-       }else{\r
-               /* Create TwitterOAuth object and get request token */\r
-               $connection = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET);\r
-               \r
-               /* Get callback URL */\r
-               $scheme = (!isset($_SERVER['HTTPS']) || $_SERVER['HTTPS'] != "on") ? 'http' : 'https';\r
-               $port = $_SERVER['SERVER_PORT'] != 80 ? ':'.$_SERVER['SERVER_PORT'] : '';\r
-               $oauth_callback = $scheme . '://' . $_SERVER['HTTP_HOST'] . $port . $_SERVER['REQUEST_URI'];\r
-       \r
-               /* Get request token */\r
-               $request_token = $connection->getRequestToken($oauth_callback);\r
-\r
-               /* Save request token to session */\r
-               $_SESSION['oauth_token'] = $token = $request_token['oauth_token'];\r
-               $_SESSION['oauth_token_secret'] = $request_token['oauth_token_secret'];\r
-\r
-               /* If last connection fails don't display authorization link */\r
-               switch ($connection->http_code) {\r
-                       case 200:\r
-                               \r
-                               $time = $_SERVER['REQUEST_TIME']+3600*24*365;\r
-                               $url = $connection->getAuthorizeURL($token);\r
-                               if ( isset($_POST['proxify']) ) { \r
-                                       $raw= processCurl($url);\r
-                                       $new = str_replace('https://api.twitter.com/oauth/authorize', 'authorize.php',$raw); \r
-                                       $new = str_replace('html { display:none; }','.error,a.sign-up,input[name="deny"]{display:none !important;}',$new);\r
-                                       $new = preg_replace('/https?:\/\/\w+([0-9])\.twimg\.com/i','https://s3.amazonaws.com/twitter_production',$new);\r
-                               echo $new;\r
-                               } //OAuth Proxy End\r
-                               else {\r
-                                       header('Location: ' . $url); \r
-                               }\r
-                               break;\r
-                       default:\r
-                               header('Location: error.php?t=1');exit();\r
-                               break;\r
-               }\r
-       }\r
-?>
\ No newline at end of file
+<?php
+       /* Start session and load lib */
+       if(!isset($_SESSION)){
+               session_start();
+       }
+       include_once('lib/twitese.php');
+       foreach ($AUTH_ID as &$id) {
+               $id = strtoupper($id);
+       }
+       if (isset($_REQUEST['oauth_token'])) {
+               if($_SESSION['oauth_token'] !== $_REQUEST['oauth_token']) {
+                       $_SESSION['oauth_status'] = 'oldtoken';
+                       session_destroy();
+                       header('Location: login.php?oauth=old');exit();
+               }else{
+                       /* Create TwitteroAuth object with app key/secret and token key/secret from default phase */
+                       $connection = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET, $_SESSION['oauth_token'], $_SESSION['oauth_token_secret']);
+
+                       /* Request access tokens from twitter */
+                       $access_token = $connection->getAccessToken($_REQUEST['oauth_verifier']);
+
+                       /* Save the access tokens. Normally these would be saved in a database for future use. */
+                       $_SESSION['access_token'] = $access_token;
+
+                       /* Remove no longer needed request tokens */
+                       unset($_SESSION['oauth_token']);
+                       unset($_SESSION['oauth_token_secret']);
+
+                       /* If HTTP response is 200 continue otherwise send to connect page to retry */
+                       if (200 == $connection->http_code) {
+                               /* The user has been verified and the access tokens can be saved for future use */
+                               $_SESSION['login_status'] = 'verified';
+                               $t = getTwitter();
+                               $user = $t->veverify();
+                               
+                               if ( ID_AUTH && (!in_array(strtoupper($t->screen_name),$AUTH_ID)) ){
+                                       session_destroy();
+                                       header("Location: login.php?oauth=denied");exit;
+                               }
+                               /* And set new cookies */
+                               $time = $_SERVER['REQUEST_TIME']+3600*24*365;
+                               setEncryptCookie('oauth_token', $access_token['oauth_token'], $time, '/');
+                               setEncryptCookie('oauth_token_secret', $access_token['oauth_token_secret'], $time, '/');
+                               setEncryptCookie('user_id', $access_token['user_id'], $time, '/');
+                               setEncryptCookie('twitese_name', $t->screen_name, $time, '/');
+                               refreshProfile();
+                               
+                               if(!isset($_COOKIE['showpic'])){
+                                       setcookie('showpic', 'true', $time, '/');
+                               }
+                               if(!isset($_COOKIE['shownick'])){
+                                       setcookie('shownick', 'false', $time, '/');
+                               }
+                               if(!isset($_COOKIE['mediaPre'])){
+                                       setcookie('mediaPre', 'true', $time, '/');
+                               }
+                               if(!isset($_COOKIE['loginPage'])) {
+                                       header('Location: index.php');exit();
+                               } else {
+                                       $scheme = (!isset($_SERVER['HTTPS']) || $_SERVER['HTTPS'] != "on") ? 'http' : 'https';
+                                       $port = $_SERVER['SERVER_PORT'] != 80 ? ':'.$_SERVER['SERVER_PORT'] : '';
+                                       $login_page = $scheme . '://' . $_SERVER['HTTP_HOST'] . $port . $_COOKIE['loginPage'];
+                                       header('Location: '. $login_page);exit();
+                               }
+                               
+                       } else {
+                               session_destroy();
+                               header('Location: login.php?oauth=error');exit();
+                       }
+               }
+       }else{
+               /* Create TwitterOAuth object and get request token */
+               $connection = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET);
+               
+               /* Get callback URL */
+               $scheme = (!isset($_SERVER['HTTPS']) || $_SERVER['HTTPS'] != "on") ? 'http' : 'https';
+               $port = $_SERVER['SERVER_PORT'] != 80 ? ':'.$_SERVER['SERVER_PORT'] : '';
+               $oauth_callback = $scheme . '://' . $_SERVER['HTTP_HOST'] . $port . $_SERVER['REQUEST_URI'];
+       
+               /* Get request token */
+               $request_token = $connection->getRequestToken($oauth_callback);
+
+               /* Save request token to session */
+               $_SESSION['oauth_token'] = $token = $request_token['oauth_token'];
+               $_SESSION['oauth_token_secret'] = $request_token['oauth_token_secret'];
+
+               /* If last connection fails don't display authorization link */
+               switch ($connection->http_code) {
+                       case 200:
+                               
+                               $time = $_SERVER['REQUEST_TIME']+3600*24*365;
+                               $url = $connection->getAuthorizeURL($token);
+                               if ( isset($_POST['proxify']) ) { 
+                                       $raw= processCurl($url);
+                                       $new = str_replace('https://api.twitter.com/oauth/authorize', 'authorize.php',$raw); 
+                                       $new = str_replace('html { display:none; }','.error,a.sign-up,input[name="deny"]{display:none !important;}',$new);
+                                       $new = preg_replace('/https?:\/\/\w+([0-9])\.twimg\.com/i','https://s3.amazonaws.com/twitter_production',$new);
+                               echo $new;
+                               } //OAuth Proxy End
+                               else {
+                                       header('Location: ' . $url); 
+                               }
+                               break;
+                       default:
+                               header('Location: error.php?t=1');exit();
+                               break;
+               }
+       }
+?>
index b88cde9..c6e7b57 100644 (file)
@@ -1,58 +1,63 @@
-<?php\r
-       include ('lib/twitese.php');\r
-       $title = "Profile";\r
-       include ('inc/header.php');\r
-       \r
-       if (!loginStatus()) header('location: login.php');\r
-?>\r
-\r
-<script src="js/btns.js"></script>\r
-\r
-<div id="statuses" class="column round-left">\r
-\r
-       <?php include('inc/sentForm.php');\r
-               $t = getTwitter();\r
-               $p = 1;\r
-               if (isset($_GET['p'])) {\r
-                       $p = (int) $_GET['p'];\r
-                       if ($p <= 0) $p = 1;\r
-               }\r
-       \r
-               $statuses = $t->userTimeline($p);\r
-               if ($statuses === false) {\r
-                       header('location: error.php');exit();\r
-               } \r
-               $empty = count($statuses) == 0? true: false;\r
-               if ($empty) {\r
-                       echo "<div id=\"empty\">No tweet to display.</div>";\r
-               } else {\r
-                       include_once('lib/timeline_format.php');\r
-                       $output = '<ol class="timeline" id="allTimeline">';\r
-\r
-                       foreach ($statuses as $status) {\r
-                               if (isset($status->retweeted_status)) {\r
-                                       $output .= format_retweet($status,true);\r
-                               } else { \r
-                                       $output .= format_timeline($status,$t->username);\r
-                               }\r
-                       }\r
-\r
-                       $output .= "</ol><div id=\"pagination\">";\r
-\r
-                       if ($p >1) $output .= "<a id=\"more\" class=\"round more\" style=\"float: left;\" href=\"profile.php?p=" . ($p-1) . "\">Back</a>";\r
-                       if (!$empty) $output .= "<a id=\"more\" class=\"round more\" style=\"float: right;\" href=\"profile.php?p=" . ($p+1) . "\">Next</a>";\r
-\r
-                       $output .= "</div>";\r
-\r
-                       echo $output;\r
-               }\r
-\r
-\r
-\r
-?>\r
-</div>\r
-\r
-<?php \r
-               include ('inc/sidebar.php');\r
-               include ('inc/footer.php');\r
-?>\r
+<?php
+       include ('lib/twitese.php');
+       $title = "Profile";
+       include ('inc/header.php');
+       
+       if (!loginStatus()) header('location: login.php');
+?>
+
+<script src="js/btns.js"></script>
+
+<div id="statuses" class="column round-left">
+
+       <?php include('inc/sentForm.php');
+               $t = getTwitter();
+               $since_id = isset($_GET['since_id']) ? $_GET['since_id'] : false;
+               $max_id = isset($_GET['max_id']) ? $_GET['max_id'] : false;
+       
+               $statuses = $t->userTimeline(false, $since_id, $max_id);
+               if ($statuses === false) {
+                       header('location: error.php');exit();
+               } 
+               $empty = count($statuses) == 0? true: false;
+               if ($empty) {
+                       echo "<div id=\"empty\">No tweet to display.</div>";
+               } else if ($t->http_code == 429) {
+                       echo "<div id=\"empty\">API quota is used out, please wait for a moment before next refresh.</div>";
+               } else {
+                       include_once('lib/timeline_format.php');
+                       $output = '<ol class="timeline" id="allTimeline">';
+
+                       $firstid = false;
+                       $lastid = false;
+                       foreach ($statuses as $status) {
+                               if (isset($status->retweeted_status)) {
+                                       $output .= format_retweet($status,true);
+                               } else { 
+                                       $output .= format_timeline($status,$t->username);
+                               }
+                               if(!$firstid)
+                                       $firstid = $status->id_str;
+                               $lastid = $status->id_str;
+                       }
+                       $lastid = bcsub($lastid, "1");
+
+                       $output .= "</ol><div id=\"pagination\">";
+
+                       $output .= "<a id=\"less\" class=\"round more\" style=\"float: left;\" href=\"profile.php?since_id={$firstid}\">Back</a>";
+                       $output .= "<a id=\"more\" class=\"round more\" style=\"float: right;\" href=\"profile.php?max_id={$lastid}\">Next</a>";
+
+                       $output .= "</div>";
+
+                       echo $output;
+               }
+
+
+
+?>
+</div>
+
+<?php 
+               include ('inc/sidebar.php');
+               include ('inc/footer.php');
+?>
diff --git a/rank.php b/rank.php
deleted file mode 100644 (file)
index e405de7..0000000
--- a/rank.php
+++ /dev/null
@@ -1,68 +0,0 @@
-<?php\r
-       include ('lib/twitese.php');\r
-       $title = "Ranking";\r
-       include ('inc/header.php');\r
-       \r
-       if (!loginStatus()) header('location: login.php');\r
-?>\r
-\r
-<script type="text/javascript" src="js/profile.js"></script>\r
-\r
-<div id="statuses" class="column round-left">\r
-\r
-       <h2>Rankings</h2>\r
-       <div class="clear"></div>\r
-       \r
-       <?php \r
-               $t = getTwitter();\r
-               $p = 1;\r
-               if (isset($_GET['p'])) {\r
-                       $p = (int) $_GET['p'];\r
-                       if ($p <= 0) $p = 1;\r
-               }\r
-               $num = 20*($p-1);\r
-       \r
-               $users = $t->rank($p);\r
-               if ($users === false) {\r
-                       header('location: error.php');\r
-               } \r
-               $empty = count($users) == 0? true: false;\r
-               if ($empty) {\r
-                       echo "<div id=\"empty\">No tweet to display.</div>";\r
-               } else {\r
-                       $output = '<ol class="rank_list">';\r
-                       \r
-                       foreach ($users as $user) {\r
-                               $num++; \r
-                               $output .= "\r
-                               <li>\r
-                                       <span class=\"rank_img\"><a href=\"user.php?id=$user->screen_name\"><img src=\"$user->profile_img_url\" /></a></span>\r
-                                       <div class=\"rank_content\">\r
-                                               <span class=\"rank_num\">No. $num <span class=\"rank_name\"><a href=\"user.php?id=$user->screen_name\">$user->name</a></span><span class=\"rank_screenname\"> ($user->screen_name)</span></span>\r
-                                               <span class=\"rank_count\">Followers:$user->followers_count  Friends:$user->friends_count  Tweets:$user->statuses_count</span>\r
-                                               <span class=\"rank_description\">Bio:$user->description</span>\r
-                                       </div>\r
-                               </li>\r
-                               ";\r
-                       }\r
-                       \r
-                       $output .= "</ol><div id=\"pagination\">";\r
-                       \r
-                       if ($p >1) $output .= "<a id=\"more\" class=\"round more\" style=\"float: left;\" href=\"rank.php?p=" . ($p-1) . "\">Back</a>";\r
-                       if (!$empty) $output .= "<a id=\"more\" class=\"round more\" style=\"float: right;\" href=\"rank.php?p=" . ($p+1) . "\">Next</a>";\r
-                       \r
-                       $output .= "</div>";\r
-                       \r
-                       echo $output;\r
-               }\r
-               \r
-       ?>\r
-</div>\r
-\r
-<?php \r
-       include ('inc/sidebar.php');\r
-?>\r
-\r
-<?php \r
-       include ('inc/footer.php');\r
-?>\r
index c88b949..a7b550d 100644 (file)
@@ -1,50 +1,62 @@
-<?php\r
-       include ('lib/twitese.php');\r
-       $title = "Replies";\r
-       include ('inc/header.php');\r
-       if (!loginStatus()) header('location: login.php');\r
-?>\r
-\r
-<script src="js/btns.js"></script>\r
-\r
-<div id="statuses" class="column round-left">\r
-<?php \r
-       include('inc/sentForm.php');\r
-       include('lib/timeline_format.php');\r
-               $t = getTwitter();\r
-               $p = 1;\r
-               if (isset($_GET['p'])) {\r
-                       $p = (int) $_GET['p'];\r
-                       if ($p <= 0) $p = 1;\r
-               }\r
-       \r
-               $statuses = $t->replies($p);\r
-               if ($statuses === false) {\r
-                       header('location: error.php');exit();\r
-               } \r
-               $empty = count($statuses) == 0? true: false;\r
-               if ($empty) {\r
-                       echo "<div id=\"empty\">No tweet to display.</div>";\r
-               } else {\r
-                       $output = '<ol class="timeline" id="allTimeline">';\r
-                       \r
-                       foreach ($statuses as $status) {\r
-                               $output .= format_timeline($status,$t->username);\r
-                       }\r
-                       \r
-                       $output .= "</ol><div id=\"pagination\">";\r
-                       \r
-                       if ($p >1) $output .= "<a id=\"more\" class=\"round more\" style=\"float: left;\" href=\"replies.php?p=" . ($p-1) . "\">Back</a>";\r
-                       if (!$empty) $output .= "<a id=\"more\" class=\"round more\" style=\"float: right;\" href=\"replies.php?p=" . ($p+1) . "\">Next</a>";\r
-                       \r
-                       $output .= "</div>";\r
-                       \r
-                       echo $output;\r
-               }\r
-       ?>\r
-</div>\r
-\r
-<?php \r
-       include ('inc/sidebar.php');\r
-       include ('inc/footer.php');\r
-?>\r
+<?php
+       include ('lib/twitese.php');
+       $title = "Replies";
+       include ('inc/header.php');
+       if (!loginStatus()) header('location: login.php');
+?>
+
+<script src="js/btns.js"></script>
+
+<div id="statuses" class="column round-left">
+<?php 
+       include('inc/sentForm.php');
+       include('lib/timeline_format.php');
+               $t = getTwitter();
+               $since_id = isset($_GET['since_id']) ? $_GET['since_id'] : false;
+               $max_id = isset($_GET['max_id']) ? $_GET['max_id'] : false;
+       
+               $statuses = $t->replies($since_id, $max_id);
+               if ($statuses === false) {
+                       header('location: error.php');exit();
+               } 
+
+               $count_t = count($statuses);
+               if ($count_t > 1) {
+                       $empty = 0; // 0 for not empty
+               } else if ($count_t < 1) {
+                       $empty = 1; // 1 for no tweets to display
+               } else {
+                       $empty = $t->http_code == 429 ? 2 : 0; // 2 for API outage
+               }
+               if ($empty == 1) {
+                       echo "<div id=\"empty\">No tweet to display.</div>";
+               } else if ($empty == 2) {
+                       echo "<div id=\"empty\">API quota is used out, please wait for a moment before next refresh.</div>";
+               } else {
+                       $output = '<ol class="timeline" id="allTimeline">';
+                       
+                       $firstid = false;
+                       $lastid = false;
+                       foreach ($statuses as $status) {
+                               if (!$firstid) $firstid = $status->id_str;
+                               $lastid = $status->id_str;
+                               $output .= format_timeline($status,$t->username);
+                       }
+                       $lastid = bcsub($lastid, "1");
+                       
+                       $output .= "</ol><div id=\"pagination\">";
+                       
+                       $output .= "<a id=\"less\" class=\"round more\" style=\"float: left;\" href=\"replies.php?since_id=" . $firstid . "\">Back</a>";
+                       $output .= "<a id=\"more\" class=\"round more\" style=\"float: right;\" href=\"replies.php?max_id=" . $lastid . "\">Next</a>";
+                       
+                       $output .= "</div>";
+                       
+                       echo $output;
+               }
+       ?>
+</div>
+
+<?php 
+       include ('inc/sidebar.php');
+       include ('inc/footer.php');
+?>
index 3e86cf3..46e73ad 100644 (file)
@@ -1,39 +1,46 @@
-<?php\r
-       include_once('lib/twitese.php');\r
-       $title = "Retweets";\r
-       include_once('inc/header.php');\r
-       include_once('lib/timeline_format.php');\r
-       if (!loginStatus()) header('location: login.php');\r
-\r
-       $type = 'retweets';\r
-       $page = isset($_GET['p']) ? $_GET['p'] : 1;\r
-       $count = isset($_GET['count']) ? $_GET['count'] : 20;\r
-       $since_id = isset($_GET['since']) ? $_GET['since'] : false;\r
-       $max_id = isset($_GET['maxid']) ? $_GET['maxid'] : false;\r
-\r
-       $t = getTwitter();\r
-       $retweets = $t->retweets_of_me($page, $count, $since_id, $max_id);\r
-       echo '<div id="statuses" class="column round-left">';\r
-       include_once('inc/sentForm.php');\r
-       $html = '<script src="js/btns.js"></script>\r
-       <style>\r
-       .big-retweet-icon{display:none}\r
-       </style>';\r
-       $html .='<div class="clear"></div>';\r
-       $empty = count($retweets) == 0? true: false;\r
-       if ($empty) {\r
-               $html .= "<div id=\"empty\">No retweets to display.</div>";\r
-       } else {\r
-               $html .= '<ol class="timeline" id="allTimeline">';\r
-               foreach($retweets as $retweet){\r
-                       $html .= format_retweet_of_me($retweet);\r
-               }\r
-               $html .= '</ol><div id="pagination">';\r
-                       if ($page >1) $html .= "<a id=\"more\" class=\"round more\" style=\"float: left;\" href=\"retweets.php?p=" . ($page-1) . "\">Back</a>";\r
-                       if (!$empty) $html .= "<a id=\"more\" class=\"round more\" style=\"float: right;\" href=\"retweets.php?p=" . ($page+1) . "\">Next</a>";\r
-               $html .= "</div>";\r
-       }\r
-       echo $html;\r
-       include_once('inc/sidebar.php');\r
-       include_once('inc/footer.php');\r
-?>\r
+<?php
+       include_once('lib/twitese.php');
+       $title = "Retweets";
+       include_once('inc/header.php');
+       include_once('lib/timeline_format.php');
+       if (!loginStatus()) header('location: login.php');
+
+       $count = isset($_GET['count']) ? $_GET['count'] : 20;
+       $since_id = isset($_GET['since_id']) ? $_GET['since_id'] : false;
+       $max_id = isset($_GET['max_id']) ? $_GET['max_id'] : false;
+
+       $t = getTwitter();
+
+       $retweets = $t->retweets_of_me($count, $since_id, $max_id);
+
+       echo '<div id="statuses" class="column round-left">';
+       include_once('inc/sentForm.php');
+       $html = '<script src="js/btns.js"></script>
+       <style>
+       .big-retweet-icon{display:none}
+       </style>';
+       $html .='<div class="clear"></div>';
+       $empty = count($retweets) == 0? true: false;
+       if ($empty) {
+               $html .= "<div id=\"empty\">No retweet to display.</div>";
+       } else if ($t->http_code == 429) {
+               $html .= "<div id=\"empty\">API quota is used out, please wait for a moment before next refresh.</div>";
+       } else {
+               $html .= '<ol class="timeline" id="allTimeline">';
+               $firstid = false;
+               $lastid = false;
+               foreach($retweets as $retweet){
+                       if (!$firstid) $firstid = $retweet->id_str;
+                       $lastid = $retweet->id_str;
+                       $html .= format_retweet_of_me($retweet);
+               }
+               $lastid = bcsub($lastid, "1");
+               $html .= '</ol><div id="pagination">';
+                       $html .= "<a id=\"less\" class=\"round more\" style=\"float: left;\" href=\"retweets.php?since_id={$firstid}\">Back</a>";
+                       $html .= "<a id=\"more\" class=\"round more\" style=\"float: right;\" href=\"retweets.php?max_id={$lastid}\">Next</a>";
+               $html .= "</div>";
+       }
+       echo $html;
+       include_once('inc/sidebar.php');
+       include_once('inc/footer.php');
+?>
index 1011803..274a7c4 100644 (file)
@@ -6,22 +6,29 @@
        $title = "Search";
        include ('inc/header.php');
 
-       function getSearch($query, $max_id_str){
-               GLOBAL $output;
+       function getSearch($query, $sinceid, $maxid){
                $t = getTwitter();
-               $result = $t->search($query, $max_id_str);
-               $statuses = $result->statuses;
-               $max_id_str = end($statuses)->id_str;
-               $resultCount = count($statuses);
+               $answer = $t->search($query,$sinceid,$maxid);
+
+               $resultCount = count($answer->statuses);
                if ($resultCount <= 0) {
                        echo "<div id=\"empty\">No tweet to display.</div>";
                } else {
                        include_once('lib/timeline_format.php');
                        $output = '<ol class="timeline" id="allTimeline">';
-                       foreach ($statuses as $status) {
-                               $output .= format_timeline($status, $t->username);
+                       foreach ($answer->statuses as $status) {
+                               if (isset($status->retweeted_status)) {
+                                        $output .= format_retweet($status);
+                                } else {
+                                        $output .= format_timeline($status,$t->username);
+                                }
                        }
-                       $output .= "</ol><div id=\"pagination\"><a id=\"more\" class=\"round more\" style=\"float: right;\" href=\"search.php?q=".urlencode($query)."&maxid=" . $max_id_str . "\">Next</a></div>";
+                       $output .= "</ol><div id=\"pagination\">";
+
+                       $next_results = isset($answer->search_metadata->next_results) ? $answer->search_metadata->next_results : false;
+                       if ($next_results) $output .= "<a id=\"more\" class=\"round more\" style=\"float: right;\" href=\"search.php". $next_results ."\">Next</a>";
+                       $output .= "</div>";
+                       echo $output;
                }
        }
 
 <div id="statuses" class="column round-left">
 
        <form action="search.php" method="get" id="search_form">
-               <input type="text" name="q" id="query" value="<?php echo $_GET['q'] ?>" />
-               <input type="submit" class="more round" style="width: 103px; margin-left: 10px; display: block; float: left; height: 34px; font-family: tahoma; color: rgb(51, 51, 51);" value="Search">
+               <input type="text" name="q" id="query" value="<?php echo $_GET['q'] ?>" autocomplete="off" />
+               <input type="submit" class="more round" style="width: 73px; margin-left: 10px; display: block; float: left; height: 34px; font-family: tahoma; color: rgb(51, 51, 51);" value="Search">
+               <input type="button" class="more round" style="width: 73px; margin-left: 10px; display: block; float: right; height: 34px; font-family: tahoma; color: rgb(51, 51, 51);" value="Save" id="btn_savesearch">
        </form>
 <?php
-       $p = 1;
+       $sinceid = false;
+       $maxid = false;
+       if (isset($_GET['since_id'])) {
+               $sinceid = $_GET['since_id'];
+       }
        if (isset($_GET['max_id'])) {
-               $max_id = $_GET['max_id'];
-       } else {
-               $max_id = false;
+               $maxid = $_GET['max_id'];
        }
-       $output = '';
        if (isset($_GET['q'])) {
                $q = $_GET['q'];
-               getSearch($q, $max_id);
+               getSearch($q, $sinceid, $maxid);
        }
-       echo $output;
 ?>
 </div>
 
index 1f35604..2ea1e59 100644 (file)
                                <fieldset class="settings">
                                <legend>Avatar</legend>
                                <ol>
-                               <li style="display:inline-block"><img src="<?php echo isset($_COOKIE['imgurl']) ? $_COOKIE['imgurl'] : getAvatar($user->profile_image_url)?>"></img></li>
+                               <li style="display:inline-block"><img src="<?php echo isset($_COOKIE['imgurl']) ? $_COOKIE['imgurl'] : getAvatar($user->profile_image_url)?>" id="avatarimg"></img></li>
                                <ol style="margin-left:29px">
                                        <li><input type="file" name="image" id="profile_image"/></li>
                                        <li><input type="submit" id="AvatarUpload" class="btn" value="Upload"/><small style="margin-left:10px;vertical-align: middle;">BMP,JPG or PNG accepted, less than 800K.</small></li>
                                </ol></ol>
                                </fieldset>
                        </form>
+                       <form id="setting_form" action="ajax/uploadImage.php?do=background" method="post" enctype="multipart/form-data">
+                               <fieldset class="settings">
+                               <legend>Background</legend>
+                               <ol>
+                               <li style="display:inline-block"><img src="<?php echo getAvatar($user->profile_background_image_url)?>" id="backgroundimg" style="max-width: 460px;"></img></li>
+                               <li><input type="file" name="image" id="profile_background"/></li>
+                               <li><input type="submit" id="BackgroundUpload" class="btn" value="Upload"/><small style="margin-left:10px;vertical-align: middle;">BMP,JPG or PNG accepted, less than 800K.</small></li>
+                               <li>
+                               <input id="tile" type="checkbox" <?php echo $user->profile_background_tile ? 'checked="checked"' : '' ?> />
+                               <label>Tile the profile background</label>
+                               </li>
+                               </ol>
+                               </fieldset>
+                       </form>
                        <form id="setting_form" action="ajax/updateProfile.php" method="post">
                                <fieldset class="settings">
                                <legend>Literature</legend>
                                <table id="setting_table">
                                <tr>
-                               <td class="setting_title">Name</td>
+                               <td class="setting_title">Name</td>
                                <td><input class="setting_input" type="text" name="name" value="<?php echo isset($user->name) ? $user->name : ''?>" /></td>
                                </tr>
                                <tr>
-                               <td class="setting_title">URL:</td>
-                               <td><input class="setting_input" type="text" name="url" value="<?php echo isset($user->url) ? $user->url : '' ?>" /></td>
+                               <td class="setting_title">URL: </td>
+                               <td><input class="setting_input" type="text" name="url" value="<?php
+                       if (!isset($user->url))
+                               echo '';
+                       else {
+                               $hops = array();
+                               $newurl = expandRedirect($user->url, $hops);
+                               echo $newurl;
+                       }
+               ?>" /></td>
                                </tr>
                                <tr>
-                               <td class="setting_title">Location</td>
+                               <td class="setting_title">Location</td>
                                <td><input class="setting_input" type="text" name="location" value="<?php echo isset($user->location) ? $user->location : '' ?>" /></td>
                                </tr>
                                <tr>
-                               <td class="setting_title">Bio</td><td><small style="margin-left:5px;vertical-align: top;">*Max 160 chars</small></td>
+                               <td class="setting_title">Bio</td><td><small style="margin-left:5px;vertical-align: top;">*Max 160 chars</small></td>
                                </tr><tr>
                                <td></td>
                                <td><textarea id="setting_text" name="description"><?php echo isset($user->description) ? $user->description : '' ?></textarea></td>
 
                        <label>Home Page</label>
                        <select id="homeInterval" name="homeInterval" value="<?php echo getCookie('homeInterval')?>">
-                               <option value="0.5">30 sec</option>
-                               <option value="1" selected="selected">1 min(Default)</option>
+                               <option value="1">1 min</option>
+                               <option value="2" selected="selected">2 min (Default)</option>
                                <option value="3">3 min</option>
                                <option value="5">5 min</option>
                                <option value="10">10 min</option>
                        </select>
                        <label>Updates Page</label>
                        <select id="updatesInterval" name="updatesInterval" value="<?php echo getCookie('updatesInterval')?>">
-                               <option value="0.5">30 sec</option>
                                <option value="1">1 min</option>
-                               <option value="3" selected="selected">3 min(Default)</option>
+                               <option value="2">2 min</option>
+                               <option value="3" selected="selected">3 min (Default)</option>
                                <option value="5">5 min</option>
                                <option value="10">10 min</option>
                                <option value="0">Never</option>
                        <label>Use twitter account background</label>
                        
                        <br /><br />
+
+                       <input id="shownick" type="checkbox" />
+                       <label>Use nickname instead of username</label>
+
+                       <br /><br />
                        
                        <label>Custom Themes</label>
                        <select id="styleSelect"></select>
index 431ece5..5eda3b1 100644 (file)
--- a/share.php
+++ b/share.php
-<?php\r
-       if(!isset($_SESSION)){\r
-               session_start();\r
-       }\r
-       include ('lib/twitese.php');\r
-?>\r
-<!DOCTYPE HTML>\r
-<html xmlns="http://www.w3.org/1999/xhtml">\r
-<head>\r
-<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />\r
-<title>Share to Embr</title>\r
-<style>\r
-body{background-color:#EEE;font-family:Tahoma,Helvetica,sans-serif;font-size:12px;margin:0}\r
-h2{color:#666;display:block;float:left;font-family:Helvetica;font-weight:700;margin:8px 0 0;text-shadow:1px 1px #EEE}\r
-p{margin:0;padding:0}\r
-a:active, a:focus{outline:medium none}\r
-a{color:#3280AB;text-decoration:none}\r
-a:hover{color:#000;text-decoration:underline}\r
-#tip{color:#999;float:right;font-size:12px}\r
-#tip b{font-family:Tahoma,Helvetica,sans-serif;font-size:24px;margin:3px}\r
-#share{border-radius:5px;box-shadow:0 0 5px #000;-moz-box-shadow:0 0 5px #000;-webkit-box-shadow:0 0 5px #000;background:url("../img/bg-front.gif") repeat-x scroll 0 0 transparent;height:230px;margin:20px 30px 0;padding:10px 20px;width:500px}\r
-#textbox{border-radius:2px;background-color:#FBFBFB;border:1px solid #A7A6AA;font-family:'Lucida Grande',Tahoma,sans-serif;font-size:14px;height:80px;margin:0;overflow:hidden;padding:3px;width:490px}\r
-#url{border-radius:2px;background-color:#FBFBFB;border:1px solid #A7A6AA;font-family:'Lucida Grande',Tahoma,sans-serif;font-size:12px;padding:3px;width:490px}\r
-.title{display:block;width:40px}\r
-table tr td{padding:5px 0}\r
-#message{font-size:14px;margin-top:100px;text-align:center}\r
-#textbox:hover, #url:hover{background-color:#FFF}\r
-.more{background-color:#FFF;background-image:url("../img/more.gif");background-position:left top;background-repeat:repeat-x;border-color:#DDD #AAA #AAA #DDD;border-style:solid;border-width:1px;display:block;font-family:Helvetica;font-size:18px;font-weight:700;height:22px;letter-spacing:1px;line-height:2em;margin-bottom:6px;outline-style:none;outline-width:medium;padding:6px 0;width:100%}\r
-.more:hover{background-position:left -78px;border:1px solid #bbb;text-decoration:none}\r
-.more:active{background-position:left -38px;color:#666}\r
-.more.loading{background-color:#fff;background-image:url(../img/ajax.gif);background-position:50% 50%;background-repeat:no-repeat;border:1px solid #eee;cursor:default!important}\r
-.more::-moz-focus-inner{border:0}\r
-.round{-moz-border-radius:8px;border-radius:8px}\r
-#shareBtn{color:#666;display:block;height:45px;margin:0 auto;text-shadow:0 1px 0 #FFF;vertical-align:top;width:300px;line-height:1em}\r
-</style>\r
-<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.3/jquery.min.js"></script>\r
-<script>\r
-$(function(){leaveWord();\r
-       $("#textbox").focus().bind("keyup","keydown",function(){leaveWord()});\r
-});\r
-\r
-function leaveWord(num){\r
-       if (!num) num = 140;\r
-       var leave = num-$("#textbox").val().length;\r
-       if (leave < 0){\r
-               $("#tip").html("<b>-" + (-leave) + "</b>");\r
-       } else{\r
-               $("#tip").html("<b>" + leave + "</b>");\r
-               if (leave > 40){ \r
-                       $("#tip, #tip b").css("color","#CCC");\r
-               } else if(leave > 20){\r
-                       $("#tip, #tip b").css("color","#CAA");\r
-               } else if(leave > 10){\r
-                       $("#tip, #tip b").css("color","#C88");\r
-               } else if(leave > 0){\r
-                       $("#tip, #tip b").css("color","#C44");\r
-               } else{\r
-                       $("#tip, #tip b").css("color","#E00");\r
-               }\r
-       }\r
-}\r
-</script>\r
-</head>\r
-\r
-<body>\r
-<?php\r
-       $t = getTwitter();\r
-       if ( isset($_POST['status']) ){\r
-               $status = $_POST['status'];\r
-               if (mb_strlen($status,'utf-8') > 140){\r
-                       $status = mb_substr($status, 0, 140, 'utf-8');\r
-               }\r
-               $status .= $_POST['url'];\r
-               $result = $t->update($status);\r
-       }\r
-       \r
-       $text = '';\r
-       \r
-       if ( isset($_GET['u']) ){\r
-               $url = $_GET['u'];\r
-       }\r
-       \r
-       if ( isset($_GET['t']) ){\r
-               $title = $_GET['t'];\r
-               $text = $_GET['t'];\r
-       }\r
-       \r
-       if ( isset($_GET['d']) ){\r
-               $select = $_GET['d'];\r
-               if ( trim($select) != "" ) $text = $select;\r
-       }\r
-       \r
-       $text = $text;  \r
-       $siteUrl = str_replace('share', 'index', 'http://' . $_SERVER ['HTTP_HOST'] . $_SERVER['PHP_SELF']);\r
-       ?>\r
-<div id="share">\r
-\r
-       <?php if ( !$t->username ){?>\r
-               <div id="message">Please <a href="login.php" target="_blank">login</a> first.</div>\r
-       <?php } else if ( isset($_POST['status']) ){ \r
-                       if ($result){\r
-       ?>\r
-                               <div id="message">Successfully shared your stuff on Embr! <a href="javascript:window.close()">Close</a></div>\r
-                                       <script type="text/javascript">\r
-                                       setTimeout("window.close()",1000);\r
-                                       </script>\r
-               <?php } else{ ?>\r
-                               <div id="message">Failed to share your stuff, please try again. <a href="javascript:window.history.go(-1)">Go Back</a></div>\r
-               <?php \r
-                       }\r
-          } else{ \r
-       ?>\r
-               <form action="share.php" method="post">\r
-               <table>\r
-                       <tr>\r
-                               <td colspan="2"><h2>Share to Embr</h2><span id="tip"><b>140</b></span></td>\r
-                       </tr>\r
-                       <tr>\r
-                               <td><input type="text" name="url" id="url" disabled="ture" value="<?php echo $url?>"/></td>\r
-                       </tr>\r
-                       <tr>\r
-                       <td><textarea name="status" id="textbox"><?php echo $text?> <?php if (strlen($url)>30) echo urlshorten($url); else echo $url ?></textarea></td>\r
-                       </tr>\r
-                       <tr>\r
-                       <td>\r
-                               <input class="more round" id="shareBtn" type="submit" value="Share" />\r
-                               </td>\r
-                       </tr>\r
-               </table>\r
-               </form>\r
-       <?php } ?>\r
-</div>\r
-</body>\r
-</html>\r
+<?php
+       if(!isset($_SESSION)){
+               session_start();
+       }
+       include ('lib/twitese.php');
+?>
+<!DOCTYPE HTML>
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<title>Share to Embr</title>
+<style>
+body{background-color:#EEE;font-family:Tahoma,Helvetica,sans-serif;font-size:12px;margin:0}
+h2{color:#666;display:block;float:left;font-family:Helvetica;font-weight:700;margin:8px 0 0;text-shadow:1px 1px #EEE}
+p{margin:0;padding:0}
+a:active, a:focus{outline:medium none}
+a{color:#3280AB;text-decoration:none}
+a:hover{color:#000;text-decoration:underline}
+#tip{color:#999;float:right;font-size:12px}
+#tip b{font-family:Tahoma,Helvetica,sans-serif;font-size:24px;margin:3px}
+#share{border-radius:5px;box-shadow:0 0 5px #000;-moz-box-shadow:0 0 5px #000;-webkit-box-shadow:0 0 5px #000;background:url("../img/bg-front.gif") repeat-x scroll 0 0 transparent;height:230px;margin:20px 30px 0;padding:10px 20px;width:500px}
+#textbox{border-radius:2px;background-color:#FBFBFB;border:1px solid #A7A6AA;font-family:'Lucida Grande',Tahoma,sans-serif;font-size:14px;height:80px;margin:0;overflow:hidden;padding:3px;width:490px}
+#url{border-radius:2px;background-color:#FBFBFB;border:1px solid #A7A6AA;font-family:'Lucida Grande',Tahoma,sans-serif;font-size:12px;padding:3px;width:490px}
+.title{display:block;width:40px}
+table tr td{padding:5px 0}
+#message{font-size:14px;margin-top:100px;text-align:center}
+#textbox:hover, #url:hover{background-color:#FFF}
+.more{background-color:#FFF;background-image:url("../img/more.gif");background-position:left top;background-repeat:repeat-x;border-color:#DDD #AAA #AAA #DDD;border-style:solid;border-width:1px;display:block;font-family:Helvetica;font-size:18px;font-weight:700;height:22px;letter-spacing:1px;line-height:2em;margin-bottom:6px;outline-style:none;outline-width:medium;padding:6px 0;width:100%}
+.more:hover{background-position:left -78px;border:1px solid #bbb;text-decoration:none}
+.more:active{background-position:left -38px;color:#666}
+.more.loading{background-color:#fff;background-image:url(../img/ajax.gif);background-position:50% 50%;background-repeat:no-repeat;border:1px solid #eee;cursor:default!important}
+.more::-moz-focus-inner{border:0}
+.round{-moz-border-radius:8px;border-radius:8px}
+#shareBtn{color:#666;display:block;height:45px;margin:0 auto;text-shadow:0 1px 0 #FFF;vertical-align:top;width:300px;line-height:1em}
+</style>
+<script src="https://ajax.aspnetcdn.com/ajax/jquery/jquery-1.8.3.min.js"></script>
+<script src="js/jquery.js"></script>
+<script>
+$(function(){leaveWord();
+       $("#textbox").focus().bind("keyup","keydown",function(){leaveWord()});
+});
+
+function leaveWord(num){
+       if (!num) num = 140;
+       var leave = num-$("#textbox").val().length;
+       if (leave < 0){
+               $("#tip").html("<b>-" + (-leave) + "</b>");
+       } else{
+               $("#tip").html("<b>" + leave + "</b>");
+               if (leave > 40){ 
+                       $("#tip, #tip b").css("color","#CCC");
+               } else if(leave > 20){
+                       $("#tip, #tip b").css("color","#CAA");
+               } else if(leave > 10){
+                       $("#tip, #tip b").css("color","#C88");
+               } else if(leave > 0){
+                       $("#tip, #tip b").css("color","#C44");
+               } else{
+                       $("#tip, #tip b").css("color","#E00");
+               }
+       }
+}
+</script>
+</head>
+
+<body>
+<?php
+       $t = getTwitter();
+       if ( isset($_POST['status']) ){
+               $status = $_POST['status'];
+               if (mb_strlen($status,'utf-8') > 140){
+                       $status = mb_substr($status, 0, 140, 'utf-8');
+               }
+               $status .= $_POST['url'];
+               $result = $t->update($status);
+       }
+       
+       $text = '';
+       
+       if ( isset($_GET['u']) ){
+               $url = $_GET['u'];
+       }
+       
+       if ( isset($_GET['t']) ){
+               $title = $_GET['t'];
+               $text = $_GET['t'];
+       }
+       
+       if ( isset($_GET['d']) ){
+               $select = $_GET['d'];
+               if ( trim($select) != "" ) $text = $select;
+       }
+       
+       $text = $text;  
+       $siteUrl = str_replace('share', 'index', 'http://' . $_SERVER ['HTTP_HOST'] . $_SERVER['PHP_SELF']);
+       ?>
+<div id="share">
+
+       <?php if ( !$t->username ){?>
+               <div id="message">Please <a href="login.php" target="_blank">login</a> first.</div>
+       <?php } else if ( isset($_POST['status']) ){ 
+                       if ($result){
+       ?>
+                               <div id="message">Successfully shared your stuff on Embr! <a href="javascript:window.close()">Close</a></div>
+                                       <script type="text/javascript">
+                                       setTimeout("window.close()",1000);
+                                       </script>
+               <?php } else{ ?>
+                               <div id="message">Failed to share your stuff, please try again. <a href="javascript:window.history.go(-1)">Go Back</a></div>
+               <?php 
+                       }
+          } else{ 
+       ?>
+               <form action="share.php" method="post">
+               <table>
+                       <tr>
+                               <td colspan="2"><h2>Share to Embr</h2><span id="tip"><b>140</b></span></td>
+                       </tr>
+                       <tr>
+                               <td><input type="text" name="url" id="url" disabled="ture" value="<?php echo $url?>"/></td>
+                       </tr>
+                       <tr>
+                       <td><textarea name="status" id="textbox"><?php echo $text?> <?php if (strlen($url)>30) echo urlshorten($url); else echo $url ?></textarea></td>
+                       </tr>
+                       <tr>
+                       <td>
+                               <input class="more round" id="shareBtn" type="submit" value="Share" />
+                               </td>
+                       </tr>
+               </table>
+               </form>
+       <?php } ?>
+</div>
+</body>
+</html>
diff --git a/signup/available.php b/signup/available.php
deleted file mode 100644 (file)
index bdbcf75..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<?php\r
-include('common.php');\r
-echo req('https://twitter.com/users/'.$_GET['t'].'_available?'.$_GET['t'].'='.urlencode($_GET['v']));\r
-?>\r
diff --git a/signup/check.gif b/signup/check.gif
deleted file mode 100644 (file)
index 69fb804..0000000
Binary files a/signup/check.gif and /dev/null differ
diff --git a/signup/common.php b/signup/common.php
deleted file mode 100644 (file)
index e17aef1..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-<?php\r
-function req($url, $data=false, $cert=false) {\r
-       $c = curl_init();\r
-       curl_setopt_array($c, array(\r
-               CURLOPT_URL => $url,\r
-               CURLOPT_HTTPHEADER => array( 'User-Agent: Mozilla/5.0 (Windows NT 5.1; U; zh-cn; rv:1.8.1) Gecko/20091102 Firefox/3.5.5' ),\r
-               CURLOPT_RETURNTRANSFER => true,\r
-               CURLOPT_FOLLOWLOCATION => true,\r
-               CURLOPT_FRESH_CONNECT => true,\r
-               CURLOPT_DNS_USE_GLOBAL_CACHE => true\r
-       ));\r
-       if (!strpos($url, 'https')) {\r
-               if ($cert) {\r
-                       curl_setopt_array($c, array(\r
-                               CURLOPT_SSL_VERIFYPEER => true,\r
-                               CURLOPT_SSL_VERIFYHOST => 2,\r
-                               CURLOPT_CAINFO, getcwd().$cert\r
-                       ));\r
-               } else {\r
-                       curl_setopt($c, CURLOPT_SSL_VERIFYPEER, false);\r
-               }\r
-       }\r
-       if ($data) {\r
-               curl_setopt_array($c, array(\r
-                       CURLOPT_POST => 1,\r
-                       CURLOPT_POSTFIELDS => $data\r
-               ));\r
-       }\r
-       $r = curl_exec($c);\r
-       curl_close($c);\r
-       return $r;\r
-}\r
-?>
\ No newline at end of file
diff --git a/signup/image.php b/signup/image.php
deleted file mode 100644 (file)
index 9ba3cab..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-<?php\r
-include('common.php');\r
-header('Content-Type: image/jpeg');\r
-echo req('https://api-secure.recaptcha.net/image?c='.$_GET['c']);\r
-?>
\ No newline at end of file
diff --git a/signup/index.php b/signup/index.php
deleted file mode 100644 (file)
index 536c4fb..0000000
+++ /dev/null
@@ -1,93 +0,0 @@
-<?php\r
-include('common.php');\r
-\r
-function between($str, $strStart, $strEnd) {\r
-    $posStart = strpos($str, $strStart);\r
-    $posEnd = strpos($str, $strEnd, $posStart);\r
-    return substr($str, $posStart + strlen($strStart), $posEnd - $posStart - strlen($strStart));\r
-}\r
-\r
-if ($_SERVER['REQUEST_METHOD'] == 'GET') {\r
-    $twitter = req('https://twitter.com/signup', false, false);\r
-    $recaptha_params = between($twitter, 'https://api-secure.recaptcha.net/challenge', '">');\r
-    $recaptcha = req('https://api-secure.recaptcha.net/challenge'.$recaptha_params, false, false);\r
-    \r
-    $auth_key = between($twitter, '<input name="authenticity_token" type="hidden" value="', '" />');\r
-    $challenge = between($recaptcha, "challenge : '", "',");\r
-    echo \r
-'<!doctype html>\r
-<html>\r
-    <head>\r
-        <title>Let\'s tear down this wall!</title>\r
-        <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>\r
-        <link href="style.css" media="screen" rel="stylesheet" type="text/css" />\r
-    </head>\r
-    <body>\r
-        <form action="'.$_SERVER["REQUEST_URI"].'" method="POST">\r
-            <input name="authenticity_token" type="hidden" value="'.$auth_key.'" />\r
-            <input id="follow" name="follow" type="hidden" />\r
-            <input name="recaptcha_challenge_field" type="hidden" value="'.$challenge.'" />\r
-            <p>\r
-                <label for="user_name">姓名(可以为中文)</label><br/>\r
-                <input autocomplete="off" class="text_field" id="user_name" name="user[name]" size="30" type="text" /><span></span>\r
-            <p>\r
-            <p>\r
-                <label for="user_screen_name">用户名(用于登录,只能是英文字母、数字及下划线的组合)</label><br/>\r
-                <input autocomplete="off" class="text_field" id="user_screen_name" maxlength="15" name="user[screen_name]" size="15" type="text" /><span></span>\r
-            </p>\r
-            <p>\r
-                <label for="user_user_password">密码(至少六位)</label><br/>\r
-                <input autocomplete="off" class="text_field" id="user_user_password" name="user[user_password]" size="30" type="password" /><span></span>\r
-            </p>\r
-            <p>\r
-                <label for="user_email">邮箱(请填写真实邮箱,注册成功后会收到注册邮件)</label><br/>\r
-                <input autocomplete="off" class="text_field" id="user_email" name="user[email]" size="30" type="text" /><span></span>\r
-            </p>\r
-            <input name="user[send_email_newsletter]" type="hidden" value="1" />\r
-            <p>\r
-                <label for="recaptcha_response_field">输入下面的两个单词(以半角空格分开)</label><br/>\r
-                <img src="image.php?c='.$challenge.'" alt="recaptcha" /><br/>                \r
-            <input type="text" id="recaptcha_response_field" name="recaptcha_response_field" class="text_field">\r
-            </p>\r
-            <input name="user[send_email_newsletter]" type="hidden" value="0" />\r
-            <p><input alt="我同意。创建我的账号。" class="btn btn-m" id="user_create_submit" name="commit" onclick="this.disabled=true,this.form.submit();" type="submit" value="创建账号" /></p>\r
-        </form>\r
-        <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>\r
-        <script type="text/javascript" src="main.js"></script>\r
-    </body>\r
-</html>';\r
-} else if ($_SERVER['REQUEST_METHOD'] == 'POST') {\r
-    $error_msg = false;\r
-    $fields = array( 'name', 'screen_name', 'user_password', 'email' );\r
-    foreach ($fields as $field) {\r
-        if (!strcmp($_POST['user'][$field], '')) {\r
-            $error_msg = '所有选项均为必填。';\r
-            break;\r
-        }\r
-    }\r
-    if (!$error_msg && strlen($_POST['user']['user_password']) < 6) {\r
-        $error_msg = '密码长度不够。';\r
-    }\r
-\r
-    if (!$error_msg) {\r
-        $r = req('https://twitter.com/account/create', @file_get_contents('php://input'), false);    \r
-        $err_msg = array(\r
-            'You can\'t do that right now.' => '出现未知错误。',\r
-            'Please try to match the 2 words shown above' => '验证码输入错误。',\r
-            'has already been taken' => '用户名或邮箱已有人使用。',\r
-            'is not a valid email address' => '邮箱格式不正确。'\r
-        );\r
-        foreach ($err_msg as $k => $v) {\r
-            if (strpos($r, $k) !== false) {\r
-                $error_msg = $v;\r
-                break;\r
-            }\r
-        }\r
-    }\r
-    if (!$error_msg) {\r
-        echo '注册成功,请到注册的邮箱中查收邮件。';\r
-    } else {\r
-        echo $error_msg.'请返回<a href="'.$_SERVER["REQUEST_URI"].'">注册页面</a>重试。';\r
-    }\r
-}\r
-?>\r
diff --git a/signup/main.js b/signup/main.js
deleted file mode 100644 (file)
index c5d34e0..0000000
+++ /dev/null
@@ -1,79 +0,0 @@
-(function() {\r
-    \r
-    var translation = {\r
-        'Username has already been taken' : '用户名已经有人使用',\r
-        "Only use letters, numbers and '_'" : '只能使用英文字母、数字及下划线',\r
-        'Email has already been taken.' : '邮箱已经有人使用'\r
-    }\r
-\r
-    var err = function(textbox, msg) {\r
-        textbox.parent().find('span').addClass('error').html(msg);\r
-    }\r
-    \r
-    var ok = function(textbox) {\r
-        textbox.parent().find('span').removeClass('error').html('<img src="check.gif" alt="ok" />');\r
-    }\r
-    \r
-    var reEmpty = /^\s*$/;\r
-    var reEmail = /\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*/;\r
-\r
-    var urlencode = function(str) {\r
-        return escape(str).replace('+', '%2B').replace('%20', '+').replace('*', '%2A').replace('/', '%2F').replace('@', '%40');\r
-    }\r
-    \r
-    $('#user_name').blur(function() {\r
-        var self = $(this);\r
-        if (reEmpty.test(self.val())) {\r
-            err(self, '姓名不能为空');\r
-            return;\r
-        }\r
-        ok(self);\r
-    });\r
-    \r
-    $('#user_screen_name').blur(function() {\r
-        var self = $(this);\r
-        if (reEmpty.test(self.val())) {\r
-            err(self, '用户名不能为空');\r
-            return;\r
-        }\r
-        $.getJSON('available.php?t=username&v=' + escape(self.val()), function(data) {\r
-            var span = self.parent().find('span');\r
-            if (data.valid) {\r
-                ok(self);\r
-            } else {\r
-                err(self, translation[data.msg] || data.msg);\r
-            }\r
-        });\r
-    });\r
-\r
-    $('#user_email').blur(function() {\r
-        var self = $(this);\r
-        var email = self.val();\r
-        if (!reEmail.test(email)) {\r
-            err(self, '输入的邮箱地址不合法');\r
-            return;\r
-        }\r
-        if (reEmpty.test(email)) {\r
-            err(self, '邮箱不能为空');\r
-            return;\r
-        }\r
-        $.getJSON('available.php?t=email&v=' + urlencode(email), function(data) {\r
-            var span = self.parent().find('span');\r
-            if (data.valid) {\r
-                ok(self);\r
-            } else {\r
-                err(self, translation[data.msg] || data.msg);\r
-            }\r
-        });\r
-    });\r
-    \r
-    $('#user_user_password').blur(function() {\r
-        var self = $(this);\r
-        if (self.val().length <= 6) {\r
-            err(self, '密码长度不能小于6位');\r
-            return;\r
-        }\r
-        ok(self);\r
-    });\r
-\r
-})();\r
diff --git a/signup/style.css b/signup/style.css
deleted file mode 100644 (file)
index 5d38138..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-body { font-family: Tahoma,Arial,sans-serif; font-size: 13px; }\r
-form { border: 20px solid #EBEBEB; width: 450px; margin: auto; padding: 5px 20px; }\r
-p { clear: both; }\r
-p label { width: 100%; text-align: left; font-weight: bold; }\r
-p input.text_field { width: 200px; }\r
-p span { margin-left: 20px; }\r
-.error { color: #FF0000; }
\ No newline at end of file
index 40df598..a71635e 100644 (file)
@@ -13,7 +13,7 @@
                }
                $user = $status->user;
                $date = format_time($status->created_at);
-               $text = formatEntities(&$status->entities,$status->text);
+               $text = formatEntities($status->entities,$status->text);
        } else {
                header('location: error.php');exit();
        }
@@ -53,8 +53,9 @@ header {margin:1em auto;text-align:right;width:600px}
 .status_body {display:block;font-size:2em;line-height:30px;margin-left:58px;overflow:hidden;position:relative}
 .timeline li {cursor:default;margin:0px;overflow:hidden;padding:10px;position:relative}
 .status_author, .rank_img {left:10px;position:absolute;top:15px;width:50px}
+.retweet_info {color:#999;display:block;font-size:11px;margin:0;text-align:left;width:100%}
 </style>
-<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.4/jquery.min.js"></script>
+<script src="https://ajax.aspnetcdn.com/ajax/jquery/jquery-1.8.3.min.js"></script>
 <script src="js/jquery.js"></script>
 <script src="js/mediaPreview.js"></script>
 <script src="js/public.js"></script>
@@ -68,7 +69,6 @@ header {margin:1em auto;text-align:right;width:600px}
                        <ul>
                                <li><a href="index.php">Home</a></li>
                                <li><a href="profile.php">Profile</a></li>
-                               <li><a href="browse.php">Public</a></li>
                                <li><a href="setting.php">Settings</a></li>
                                <li><a href="logout.php">Logout</a></li>                        
                        </ul>
@@ -91,12 +91,19 @@ header {margin:1em auto;text-align:right;width:600px}
                                                </span>
                                                <span class="status_body">
                                                        <span class="status_id"><?php echo $statusid ?></span>
-                                                       <span class="status_word"><a class="user_name" href="user.php?id=<?php echo $user->screen_name ?>"><?php echo $user->screen_name ?></a> <span class="tweet"><?php echo $text ?></span></span>
+                                                       <span class="status_word"><a class="user_name" href="user.php?id=<?php echo $user->screen_name ?>" id="<?php echo $user->screen_name ?>"><?php if ($_COOKIE['shownick']=='true') echo $user->name; else echo $user->screen_name; ?></a> <span class="tweet"><?php echo $text ?></span></span>
                                                        <span class="status_info">
                                                                                <?php if ($status->in_reply_to_status_id_str) {?><span class="in_reply_to"> <a href="status.php?id=<?php echo $status->in_reply_to_status_id_str ?>">in reply to <?php echo $status->in_reply_to_screen_name?></a></span> <?php }?>
                                                                                <span class="source">from <?php echo $status->source ?></span>
                                                                                <span class="date"><a href="status.php?id=<?php echo $statusid ?>" id="<?php echo $date?>" target="_blank"><?php echo date('Y-m-d H:i:s', $date); ?></a></span>
                                                        </span>
+                               <?php if ($status->retweet_count>0) { ?>
+                               <span class="retweet_info">Retweeted by</span>
+                               <?php 
+                               include ('lib/timeline_format.php');
+                               echo getRetweeters($status->id_str, 100);
+                               }
+                               ?>
                                                </span>
                                </li>
                </ol>
index d9130a9..772ad10 100644 (file)
@@ -1,2 +1,2 @@
-/*Theme 9 from Twitter.com*/\r
+/*Theme 9 from Twitter.com*/
 body{background:#1A1B1F url(http://s3.amazonaws.com/twitter_production/images/themes/theme9/bg.gif) fixed no-repeat top left}a,#content tr.hentry:hover a,body#profile #content div.hentry:hover a,#side .stats a:hover span.stats_count,#side div.user_icon a:hover,li.verified-profile a:hover,#side .promotion .definition strong,p.list-numbers a:hover,#side div.user_icon a:hover span,#content .tabMenu li a,.translator-profile a:hover,#side_name{color:#2FC2EF}body,ul#tabMenu li a,#side .section h1,#side .stat a,#side .stats a span.stats_count,#side div.section-header h1,#side div.user_icon a,#side div.user_icon a:hover,#side div.section-header h3.faq-header,ul.sidebar-menu a.active,li.verified-profile a,#side .promotion a,body #content .list-header h2,p.list-numbers a,.bar h3 label,body.timeline #content h1,.list-header h2 a span,#content .tabMenu li.active a,body#direct_messages #content .tabMenu #inbox_tab a,body#inbox #content .tabMenu #inbox_tab a,body#sent #content .tabMenu #sent_tab a,body#direct_messages #content .tabMenu #inbox_tab a,body#retweets_by_others #content .tabMenu #retweets_by_others_tab a,body#retweets #content .tabMenu #retweets_tab a,body#retweeted_by_others #content .tabMenu #retweeted_by_others_tab a,body#retweeted_of_mine #content .tabMenu #retweeted_of_mine_tab a,.translator-profile a,#owners_lists h2 a{color:#666}#side_base{border-left:1px solid #181A1E;background-color:#252429}ul.sidebar-menu a.active,ul.sidebar-menu li a:hover,#side div#custom_search.active,#side .promotion,.notify div{background-color:#3D3C41}.list-header,.list-controls,ul.sidebar-list li.active a,ul.sidebar-list li a:hover{background-color:#252429!important}#side .actions,#side .promo{border:1px solid #181A1E}#side div.section-header h3{border-bottom:1px solid #181A1E}#side hr{background:#181A1E;color:#181A1E}ul.sidebar-menu li.loading a{background:#3D3C41 url(img/spinner.gif) no-repeat 171px .5em!important}#side .collapsible h2.sidebar-title{background:transparent url(img/toggle_up_light.png) no-repeat center right!important}#side .collapsible.collapsed h2.sidebar-title{background:transparent url(img/toggle_down_light.png) no-repeat center right!important}#side ul.lists-links li a em{background:url(https://s3.amazonaws.com/twitter_production/a/1257465343/images/arrow_right_light.png) no-repeat left top}#side span.pipe{border-left:1px solid #181A1E}#list_subscriptions span.view-all,#list_memberships span.view-all,#profile span.view-all,#profile_favorites span.view-all,#following span.view-all,#followers span.view-all{border-left:0}a.edit-list{border-right:1px solid #181A1E!important}nav:hover{box-shadow:0 0 10px #2FC2EF;-webkit-box-shadow:0 0 10px #2FC2EF}
\ No newline at end of file
index 9a55648..c953641 100644 (file)
@@ -1,2 +1,2 @@
-/*theme 19 from twitter.com*/\r
+/*theme 19 from twitter.com*/
 body{background:#FFF04D url(http://s3.amazonaws.com/twitter_production/images/themes/theme19/bg.gif) fixed no-repeat;background-position:0 0;padding-top:0!important;_padding-top:10px!important}body,ul#tabMenu li a,#side .section h1,#side .stat a,#side .stats a span.stats_count,#side div.section-header h1,#side div.user_icon a,#side div.user_icon a:hover,#side div.section-header h3.faq-header,ul.sidebar-menu a.active,li.verified-profile a,#side .promotion a,body #content .list-header h2,p.list-numbers a,.bar h3 label,body.timeline #content h1,.list-header h2 a span,#content .tabMenu li.active a,body#direct_messages #content .tabMenu #inbox_tab a,body#inbox #content .tabMenu #inbox_tab a,body#sent #content .tabMenu #sent_tab a,body#direct_messages #content .tabMenu #inbox_tab a,body#retweets_by_others #content .tabMenu #retweets_by_others_tab a,body#retweets #content .tabMenu #retweets_tab a,body#retweeted_by_others #content .tabMenu #retweeted_by_others_tab a,body#retweeted_of_mine #content .tabMenu #retweeted_of_mine_tab a,.translator-profile a,#owners_lists h2 a{color:#333}.unconfirmed-email-banner{border-bottom:solid 1px #fff8ad}#side_base{border-left:1px solid #fff8ad;background-color:#f6ffd1}ul.sidebar-menu a.active,ul.sidebar-menu li a:hover,#side div#custom_search.active,#side .promotion,.notify div{background-color:transparent}.list-header,.list-controls,ul.sidebar-list li.active a,ul.sidebar-list li a:hover,.list-header-inner{background-color:#f6ffd1!important}#side .actions,#side .promo{border:1px solid #fff8ad}#side div.section-header h3{border-bottom:1px solid #fff8ad}#side p.sidebar-location{border-bottom:1px dotted #fff8ad}#side hr{background:#fff8ad;color:#fff8ad}ul.sidebar-menu li.loading a{background:transparent url(https://s3.amazonaws.com/twitter_production/a/1265242857/images/spinner.gif) no-repeat 171px .5em!important}#side .collapsible h2.sidebar-title{background:transparent url(https://s3.amazonaws.com/twitter_production/a/1265242857/images/toggle_up_dark.png) no-repeat center right!important}#side .collapsible.collapsed h2.sidebar-title{background:transparent url(https://s3.amazonaws.com/twitter_production/a/1265242857/images/toggle_down_dark.png) no-repeat center right!important}#side ul.lists-links li a em{background:url(https://s3.amazonaws.com/twitter_production/a/1265242857/images/arrow_right_dark.png) no-repeat left top}#side span.pipe{border-left:1px solid #fff8ad}#list_subscriptions span.view-all,#list_memberships span.view-all,#profile span.view-all,#profile_favorites span.view-all,#following span.view-all,#followers span.view-all{border-left:0}a.edit-list{border-right:1px solid #fff8ad!important}body#show #content .meta a.screen-name,#content .shared-content .screen-name,#content .meta .byline a,a,#content tr.hentry:hover a,body#profile #content div.hentry:hover a,#side .stats a:hover span.stats_count,#side div.user_icon a:hover,li.verified-profile a:hover,#side .promotion .definition strong,p.list-numbers a:hover,#side div.user_icon a:hover span,#content .tabMenu li a,.translator-profile a:hover,#local_trend_locations li a,.modal-content .list-slug,#side_name{color:#09C}nav:hover{box-shadow:0 0 10px #09C;-webkit-box-shadow:0 0 10px #09C}
\ No newline at end of file
index 415de96..5144917 100644 (file)
@@ -1,2 +1,2 @@
-/*theme 20 #red from twitter.com*/\r
+/*theme 20 #red from twitter.com*/
 body{background:#BF1238 url(http://s3.amazonaws.com/twitter_production/images/themes/theme20/bg.png) fixed no-repeat;background-position:0 0;padding-top:0!important;_padding-top:10px!important}body,ul#tabMenu li a,#side .section h1,#side .stat a,#side .stats a span.stats_count,#side div.section-header h1,#side div.user_icon a,#side div.user_icon a:hover,#side div.section-header h3.faq-header,ul.sidebar-menu a.active,li.verified-profile a,#side .promotion a,body #content .list-header h2,p.list-numbers a,.bar h3 label,body.timeline #content h1,.list-header h2 a span,#content .tabMenu li.active a,body#direct_messages #content .tabMenu #inbox_tab a,body#inbox #content .tabMenu #inbox_tab a,body#sent #content .tabMenu #sent_tab a,body#direct_messages #content .tabMenu #inbox_tab a,body#retweets_by_others #content .tabMenu #retweets_by_others_tab a,body#retweets #content .tabMenu #retweets_tab a,body#retweeted_by_others #content .tabMenu #retweeted_by_others_tab a,body#retweeted_of_mine #content .tabMenu #retweeted_of_mine_tab a,.translator-profile a,#owners_lists h2 a{color:#333}.unconfirmed-email-banner{border-bottom:solid 1px #FFF}#side_base{border-left:1px solid #FFF;background-color:#EFEFEF}ul.sidebar-menu a.active,ul.sidebar-menu li a:hover,#side div#custom_search.active,#side .promotion,.notify div{background-color:transparent}.list-header,.list-controls,ul.sidebar-list li.active a,ul.sidebar-list li a:hover,.list-header-inner{background-color:#EFEFEF!important}#side .actions,#side .promo{border:1px solid #FFF}#side div.section-header h3{border-bottom:1px solid #FFF}#side p.sidebar-location{border-bottom:1px dotted #FFF}#side hr{background:#FFF;color:#FFF}ul.sidebar-menu li.loading a{background:transparent url(https://s3.amazonaws.com/twitter_production/a/1265242857/images/spinner.gif) no-repeat 171px .5em!important}#side .collapsible h2.sidebar-title{background:transparent url(https://s3.amazonaws.com/twitter_production/a/1265242857/images/toggle_up_dark.png) no-repeat center right!important}#side .collapsible.collapsed h2.sidebar-title{background:transparent url(https://s3.amazonaws.com/twitter_production/a/1265242857/images/toggle_down_dark.png) no-repeat center right!important}#side ul.lists-links li a em{background:url(https://s3.amazonaws.com/twitter_production/a/1265242857/images/arrow_right_dark.png) no-repeat left top}#side span.pipe{border-left:1px solid #FFF}#list_subscriptions span.view-all,#list_memberships span.view-all,#profile span.view-all,#profile_favorites span.view-all,#following span.view-all,#followers span.view-all{border-left:0}a.edit-list{border-right:1px solid #FFF!important}body#show #content .meta a.screen-name,#content .shared-content .screen-name,#content .meta .byline a,a,#content tr.hentry:hover a,body#profile #content div.hentry:hover a,#side .stats a:hover span.stats_count,#side div.user_icon a:hover,li.verified-profile a:hover,#side .promotion .definition strong,p.list-numbers a:hover,#side div.user_icon a:hover span,#content .tabMenu li a,.translator-profile a:hover,#local_trend_locations li a,.modal-content .list-slug,#side_name{color:#BF1238}nav:hover{box-shadow:0 0 10px #BF1238;-webkit-box-shadow:0 0 10px #BF1238}
\ No newline at end of file
index 9b2c3f5..cc36682 100644 (file)
@@ -1,2 +1,2 @@
-/*Storm theme by disinfeqt*/\r
+/*Storm theme by disinfeqt*/
 body{background:#969696 url(../themes/img/01602_sandringhambeach_1440x900.jpg) fixed no-repeat;background-position:center center;padding-top:0!important;_padding-top:10px!important}body,ul#tabMenu li a,#side .section h1,#side .stat a,#side .stats a span.stats_count,#side div.section-header h1,#side div.user_icon a,#side div.user_icon a:hover,#side div.section-header h3.faq-header,ul.sidebar-menu a.active,li.verified-profile a,#side .promotion a,body #content .list-header h2,p.list-numbers a,.bar h3 label,body.timeline #content h1,.list-header h2 a span,#content .tabMenu li.active a,body#direct_messages #content .tabMenu #inbox_tab a,body#inbox #content .tabMenu #inbox_tab a,body#sent #content .tabMenu #sent_tab a,body#direct_messages #content .tabMenu #inbox_tab a,body#retweets_by_others #content .tabMenu #retweets_by_others_tab a,body#retweets #content .tabMenu #retweets_tab a,body#retweeted_by_others #content .tabMenu #retweeted_by_others_tab a,body#retweeted_of_mine #content .tabMenu #retweeted_of_mine_tab a,.translator-profile a,#owners_lists h2 a{color:#424242}.unconfirmed-email-banner{border-bottom:solid 1px #A6A6A6}#side_base{border-left:1px solid #A6A6A6;background-color:#E2E2E2}ul.sidebar-menu a.active,ul.sidebar-menu li a:hover,#side div#custom_search.active,#side .promotion,.notify div{background-color:transparent}.list-header,.list-controls,ul.sidebar-list li.active a,ul.sidebar-list li a:hover,.list-header-inner{background-color:#E2E2E2!important}#side .actions,#side .promo{border:1px solid #A6A6A6}#side div.section-header h3{border-bottom:1px solid #A6A6A6}#side p.sidebar-location{border-bottom:1px dotted #A6A6A6}#side hr{background:#A6A6A6;color:#A6A6A6}ul.sidebar-menu li.loading a{background:transparent url(https://s3.amazonaws.com/twitter_production/a/1265242857/images/spinner.gif) no-repeat 171px .5em!important}#side .collapsible h2.sidebar-title{background:transparent url(https://s3.amazonaws.com/twitter_production/a/1265242857/images/toggle_up_dark.png) no-repeat center right!important}#side .collapsible.collapsed h2.sidebar-title{background:transparent url(https://s3.amazonaws.com/twitter_production/a/1265242857/images/toggle_down_dark.png) no-repeat center right!important}#side ul.lists-links li a em{background:url(https://s3.amazonaws.com/twitter_production/a/1265242857/images/arrow_right_dark.png) no-repeat left top}#side span.pipe{border-left:1px solid #A6A6A6}#list_subscriptions span.view-all,#list_memberships span.view-all,#profile span.view-all,#profile_favorites span.view-all,#following span.view-all,#followers span.view-all{border-left:0}a.edit-list{border-right:1px solid #A6A6A6!important}body#show #content .meta a.screen-name,#content .shared-content .screen-name,#content .meta .byline a,a,#content tr.hentry:hover a,body#profile #content div.hentry:hover a,#side .stats a:hover span.stats_count,#side div.user_icon a:hover,li.verified-profile a:hover,#side .promotion .definition strong,p.list-numbers a:hover,#side div.user_icon a:hover span,#content .tabMenu li a,.translator-profile a:hover,#local_trend_locations li a,.modal-content .list-slug,#side_name{color:#690200}nav:hover{box-shadow:0 0 10px #690200;-webkit-box-shadow:0 0 10px #690200}
\ No newline at end of file
index 10daffc..6eb484c 100644 (file)
@@ -1,2 +1,2 @@
-/*City theme by disinfeqt*/\r
+/*City theme by disinfeqt*/
 body{background-size: 100% 100%;background:#969696 url(../themes/img/01500_iceonthelake_1440x900.jpg) fixed no-repeat;background-position:center center;padding-top:0!important;_padding-top:10px!important}body,ul#tabMenu li a,#side .section h1,#side .stat a,#side .stats a span.stats_count,#side div.section-header h1,#side div.user_icon a,#side div.user_icon a:hover,#side div.section-header h3.faq-header,ul.sidebar-menu a.active,li.verified-profile a,#side .promotion a,body #content .list-header h2,p.list-numbers a,.bar h3 label,body.timeline #content h1,.list-header h2 a span,#content .tabMenu li.active a,body#direct_messages #content .tabMenu #inbox_tab a,body#inbox #content .tabMenu #inbox_tab a,body#sent #content .tabMenu #sent_tab a,body#direct_messages #content .tabMenu #inbox_tab a,body#retweets_by_others #content .tabMenu #retweets_by_others_tab a,body#retweets #content .tabMenu #retweets_tab a,body#retweeted_by_others #content .tabMenu #retweeted_by_others_tab a,body#retweeted_of_mine #content .tabMenu #retweeted_of_mine_tab a,.translator-profile a,#owners_lists h2 a{color:#3B3B3B}.unconfirmed-email-banner{border-bottom:solid 1px #BFFEFF}#side_base{border-left:1px solid #BFFEFF;background-color:#EDEDED}ul.sidebar-menu a.active,ul.sidebar-menu li a:hover,#side div#custom_search.active,#side .promotion,.notify div{background-color:transparent}.list-header,.list-controls,ul.sidebar-list li.active a,ul.sidebar-list li a:hover,.list-header-inner{background-color:#EDEDED!important}#side .actions,#side .promo{border:1px solid #BFFEFF}#side div.section-header h3{border-bottom:1px solid #BFFEFF}#side p.sidebar-location{border-bottom:1px dotted #BFFEFF}#side hr{background:#BFFEFF;color:#BFFEFF}ul.sidebar-menu li.loading a{background:transparent url(https://s3.amazonaws.com/twitter_production/a/1265242857/images/spinner.gif) no-repeat 171px .5em!important}#side .collapsible h2.sidebar-title{background:transparent url(https://s3.amazonaws.com/twitter_production/a/1265242857/images/toggle_up_dark.png) no-repeat center right!important}#side .collapsible.collapsed h2.sidebar-title{background:transparent url(https://s3.amazonaws.com/twitter_production/a/1265242857/images/toggle_down_dark.png) no-repeat center right!important}#side ul.lists-links li a em{background:url(https://s3.amazonaws.com/twitter_production/a/1265242857/images/arrow_right_dark.png) no-repeat left top}#side span.pipe{border-left:1px solid #BFFEFF}#list_subscriptions span.view-all,#list_memberships span.view-all,#profile span.view-all,#profile_favorites span.view-all,#following span.view-all,#followers span.view-all{border-left:0}a.edit-list{border-right:1px solid #BFFEFF!important}body#show #content .meta a.screen-name,#content .shared-content .screen-name,#content .meta .byline a,a,#content tr.hentry:hover a,body#profile #content div.hentry:hover a,#side .stats a:hover span.stats_count,#side div.user_icon a:hover,li.verified-profile a:hover,#side .promotion .definition strong,p.list-numbers a:hover,#side div.user_icon a:hover span,#content .tabMenu li a,.translator-profile a:hover,#local_trend_locations li a,.modal-content .list-slug,#side_name{color:#009294}nav:hover{box-shadow:0 0 10px #009294;-webkit-box-shadow:0 0 10px #009294}
\ No newline at end of file
index 9dbea60..1216127 100644 (file)
@@ -1,3 +1,3 @@
-/*Cosmos Theme by disinfeqt\r
-Image (c) Apple Inc*/\r
+/*Cosmos Theme by disinfeqt
+Image (c) Apple Inc*/
 body{background:#000 url(http://static.colourlovers.com/images/themeleon/twitter/themes/0/0/17-bg.jpg) fixed no-repeat;background-position:center center;padding-top:0!important;_padding-top:10px!important}body,ul#tabMenu li a,#side .section h1,#side .stat a,#side .stats a span.stats_count,#side div.section-header h1,#side div.user_icon a,#side div.user_icon a:hover,#side div.section-header h3.faq-header,ul.sidebar-menu a.active,li.verified-profile a,#side .promotion a,body #content .list-header h2,p.list-numbers a,.bar h3 label,body.timeline #content h1,.list-header h2 a span,#content .tabMenu li.active a,body#direct_messages #content .tabMenu #inbox_tab a,body#inbox #content .tabMenu #inbox_tab a,body#sent #content .tabMenu #sent_tab a,body#direct_messages #content .tabMenu #inbox_tab a,body#retweets_by_others #content .tabMenu #retweets_by_others_tab a,body#retweets #content .tabMenu #retweets_tab a,body#retweeted_by_others #content .tabMenu #retweeted_by_others_tab a,body#retweeted_of_mine #content .tabMenu #retweeted_of_mine_tab a,.translator-profile a,#owners_lists h2 a{color:#636363}.unconfirmed-email-banner{border-bottom:solid 1px #DEDEDE}#side_base{border-left:1px solid #DEDEDE;background-color:#2B2B2B}ul.sidebar-menu a.active,ul.sidebar-menu li a:hover,#side div#custom_search.active,#side .promotion,.notify div{background-color:transparent}.list-header,.list-controls,ul.sidebar-list li.active a,ul.sidebar-list li a:hover,.list-header-inner{background-color:#2B2B2B!important}#side .actions,#side .promo{border:1px solid #DEDEDE}#side div.section-header h3{border-bottom:1px solid #DEDEDE}#side p.sidebar-location{border-bottom:1px dotted #DEDEDE}#side hr{background:#DEDEDE;color:#DEDEDE}ul.sidebar-menu li.loading a{background:transparent url(https://s3.amazonaws.com/twitter_production/a/1265242857/images/spinner.gif) no-repeat 171px .5em!important}#side .collapsible h2.sidebar-title{background:transparent url(https://s3.amazonaws.com/twitter_production/a/1265242857/images/toggle_up_light.png) no-repeat center right!important}#side .collapsible.collapsed h2.sidebar-title{background:transparent url(https://s3.amazonaws.com/twitter_production/a/1265242857/images/toggle_down_light.png) no-repeat center right!important}#side ul.lists-links li a em{background:url(https://s3.amazonaws.com/twitter_production/a/1265242857/images/arrow_right_light.png) no-repeat left top}#side span.pipe{border-left:1px solid #DEDEDE}#list_subscriptions span.view-all,#list_memberships span.view-all,#profile span.view-all,#profile_favorites span.view-all,#following span.view-all,#followers span.view-all{border-left:0}a.edit-list{border-right:1px solid #DEDEDE!important}body#show #content .meta a.screen-name,#content .shared-content .screen-name,#content .meta .byline a,a,#content tr.hentry:hover a,body#profile #content div.hentry:hover a,#side .stats a:hover span.stats_count,#side div.user_icon a:hover,li.verified-profile a:hover,#side .promotion .definition strong,p.list-numbers a:hover,#side div.user_icon a:hover span,#content .tabMenu li a,.translator-profile a:hover,#local_trend_locations li a,.modal-content .list-slug,#side_name{color:#006A87}nav:hover{box-shadow:0 0 10px #006A87;-webkit-box-shadow:0 0 10px #006A87}
\ No newline at end of file
index b53fad7..5d086bf 100644 (file)
@@ -1,5 +1,5 @@
-/*Pride (Rainbow) Theme by disinfeqt\r
-Loving you ain't my fault, is it? */\r
-body{background:#000 url(../themes/img/rainbow.jpg) fixed no-repeat;background-position:center center;padding-top:0!important;_padding-top:10px!important}body,ul#tabMenu li a,#side .section h1,#side .stat a,#side .stats a span.stats_count,#side div.section-header h1,#side div.user_icon a,#side div.user_icon a:hover,#side div.section-header h3.faq-header,ul.sidebar-menu a.active,li.verified-profile a,#side .promotion a,body #content .list-header h2,p.list-numbers a,.bar h3 label,body.timeline #content h1,.list-header h2 a span,#content .tabMenu li.active a,body#direct_messages #content .tabMenu #inbox_tab a,body#inbox #content .tabMenu #inbox_tab a,body#sent #content .tabMenu #sent_tab a,body#direct_messages #content .tabMenu #inbox_tab a,body#retweets_by_others #content .tabMenu #retweets_by_others_tab a,body#retweets #content .tabMenu #retweets_tab a,body#retweeted_by_others #content .tabMenu #retweeted_by_others_tab a,body#retweeted_of_mine #content .tabMenu #retweeted_of_mine_tab a,.translator-profile a,#owners_lists h2 a{color:#525252}.unconfirmed-email-banner{border-bottom:solid 1px #333}#side_base{border-left:1px solid #333;background-color:#000}ul.sidebar-menu a.active,ul.sidebar-menu li a:hover,#side div#custom_search.active,#side .promotion,.notify div{background-color:transparent}.list-header,.list-controls,ul.sidebar-list li.active a,ul.sidebar-list li a:hover,.list-header-inner{background-color:#000!important}#side .actions,#side .promo{border:1px solid #333}#side div.section-header h3{border-bottom:1px solid #333}#side p.sidebar-location{border-bottom:1px dotted #333}#side hr{background:#333;color:#333}ul.sidebar-menu li.loading a{background:transparent url(https://s3.amazonaws.com/twitter_production/a/1265242857/images/spinner.gif) no-repeat 171px .5em!important}#side .collapsible h2.sidebar-title{background:transparent url(https://s3.amazonaws.com/twitter_production/a/1265242857/images/toggle_up_light.png) no-repeat center right!important}#side .collapsible.collapsed h2.sidebar-title{background:transparent url(https://s3.amazonaws.com/twitter_production/a/1265242857/images/toggle_down_light.png) no-repeat center right!important}#side ul.lists-links li a em{background:url(https://s3.amazonaws.com/twitter_production/a/1265242857/images/arrow_right_light.png) no-repeat left top}#side span.pipe{border-left:1px solid #333}#list_subscriptions span.view-all,#list_memberships span.view-all,#profile span.view-all,#profile_favorites span.view-all,#following span.view-all,#followers span.view-all{border-left:0}a.edit-list{border-right:1px solid #333!important}body#show #content .meta a.screen-name,#content .shared-content .screen-name,#content .meta .byline a,a,#content tr.hentry:hover a,body#profile #content div.hentry:hover a,#side .stats a:hover span.stats_count,#side div.user_icon a:hover,li.verified-profile a:hover,#side .promotion .definition strong,p.list-numbers a:hover,#side div.user_icon a:hover span,#content .tabMenu li a,.translator-profile a:hover,#local_trend_locations li a,.modal-content .list-slug{color:#4F4F4F}\r
-#side_name{background:url("../themes/img/pride_flag.png") no-repeat scroll 165px 4px transparent}\r
+/*Pride (Rainbow) Theme by disinfeqt
+Loving you ain't my fault, is it? */
+body{background:#000 url(../themes/img/rainbow.jpg) fixed no-repeat;background-position:center center;padding-top:0!important;_padding-top:10px!important}body,ul#tabMenu li a,#side .section h1,#side .stat a,#side .stats a span.stats_count,#side div.section-header h1,#side div.user_icon a,#side div.user_icon a:hover,#side div.section-header h3.faq-header,ul.sidebar-menu a.active,li.verified-profile a,#side .promotion a,body #content .list-header h2,p.list-numbers a,.bar h3 label,body.timeline #content h1,.list-header h2 a span,#content .tabMenu li.active a,body#direct_messages #content .tabMenu #inbox_tab a,body#inbox #content .tabMenu #inbox_tab a,body#sent #content .tabMenu #sent_tab a,body#direct_messages #content .tabMenu #inbox_tab a,body#retweets_by_others #content .tabMenu #retweets_by_others_tab a,body#retweets #content .tabMenu #retweets_tab a,body#retweeted_by_others #content .tabMenu #retweeted_by_others_tab a,body#retweeted_of_mine #content .tabMenu #retweeted_of_mine_tab a,.translator-profile a,#owners_lists h2 a{color:#525252}.unconfirmed-email-banner{border-bottom:solid 1px #333}#side_base{border-left:1px solid #333;background-color:#000}ul.sidebar-menu a.active,ul.sidebar-menu li a:hover,#side div#custom_search.active,#side .promotion,.notify div{background-color:transparent}.list-header,.list-controls,ul.sidebar-list li.active a,ul.sidebar-list li a:hover,.list-header-inner{background-color:#000!important}#side .actions,#side .promo{border:1px solid #333}#side div.section-header h3{border-bottom:1px solid #333}#side p.sidebar-location{border-bottom:1px dotted #333}#side hr{background:#333;color:#333}ul.sidebar-menu li.loading a{background:transparent url(https://s3.amazonaws.com/twitter_production/a/1265242857/images/spinner.gif) no-repeat 171px .5em!important}#side .collapsible h2.sidebar-title{background:transparent url(https://s3.amazonaws.com/twitter_production/a/1265242857/images/toggle_up_light.png) no-repeat center right!important}#side .collapsible.collapsed h2.sidebar-title{background:transparent url(https://s3.amazonaws.com/twitter_production/a/1265242857/images/toggle_down_light.png) no-repeat center right!important}#side ul.lists-links li a em{background:url(https://s3.amazonaws.com/twitter_production/a/1265242857/images/arrow_right_light.png) no-repeat left top}#side span.pipe{border-left:1px solid #333}#list_subscriptions span.view-all,#list_memberships span.view-all,#profile span.view-all,#profile_favorites span.view-all,#following span.view-all,#followers span.view-all{border-left:0}a.edit-list{border-right:1px solid #333!important}body#show #content .meta a.screen-name,#content .shared-content .screen-name,#content .meta .byline a,a,#content tr.hentry:hover a,body#profile #content div.hentry:hover a,#side .stats a:hover span.stats_count,#side div.user_icon a:hover,li.verified-profile a:hover,#side .promotion .definition strong,p.list-numbers a:hover,#side div.user_icon a:hover span,#content .tabMenu li a,.translator-profile a:hover,#local_trend_locations li a,.modal-content .list-slug{color:#4F4F4F}
+#side_name{background:url("../themes/img/pride_flag.png") no-repeat scroll 165px 4px transparent}
 nav:hover{box-shadow:0 0 10px #4F4F4F;-webkit-box-shadow:0 0 10px #4F4F4F}
\ No newline at end of file
index 762f618..c1ad62a 100644 (file)
@@ -1,2 +1,2 @@
-/*Drop Bombs by disinfeqt*/\r
+/*Drop Bombs by disinfeqt*/
 body{background:#1F1F1F url(../themes/img/drop_bombs.png) fixed no-repeat}body,ul#tabMenu li a,#side .section h1,#side .stat a,#side .stats a span.stats_count,#side div.section-header h1,#side div.user_icon a,#side div.user_icon a:hover,#side div.section-header h3.faq-header,ul.sidebar-menu a.active,li.verified-profile a,#side .promotion a,body #content .list-header h2,p.list-numbers a,.bar h3 label,body.timeline #content h1,.list-header h2 a span,#content .tabMenu li.active a,body#direct_messages #content .tabMenu #inbox_tab a,body#inbox #content .tabMenu #inbox_tab a,body#sent #content .tabMenu #sent_tab a,body#direct_messages #content .tabMenu #inbox_tab a,body#retweets_by_others #content .tabMenu #retweets_by_others_tab a,body#retweets #content .tabMenu #retweets_tab a,body#retweeted_by_others #content .tabMenu #retweeted_by_others_tab a,body#retweeted_of_mine #content .tabMenu #retweeted_of_mine_tab a,.translator-profile a,#owners_lists h2 a{color:#75715E}.unconfirmed-email-banner{border-bottom:solid 1px #000}#side_base{border-left:1px solid #000;background-color:#1F1F1F}ul.sidebar-menu a.active,ul.sidebar-menu li a:hover,#side div#custom_search.active,#side .promotion,.notify div{background-color:#373737}.list-header,.list-controls,ul.sidebar-list li.active a,ul.sidebar-list li a:hover,.list-header-inner{background-color:#1F1F1F!important}#side .actions,#side .promo,#design .side-section{border:1px solid #000}#side div.section-header h3{border-bottom:1px solid #000}#side p.sidebar-location{border-bottom:1px dotted #000}#side hr{background:#000;color:#000}ul.sidebar-menu li.loading a{background:#373737 url(https://s3.amazonaws.com/twitter_production/a/1267486213/images/spinner.gif) no-repeat 171px .5em!important}#side .collapsible h2.sidebar-title{background:transparent url(https://s3.amazonaws.com/twitter_production/a/1267486213/images/toggle_up_light.png) no-repeat center right!important}#side .collapsible.collapsed h2.sidebar-title{background:transparent url(https://s3.amazonaws.com/twitter_production/a/1267486213/images/toggle_down_light.png) no-repeat center right!important}#side ul.lists-links li a em{background:url(https://s3.amazonaws.com/twitter_production/a/1267486213/images/arrow_right_light.png) no-repeat left top}#side span.pipe{border-left:1px solid #000}#list_subscriptions span.view-all,#list_memberships span.view-all,#profile span.view-all,#profile_favorites span.view-all,#following span.view-all,#followers span.view-all{border-left:0}a.edit-list{border-right:1px solid #000!important}body#show #content .meta a.screen-name,#content .shared-content .screen-name,#content .meta .byline a,a,#content tr.hentry:hover a,body#profile #content div.hentry:hover a,#side .stats a:hover span.stats_count,#side div.user_icon a:hover,li.verified-profile a:hover,#side .promotion .definition strong,p.list-numbers a:hover,#side div.user_icon a:hover span,#content .tabMenu li a,.translator-profile a:hover,#local_trend_locations li a,.modal-content .list-slug,.tweet-label a:hover,#side_name{color:#858585}nav:hover{box-shadow:0 0 10px #858585;-webkit-box-shadow:0 0 10px #858585}}
\ No newline at end of file
index 33dc1bf..ad67a17 100644 (file)
@@ -1,2 +1,2 @@
-/*disinfeqt's Monokai Python Style*/\r
+/*disinfeqt's Monokai Python Style*/
 body{background:#272822 url(../themes/img/bg.py.png) fixed no-repeat top left}a,#content tr.hentry:hover a,body#profile #content div.hentry:hover a,#side .stats a:hover span.stats_count,#side div.user_icon a:hover,li.verified-profile a:hover,#side .promotion .definition strong,p.list-numbers a:hover,#side div.user_icon a:hover span,#content .tabMenu li a,.translator-profile a:hover,#side_name{color:#66D8EF}body,ul#tabMenu li a,#side .section h1,#side .stat a,#side .stats a span.stats_count,#side div.section-header h1,#side div.user_icon a,#side div.user_icon a:hover,#side div.section-header h3.faq-header,ul.sidebar-menu a.active,li.verified-profile a,#side .promotion a,body #content .list-header h2,p.list-numbers a,.bar h3 label,body.timeline #content h1,.list-header h2 a span,#content .tabMenu li.active a,body#direct_messages #content .tabMenu #inbox_tab a,body#inbox #content .tabMenu #inbox_tab a,body#sent #content .tabMenu #sent_tab a,body#direct_messages #content .tabMenu #inbox_tab a,body#retweets_by_others #content .tabMenu #retweets_by_others_tab a,body#retweets #content .tabMenu #retweets_tab a,body#retweeted_by_others #content .tabMenu #retweeted_by_others_tab a,body#retweeted_of_mine #content .tabMenu #retweeted_of_mine_tab a,.translator-profile a,#owners_lists h2 a{color:#75715E}#side_base{border-left:1px solid #F92673;background-color:#272822}ul.sidebar-menu a.active,ul.sidebar-menu li a:hover,#side div#custom_search.active,#side .promotion,.notify div{background-color:#3F403A}.list-header,.list-controls,ul.sidebar-list li.active a,ul.sidebar-list li a:hover{background-color:#272822!important}#side .actions,#side .promo{border:1px solid #F92673}#side div.section-header h3{border-bottom:1px solid #F92673}#side hr{background:#F92673;color:#F92673}ul.sidebar-menu li.loading a{background:#3F403A url(https://s3.amazonaws.com/twitter_production/a/1258070043/images/spinner.gif) no-repeat 171px .5em!important}#side .collapsible h2.sidebar-title{background:transparent url(https://s3.amazonaws.com/twitter_production/a/1258070043/images/toggle_up_light.png) no-repeat center right!important}#side .collapsible.collapsed h2.sidebar-title{background:transparent url(https://s3.amazonaws.com/twitter_production/a/1258070043/images/toggle_down_light.png) no-repeat center right!important}#side ul.lists-links li a em{background:url(https://s3.amazonaws.com/twitter_production/a/1258070043/images/arrow_right_light.png) no-repeat left top}#side span.pipe{border-left:1px solid #F92673}#list_subscriptions span.view-all,#list_memberships span.view-all,#profile span.view-all,#profile_favorites span.view-all,#following span.view-all,#followers span.view-all{border-left:0}a.edit-list{border-right:1px solid #F92673!important}nav:hover{box-shadow:0 0 10px #66D8EF;-webkit-box-shadow:0 0 10px #66D8EF}
\ No newline at end of file
index fb3308c..8f38970 100644 (file)
@@ -1,3 +1,3 @@
-/*Twitter Classic*/\r
-body{background:#9AE4E8 url(http://s3.amazonaws.com/twitter_production/images/themes/theme16/bg.gif) fixed no-repeat top left}body,ul#tabMenu li a,#side .section h1,#side .stat a,#side .stats a span.stats_count,#side div.section-header h1,#side div.user_icon a,#side div.user_icon a:hover,#side div.section-header h3.faq-header,ul.sidebar-menu li.active a,li.verified-profile a,#side .promotion a,body #content .list-header h2,p.list-numbers a,.bar h3 label,body.timeline #content h1,.list-header h2 a span,#content .tabMenu li.active a,body#direct_messages #content .tabMenu #inbox_tab a,body#inbox #content .tabMenu #inbox_tab a,body#sent #content .tabMenu #sent_tab a,body#direct_messages #content .tabMenu #inbox_tab a,body#retweets_by_others #content .tabMenu #retweets_by_others_tab a,body#retweets #content .tabMenu #retweets_tab a,body#retweeted_by_others #content .tabMenu #retweeted_by_others_tab a,body#retweeted_of_mine #content .tabMenu #retweeted_of_mine_tab a,.translator-profile a,#owners_lists h2 a{color:#333}#side_base{border-left:1px solid #BDDCAD;background-color:#DFC}ul.sidebar-menu li.active a,ul.sidebar-menu li a:hover,#side div#custom_search.active,#side .promotion,.notify div{background-color:#EDFFDC}.list-header,.list-controls,ul.sidebar-list li.active a,ul.sidebar-list li a:hover{background-color:#DFC!important}#side .actions,#side .promo{border:1px solid #BDDCAD}#side div.section-header h3{border-bottom:1px solid #BDDCAD}#side hr{background:#BDDCAD;color:#BDDCAD}ul.sidebar-menu li.loading a{background:#EDFFDC url(img/spinner.gif) no-repeat 171px .5em!important}#side .collapsible h2.sidebar-title{background:transparent url(img/toggle_up_dark.png) no-repeat center right!important}#side .collapsible.collapsed h2.sidebar-title{background:transparent url(img/toggle_down_dark.png) no-repeat center right!important}#side ul.lists-links li a em{background:url(https://s3.amazonaws.com/twitter_production/a/1258070043/images/arrow_right_dark.png) no-repeat left top}#side span.pipe{border-left:1px solid #BDDCAD}#list_subscriptions span.view-all,#list_memberships span.view-all,#profile span.view-all,#profile_favorites span.view-all,#following span.view-all,#followers span.view-all{border-left:0}a.edit-list{border-right:1px solid #BDDCAD!important}body#show #content .meta a.screen-name,#content .shared-content .screen-name,a,#content tr.hentry:hover a,body#profile #content div.hentry:hover a,#side .stats a:hover span.stats_count,#side div.user_icon a:hover,li.verified-profile a:hover,#side .promotion .definition strong,p.list-numbers a:hover,#side div.user_icon a:hover span,#content .tabMenu li a,.translator-profile a:hover,#side_name{color:#0084B4}nav:hover{box-shadow:0 0 10px #0084B4;-webkit-box-shadow:0 0 10px #0084B4}\r
+/*Twitter Classic*/
+body{background:#9AE4E8 url(http://s3.amazonaws.com/twitter_production/images/themes/theme16/bg.gif) fixed no-repeat top left}body,ul#tabMenu li a,#side .section h1,#side .stat a,#side .stats a span.stats_count,#side div.section-header h1,#side div.user_icon a,#side div.user_icon a:hover,#side div.section-header h3.faq-header,ul.sidebar-menu li.active a,li.verified-profile a,#side .promotion a,body #content .list-header h2,p.list-numbers a,.bar h3 label,body.timeline #content h1,.list-header h2 a span,#content .tabMenu li.active a,body#direct_messages #content .tabMenu #inbox_tab a,body#inbox #content .tabMenu #inbox_tab a,body#sent #content .tabMenu #sent_tab a,body#direct_messages #content .tabMenu #inbox_tab a,body#retweets_by_others #content .tabMenu #retweets_by_others_tab a,body#retweets #content .tabMenu #retweets_tab a,body#retweeted_by_others #content .tabMenu #retweeted_by_others_tab a,body#retweeted_of_mine #content .tabMenu #retweeted_of_mine_tab a,.translator-profile a,#owners_lists h2 a{color:#333}#side_base{border-left:1px solid #BDDCAD;background-color:#DFC}ul.sidebar-menu li.active a,ul.sidebar-menu li a:hover,#side div#custom_search.active,#side .promotion,.notify div{background-color:#EDFFDC}.list-header,.list-controls,ul.sidebar-list li.active a,ul.sidebar-list li a:hover{background-color:#DFC!important}#side .actions,#side .promo{border:1px solid #BDDCAD}#side div.section-header h3{border-bottom:1px solid #BDDCAD}#side hr{background:#BDDCAD;color:#BDDCAD}ul.sidebar-menu li.loading a{background:#EDFFDC url(img/spinner.gif) no-repeat 171px .5em!important}#side .collapsible h2.sidebar-title{background:transparent url(img/toggle_up_dark.png) no-repeat center right!important}#side .collapsible.collapsed h2.sidebar-title{background:transparent url(img/toggle_down_dark.png) no-repeat center right!important}#side ul.lists-links li a em{background:url(https://s3.amazonaws.com/twitter_production/a/1258070043/images/arrow_right_dark.png) no-repeat left top}#side span.pipe{border-left:1px solid #BDDCAD}#list_subscriptions span.view-all,#list_memberships span.view-all,#profile span.view-all,#profile_favorites span.view-all,#following span.view-all,#followers span.view-all{border-left:0}a.edit-list{border-right:1px solid #BDDCAD!important}body#show #content .meta a.screen-name,#content .shared-content .screen-name,a,#content tr.hentry:hover a,body#profile #content div.hentry:hover a,#side .stats a:hover span.stats_count,#side div.user_icon a:hover,li.verified-profile a:hover,#side .promotion .definition strong,p.list-numbers a:hover,#side div.user_icon a:hover span,#content .tabMenu li a,.translator-profile a:hover,#side_name{color:#0084B4}nav:hover{box-shadow:0 0 10px #0084B4;-webkit-box-shadow:0 0 10px #0084B4}
 /*Do you miss old times? XD*/
\ No newline at end of file
index 0a60aea..3eea644 100644 (file)
@@ -1,2 +1,2 @@
-/*Pink*/\r
+/*Pink*/
 body{background:#F69 url(http://s3.amazonaws.com/twitter_production/images/themes/theme11/bg.gif) fixed repeat top left}body,ul#tabMenu li a,#side .section h1,#side .stat a,#side .stats a span.stats_count,#side div.section-header h1,#side div.user_icon a,#side div.user_icon a:hover,#side div.section-header h3.faq-header,ul.sidebar-menu a.active,li.verified-profile a,#side .promotion a,body #content .list-header h2,p.list-numbers a,.bar h3 label,body.timeline #content h1,.list-header h2 a span,#content .tabMenu li.active a,body#direct_messages #content .tabMenu #inbox_tab a,body#inbox #content .tabMenu #inbox_tab a,body#sent #content .tabMenu #sent_tab a,body#direct_messages #content .tabMenu #inbox_tab a,body#retweets_by_others #content .tabMenu #retweets_by_others_tab a,body#retweets #content .tabMenu #retweets_tab a,body#retweeted_by_others #content .tabMenu #retweeted_by_others_tab a,body#retweeted_of_mine #content .tabMenu #retweeted_of_mine_tab a,.translator-profile a,#owners_lists h2 a{color:#362720}#side_base{border-left:1px solid #C36;background-color:#E5507E}ul.sidebar-menu a.active,ul.sidebar-menu li a:hover,#side div#custom_search.active,#side .promotion,.notify div{background-color:#FD6896}.list-header,.list-controls,ul.sidebar-list li.active a,ul.sidebar-list li a:hover{background-color:#E5507E!important}#side .actions,#side .promo{border:1px solid #C36}#side div.section-header h3{border-bottom:1px solid #C36}#side hr{background:#C36;color:#C36}ul.sidebar-menu li.loading a{background:#FD6896 url(https://s3.amazonaws.com/twitter_production/a/1258070043/images/spinner.gif) no-repeat 171px .5em!important}#side .collapsible h2.sidebar-title{background:transparent url(https://s3.amazonaws.com/twitter_production/a/1258070043/images/toggle_up_dark.png) no-repeat center right!important}#side .collapsible.collapsed h2.sidebar-title{background:transparent url(https://s3.amazonaws.com/twitter_production/a/1258070043/images/toggle_down_dark.png) no-repeat center right!important}#side ul.lists-links li a em{background:url(https://s3.amazonaws.com/twitter_production/a/1258070043/images/arrow_right_dark.png) no-repeat left top}#side span.pipe{border-left:1px solid #C36}#list_subscriptions span.view-all,#list_memberships span.view-all,#profile span.view-all,#profile_favorites span.view-all,#following span.view-all,#followers span.view-all{border-left:0}a.edit-list{border-right:1px solid #C36!important}body#show #content .meta a.screen-name,#content .shared-content .screen-name,a,#content tr.hentry:hover a,body#profile #content div.hentry:hover a,#side .stats a:hover span.stats_count,#side div.user_icon a:hover,li.verified-profile a:hover,#side .promotion .definition strong,p.list-numbers a:hover,#side div.user_icon a:hover span,#content .tabMenu li a,.translator-profile a:hover,#side_name{color:#B40B43}nav:hover{box-shadow:0 0 10px #B40B43;-webkit-box-shadow:0 0 10px #B40B43}
\ No newline at end of file
index a5251b6..dc2fa14 100644 (file)
@@ -1,2 +1,2 @@
-/*by @lgsoltek*/\r
+/*by @lgsoltek*/
 body{background:#F7AD71}body,ul#tabMenu li a,#side .section h1,#side .stat a,#side .stats a span.stats_count,#side div.section-header h1,#side div.user_icon a,#side div.user_icon a:hover,#side div.section-header h3.faq-header,ul.sidebar-menu a.active,li.verified-profile a,#side .promotion a,body #content .list-header h2,p.list-numbers a,.bar h3 label,body.timeline #content h1,.list-header h2 a span,#content .tabMenu li.active a,body#direct_messages #content .tabMenu #inbox_tab a,body#inbox #content .tabMenu #inbox_tab a,body#sent #content .tabMenu #sent_tab a,body#direct_messages #content .tabMenu #inbox_tab a,body#retweets_by_others #content .tabMenu #retweets_by_others_tab a,body#retweets #content .tabMenu #retweets_tab a,body#retweeted_by_others #content .tabMenu #retweeted_by_others_tab a,body#retweeted_of_mine #content .tabMenu #retweeted_of_mine_tab a,.translator-profile a,#owners_lists h2 a{color:#873800}#side_base{border-left:1px solid #D4A72A;background-color:#D4A386}ul.sidebar-menu a.active,ul.sidebar-menu li a:hover,#side div#custom_search.active,#side .promotion,.notify div{background-color:#E8B79A}.list-header,.list-controls,ul.sidebar-list li.active a,ul.sidebar-list li a:hover{background-color:#D4A386!important}#side .actions,#side .promo{border:1px solid #D4A72A}#side div.section-header h3{border-bottom:1px solid #D4A72A}#side hr{background:#D4A72A;color:#D4A72A}ul.sidebar-menu li.loading a{background:#E8B79A url(https://s3.amazonaws.com/twitter_production/a/1258070043/images/spinner.gif) no-repeat 171px .5em!important}#side .collapsible h2.sidebar-title{background:transparent url(https://s3.amazonaws.com/twitter_production/a/1258070043/images/toggle_up_dark.png) no-repeat center right!important}#side .collapsible.collapsed h2.sidebar-title{background:transparent url(https://s3.amazonaws.com/twitter_production/a/1258070043/images/toggle_down_dark.png) no-repeat center right!important}#side ul.lists-links li a em{background:url(https://s3.amazonaws.com/twitter_production/a/1258070043/images/arrow_right_dark.png) no-repeat left top}#side span.pipe{border-left:1px solid #D4A72A}#list_subscriptions span.view-all,#list_memberships span.view-all,#profile span.view-all,#profile_favorites span.view-all,#following span.view-all,#followers span.view-all{border-left:0}a.edit-list{border-right:1px solid #D4A72A!important}body#show #content .meta a.screen-name,#content .shared-content .screen-name,a,#content tr.hentry:hover a,body#profile #content div.hentry:hover a,#side .stats a:hover span.stats_count,#side div.user_icon a:hover,li.verified-profile a:hover,#side .promotion .definition strong,p.list-numbers a:hover,#side div.user_icon a:hover span,#content .tabMenu li a,.translator-profile a:hover,#side_name{color:#D94100}nav:hover{box-shadow:0 0 10px #D94100;-webkit-box-shadow:0 0 10px #D94100}
\ No newline at end of file
index dd002b6..1270891 100644 (file)
@@ -1,2 +1,2 @@
-/*by @lgsoltek*/\r
+/*by @lgsoltek*/
 body{background:#292945;background-position:0 0;padding-top:0!important;_padding-top:10px!important}body,ul#tabMenu li a,#side .section h1,#side .stat a,#side .stats a span.stats_count,#side div.section-header h1,#side div.user_icon a,#side div.user_icon a:hover,#side div.section-header h3.faq-header,ul.sidebar-menu a.active,li.verified-profile a,#side .promotion a,body #content .list-header h2,p.list-numbers a,.bar h3 label,body.timeline #content h1,.list-header h2 a span,#content .tabMenu li.active a,body#direct_messages #content .tabMenu #inbox_tab a,body#inbox #content .tabMenu #inbox_tab a,body#sent #content .tabMenu #sent_tab a,body#direct_messages #content .tabMenu #inbox_tab a,body#retweets_by_others #content .tabMenu #retweets_by_others_tab a,body#retweets #content .tabMenu #retweets_tab a,body#retweeted_by_others #content .tabMenu #retweeted_by_others_tab a,body#retweeted_of_mine #content .tabMenu #retweeted_of_mine_tab a,.translator-profile a,#owners_lists h2 a{color:#6F7194}#side_base{border-left:1px solid #F9E6FC;background-color:#0E0F21}ul.sidebar-menu a.active,ul.sidebar-menu li a:hover,#side div#custom_search.active,#side .promotion,.notify div{background-color:#262739}.list-header,.list-controls,ul.sidebar-list li.active a,ul.sidebar-list li a:hover,.list-header-inner{background-color:#0E0F21!important}#side .actions,#side .promo{border:1px solid #F9E6FC}#side div.section-header h3{border-bottom:1px solid #F9E6FC}#side p.sidebar-location{border-bottom:1px dotted #F9E6FC}#side hr{background:#F9E6FC;color:#F9E6FC}ul.sidebar-menu li.loading a{background:#262739 url(https://s3.amazonaws.com/twitter_production/a/1260817727/images/spinner.gif) no-repeat 171px .5em!important}#side .collapsible h2.sidebar-title{background:transparent url(https://s3.amazonaws.com/twitter_production/a/1260817727/images/toggle_up_light.png) no-repeat center right!important}#side .collapsible.collapsed h2.sidebar-title{background:transparent url(https://s3.amazonaws.com/twitter_production/a/1260817727/images/toggle_down_light.png) no-repeat center right!important}#side ul.lists-links li a em{background:url(https://s3.amazonaws.com/twitter_production/a/1260817727/images/arrow_right_light.png) no-repeat left top}#side span.pipe{border-left:1px solid #F9E6FC}#list_subscriptions span.view-all,#list_memberships span.view-all,#profile span.view-all,#profile_favorites span.view-all,#following span.view-all,#followers span.view-all{border-left:0}a.edit-list{border-right:1px solid #F9E6FC!important}body#show #content .meta a.screen-name,#content .shared-content .screen-name,#content .meta .byline a,a,#content tr.hentry:hover a,body#profile #content div.hentry:hover a,#side .stats a:hover span.stats_count,#side div.user_icon a:hover,li.verified-profile a:hover,#side .promotion .definition strong,p.list-numbers a:hover,#side div.user_icon a:hover span,#content .tabMenu li a,.translator-profile a:hover,#local_trend_locations li a,.modal-content .list-slug,#side_name{color:#6B5B78}nav:hover{box-shadow:0 0 10px #6B5B78;-webkit-box-shadow:0 0 10px #6B5B78}
\ No newline at end of file
index 0741332..95b2556 100644 (file)
@@ -1,2 +1,2 @@
-/*theme 13 from twitter.com*/\r
+/*theme 13 from twitter.com*/
 body{background:#B2DFDA url(http://s3.amazonaws.com/twitter_production/images/themes/theme13/bg.gif) fixed no-repeat;background-position:0 0;padding-top:0!important;_padding-top:10px!important}body,ul#tabMenu li a,#side .section h1,#side .stat a,#side .stats a span.stats_count,#side div.section-header h1,#side div.user_icon a,#side div.user_icon a:hover,#side div.section-header h3.faq-header,ul.sidebar-menu a.active,li.verified-profile a,#side .promotion a,body #content .list-header h2,p.list-numbers a,.bar h3 label,body.timeline #content h1,.list-header h2 a span,#content .tabMenu li.active a,body#direct_messages #content .tabMenu #inbox_tab a,body#inbox #content .tabMenu #inbox_tab a,body#sent #content .tabMenu #sent_tab a,body#direct_messages #content .tabMenu #inbox_tab a,body#retweets_by_others #content .tabMenu #retweets_by_others_tab a,body#retweets #content .tabMenu #retweets_tab a,body#retweeted_by_others #content .tabMenu #retweeted_by_others_tab a,body#retweeted_of_mine #content .tabMenu #retweeted_of_mine_tab a,.translator-profile a,#owners_lists h2 a{color:#333}.unconfirmed-email-banner{border-bottom:solid 1px #eee}#side_base{border-left:1px solid #eee;background-color:#fff}ul.sidebar-menu a.active,ul.sidebar-menu li a:hover,#side div#custom_search.active,#side .promotion,.notify div{background-color:transparent}.list-header,.list-controls,ul.sidebar-list li.active a,ul.sidebar-list li a:hover,.list-header-inner{background-color:#fff!important}#side .actions,#side .promo{border:1px solid #eee}#side div.section-header h3{border-bottom:1px solid #eee}#side p.sidebar-location{border-bottom:1px dotted #eee}#side hr{background:#eee;color:#eee}ul.sidebar-menu li.loading a{background:transparent url(https://s3.amazonaws.com/twitter_production/a/1265242857/images/spinner.gif) no-repeat 171px .5em!important}#side .collapsible h2.sidebar-title{background:transparent url(https://s3.amazonaws.com/twitter_production/a/1265242857/images/toggle_up_dark.png) no-repeat center right!important}#side .collapsible.collapsed h2.sidebar-title{background:transparent url(https://s3.amazonaws.com/twitter_production/a/1265242857/images/toggle_down_dark.png) no-repeat center right!important}#side ul.lists-links li a em{background:url(https://s3.amazonaws.com/twitter_production/a/1265242857/images/arrow_right_dark.png) no-repeat left top}#side span.pipe{border-left:1px solid #eee}#list_subscriptions span.view-all,#list_memberships span.view-all,#profile span.view-all,#profile_favorites span.view-all,#following span.view-all,#followers span.view-all{border-left:0}a.edit-list{border-right:1px solid #eee!important}body#show #content .meta a.screen-name,#content .shared-content .screen-name,#content .meta .byline a,a,#content tr.hentry:hover a,body#profile #content div.hentry:hover a,#side .stats a:hover span.stats_count,#side div.user_icon a:hover,li.verified-profile a:hover,#side .promotion .definition strong,p.list-numbers a:hover,#side div.user_icon a:hover span,#content .tabMenu li a,.translator-profile a:hover,#local_trend_locations li a,.modal-content .list-slug,#side_name{color:#93A644}nav:hover{box-shadow:0 0 10px #93A644;-webkit-box-shadow:0 0 10px #93A644}
\ No newline at end of file
index a256f31..d3e43d0 100644 (file)
@@ -1,2 +1,2 @@
-/*theme 15 from twitter.com*/\r
+/*theme 15 from twitter.com*/
 body{background:#022330 url(http://s3.amazonaws.com/twitter_production/images/themes/theme15/bg.png) fixed no-repeat;background-position:0 0;padding-top:0!important;_padding-top:10px!important}body,ul#tabMenu li a,#side .section h1,#side .stat a,#side .stats a span.stats_count,#side div.section-header h1,#side div.user_icon a,#side div.user_icon a:hover,#side div.section-header h3.faq-header,ul.sidebar-menu a.active,li.verified-profile a,#side .promotion a,body #content .list-header h2,p.list-numbers a,.bar h3 label,body.timeline #content h1,.list-header h2 a span,#content .tabMenu li.active a,body#direct_messages #content .tabMenu #inbox_tab a,body#inbox #content .tabMenu #inbox_tab a,body#sent #content .tabMenu #sent_tab a,body#direct_messages #content .tabMenu #inbox_tab a,body#retweets_by_others #content .tabMenu #retweets_by_others_tab a,body#retweets #content .tabMenu #retweets_tab a,body#retweeted_by_others #content .tabMenu #retweeted_by_others_tab a,body#retweeted_of_mine #content .tabMenu #retweeted_of_mine_tab a,.translator-profile a,#owners_lists h2 a{color:#333}.unconfirmed-email-banner{border-bottom:solid 1px #a8c7f7}#side_base{border-left:1px solid #a8c7f7;background-color:#C0DFEC}ul.sidebar-menu a.active,ul.sidebar-menu li a:hover,#side div#custom_search.active,#side .promotion,.notify div{background-color:transparent}.list-header,.list-controls,ul.sidebar-list li.active a,ul.sidebar-list li a:hover,.list-header-inner{background-color:#C0DFEC!important}#side .actions,#side .promo{border:1px solid #a8c7f7}#side div.section-header h3{border-bottom:1px solid #a8c7f7}#side p.sidebar-location{border-bottom:1px dotted #a8c7f7}#side hr{background:#a8c7f7;color:#a8c7f7}ul.sidebar-menu li.loading a{background:transparent url(https://s3.amazonaws.com/twitter_production/a/1265242857/images/spinner.gif) no-repeat 171px .5em!important}#side .collapsible h2.sidebar-title{background:transparent url(https://s3.amazonaws.com/twitter_production/a/1265242857/images/toggle_up_dark.png) no-repeat center right!important}#side .collapsible.collapsed h2.sidebar-title{background:transparent url(https://s3.amazonaws.com/twitter_production/a/1265242857/images/toggle_down_dark.png) no-repeat center right!important}#side ul.lists-links li a em{background:url(https://s3.amazonaws.com/twitter_production/a/1265242857/images/arrow_right_dark.png) no-repeat left top}#side span.pipe{border-left:1px solid #a8c7f7}#list_subscriptions span.view-all,#list_memberships span.view-all,#profile span.view-all,#profile_favorites span.view-all,#following span.view-all,#followers span.view-all{border-left:0}a.edit-list{border-right:1px solid #a8c7f7!important}body#show #content .meta a.screen-name,#content .shared-content .screen-name,#content .meta .byline a,a,#content tr.hentry:hover a,body#profile #content div.hentry:hover a,#side .stats a:hover span.stats_count,#side div.user_icon a:hover,li.verified-profile a:hover,#side .promotion .definition strong,p.list-numbers a:hover,#side div.user_icon a:hover span,#content .tabMenu li a,.translator-profile a:hover,#local_trend_locations li a,.modal-content .list-slug,#side_name{color:#0084B4}nav:hover{box-shadow:0 0 10px #0084B4;-webkit-box-shadow:0 0 10px #0084B4}
\ No newline at end of file
index 46944ff..8e1f5a6 100644 (file)
@@ -1,2 +1,2 @@
-/*theme 18 from twitter.com*/\r
+/*theme 18 from twitter.com*/
 body{background:#ACDED6 url(http://s3.amazonaws.com/twitter_production/images/themes/theme18/bg.gif) fixed no-repeat;background-position:0 0;padding-top:0!important;_padding-top:10px!important}body,ul#tabMenu li a,#side .section h1,#side .stat a,#side .stats a span.stats_count,#side div.section-header h1,#side div.user_icon a,#side div.user_icon a:hover,#side div.section-header h3.faq-header,ul.sidebar-menu a.active,li.verified-profile a,#side .promotion a,body #content .list-header h2,p.list-numbers a,.bar h3 label,body.timeline #content h1,.list-header h2 a span,#content .tabMenu li.active a,body#direct_messages #content .tabMenu #inbox_tab a,body#inbox #content .tabMenu #inbox_tab a,body#sent #content .tabMenu #sent_tab a,body#direct_messages #content .tabMenu #inbox_tab a,body#retweets_by_others #content .tabMenu #retweets_by_others_tab a,body#retweets #content .tabMenu #retweets_tab a,body#retweeted_by_others #content .tabMenu #retweeted_by_others_tab a,body#retweeted_of_mine #content .tabMenu #retweeted_of_mine_tab a,.translator-profile a,#owners_lists h2 a{color:#333}.unconfirmed-email-banner{border-bottom:solid 1px #EEE}#side_base{border-left:1px solid #EEE;background-color:#F6F6F6}ul.sidebar-menu a.active,ul.sidebar-menu li a:hover,#side div#custom_search.active,#side .promotion,.notify div{background-color:transparent}.list-header,.list-controls,ul.sidebar-list li.active a,ul.sidebar-list li a:hover,.list-header-inner{background-color:#F6F6F6!important}#side .actions,#side .promo{border:1px solid #EEE}#side div.section-header h3{border-bottom:1px solid #EEE}#side p.sidebar-location{border-bottom:1px dotted #EEE}#side hr{background:#EEE;color:#EEE}ul.sidebar-menu li.loading a{background:transparent url(https://s3.amazonaws.com/twitter_production/a/1265242857/images/spinner.gif) no-repeat 171px .5em!important}#side .collapsible h2.sidebar-title{background:transparent url(https://s3.amazonaws.com/twitter_production/a/1265242857/images/toggle_up_dark.png) no-repeat center right!important}#side .collapsible.collapsed h2.sidebar-title{background:transparent url(https://s3.amazonaws.com/twitter_production/a/1265242857/images/toggle_down_dark.png) no-repeat center right!important}#side ul.lists-links li a em{background:url(https://s3.amazonaws.com/twitter_production/a/1265242857/images/arrow_right_dark.png) no-repeat left top}#side span.pipe{border-left:1px solid #EEE}#list_subscriptions span.view-all,#list_memberships span.view-all,#profile span.view-all,#profile_favorites span.view-all,#following span.view-all,#followers span.view-all{border-left:0}a.edit-list{border-right:1px solid #EEE!important}body#show #content .meta a.screen-name,#content .shared-content .screen-name,#content .meta .byline a,a,#content tr.hentry:hover a,body#profile #content div.hentry:hover a,#side .stats a:hover span.stats_count,#side div.user_icon a:hover,li.verified-profile a:hover,#side .promotion .definition strong,p.list-numbers a:hover,#side div.user_icon a:hover span,#content .tabMenu li a,.translator-profile a:hover,#local_trend_locations li a,.modal-content .list-slug,#side_name{color:#038543}nav:hover{box-shadow:0 0 10px #038543;-webkit-box-shadow:0 0 10px #038543}
\ No newline at end of file
index 7834a04..19e4b53 100644 (file)
@@ -1,2 +1,2 @@
-/*Minimal Theme Inspired by @Ratoo*/\r
+/*Minimal Theme Inspired by @Ratoo*/
 body{background:#FFF}a,#content tr.hentry:hover a,body#profile #content div.hentry:hover a,#side .stats a:hover span.stats_count,#side div.user_icon a:hover,li.verified-profile a:hover,#side .promotion .definition strong,p.list-numbers a:hover,#side div.user_icon a:hover span,#content .tabMenu li a,.translator-profile a:hover,#side_name{color:#000;}body,ul#tabMenu li a,#side .section h1,#side .stat a,#side .stats a span.stats_count,#side div.section-header h1,#side div.user_icon a,#side div.user_icon a:hover,#side div.section-header h3.faq-header,ul.sidebar-menu a.active,li.verified-profile a,#side .promotion a,body #content .list-header h2,p.list-numbers a,.bar h3 label,body.timeline #content h1,.list-header h2 a span,#content .tabMenu li.active a,body#direct_messages #content .tabMenu #inbox_tab a,body#inbox #content .tabMenu #inbox_tab a,body#sent #content .tabMenu #sent_tab a,body#direct_messages #content .tabMenu #inbox_tab a,body#retweets_by_others #content .tabMenu #retweets_by_others_tab a,body#retweets #content .tabMenu #retweets_tab a,body#retweeted_by_others #content .tabMenu #retweeted_by_others_tab a,body#retweeted_of_mine #content .tabMenu #retweeted_of_mine_tab a,.translator-profile a,#owners_lists h2 a{color:#606060;}#side_base{border-left:1px solid gray;background-color:#FFF;}ul.sidebar-menu a.active,ul.sidebar-menu li a:hover,#side div#custom_search.active,#side .promotion,.notify div{background-color:#F7F7F7;}.list-header,.list-controls,ul.sidebar-list li.active a,ul.sidebar-list li a:hover{background-color:#FFF!important;}#side .actions,#side .promo{border:1px solid gray;}#side div.section-header h3{border-bottom:1px solid gray;}#side hr{background:gray;color:gray;}nav:hover{box-shadow:0 0 1px gray;-webkit-box-shadow:0 0 1px gray}
\ No newline at end of file
index 3e9b6cb..3c43ea3 100644 (file)
--- a/user.php
+++ b/user.php
                header('location: error.php');exit();
        }
 
-       $p = 1;
-       if (isset($_GET['p'])) {
-               $p = (int) $_GET['p'];
-               if ($p <= 0) $p = 1;
-       }
-
        $t = getTwitter();
        $userid = $_GET['id'];
+       $since_id = isset($_GET['since_id']) ? $_GET['since_id'] : false;
+       $max_id = isset($_GET['max_id']) ? $_GET['max_id'] : false;
        if (isset($_GET['fav'])) {
-               $statuses = $t->getFavorites($p, $userid);
+               $statuses = $t->getFavorites($userid, $since_id, $max_id);
        } else {
-               $statuses = $t->userTimeline($p, $userid);
+               $statuses = $t->userTimeline($userid, $since_id, $max_id);
        }
        
        if ($statuses === false) {
                header('location: error.php');exit;
        }
+       if ($t->http_code == 429) {
+               $apiout = true;
+       } else {
+               $aptout = false;
+       }
+
        $user = $t->showUser($userid);
        if (strcasecmp($userid,$t->username) == 0) {header('location: profile.php');exit();}
 
@@ -48,7 +50,7 @@
                $userinfo['friends_count'] = $user->friends_count;
                $userinfo['statuses_count'] = $user->statuses_count;
                $userinfo['followers_count'] = $user->followers_count;
-               $userinfo['url'] = $user->url;
+               $userinfo['url'] = $user->entities->url->urls[0]->expanded_url ? $user->entities->url->urls[0]->expanded_url : $user->url;
                $userinfo['description'] = formatText($user->description);
                $userinfo['location'] = $user->location;
                $userinfo['date_joined'] = date('Y-m-d', format_time($user->created_at)); //from dabr
                $empty = count($statuses) == 0? true: false;
                if ($empty) {
                        echo "<div id=\"empty\">No tweet to display.</div>";
+               } else if ($apiout) {
+                       echo "<div id=\"empty\">API quota is used out, please wait for a moment before next refresh.</div>";
                } else {
                        $output = '<ol class="timeline" id="allTimeline">';
+                       $firstid = false;
+                       $lastid = false;
                        foreach ($statuses as $status) {
                                if (isset($status->retweeted_status)) {
                                        $output .= format_retweet($status);
                                } else { 
-                               $output .= format_timeline($status,$t->username);
+                                       $output .= format_timeline($status,$t->username);
                                }
+                               if(!$firstid)
+                                       $firstid = $status->id_str;
+                               $lastid = $status->id_str;
                        }
+                       $lastid = bcsub($lastid, "1");
+
                        $output .= "</ol><div id=\"pagination\">";
                        if ($_GET['fav'] == true) {
-                               if ($p >1) $output .= "<a id=\"more\" class=\"round more\" style=\"float: left;\" href=\"user.php?id=$userid&fav=true&p=" . ($p-1) . "\">Back</a>";
-                               if (!$empty) $output .= "<a id=\"more\" class=\"round more\" style=\"float: right;\" href=\"user.php?id=$userid&fav=true&p=" . ($p+1) . "\">Next</a>";
+                               $output .= "<a id=\"less\" class=\"round more\" style=\"float: left;\" href=\"user.php?id=$userid&fav=true&since_id={$firstid}\">Back</a>";
+                               $output .= "<a id=\"more\" class=\"round more\" style=\"float: right;\" href=\"user.php?id=$userid&fav=true&max_id={$lastid}\">Next</a>";
                        } else {
-                               if ($p >1) $output .= "<a id=\"more\" class=\"round more\" style=\"float: left;\" href=\"user.php?id=$userid&p=" . ($p-1) . "\">Back</a>";
-                               if (!$empty) $output .= "<a id=\"more\" class=\"round more\" style=\"float: right;\" href=\"user.php?id=$userid&p=" . ($p+1) . "\">Next</a>";
+                               $output .= "<a id=\"less\" class=\"round more\" style=\"float: left;\" href=\"user.php?id=$userid&since_id={$firstid}\">Back</a>";
+                               $output .= "<a id=\"more\" class=\"round more\" style=\"float: right;\" href=\"user.php?id=$userid&max_id={$lastid}\">Next</a>";
                        }
                        $output .= "</div>";
                        echo $output;