【獨家】第二回 陳冠希和頭文字女主角鈴木杏親熱約會京都(全5回)連載中

2008年4月22日 星期二 | 標籤: | 0 意見 |

【獨家】第一回 陳冠希和頭文字女主角鈴木杏親熱約會京都(全5回)連載中

2008年4月21日 星期一 | 標籤: | 0 意見 |

韓國超强街舞

2008年4月16日 星期三 | 標籤: | 0 意見 |

Canon DJ+BeatBox version with Last For One dancing

| 標籤: | 0 意見 |

又一位老外唱中文歌-----超強

| 標籤: | 0 意見 |

[08春季 預告] CHANGE [木村拓哉/深津繪里/加藤羅莎/寺尾聰/阿部寛]

2008年4月11日 星期五 | 標籤: | 0 意見 |

月 9:CHANGE
CHANGE
劇 名:CHANGE

首 播:2008-04
時 間:21:00
週 期:週一(月)
電視台:富士電視CX



○  STAFF
脚本:福田靖
配樂:延近輝之
製作:後藤博幸,清水一幸
アソシエイトプロデュース:石原隆
導演:澤田鎌作,平野真
主題曲:マドンナ「マイルズ.アウェイ」


○  演 員

木村拓哉(朝倉啓太・35)/深津絵里(美山理香・35)/阿部寛(韮沢勝利・44)/加藤罗莎(宮本ひかる・23)/寺尾聰(神林正一・59)


和政治無關的小學老師成為了首相。即使被身經百煉的議員們玩弄也不忘為了平民們而奮鬥

主題歌:MADONNA/MILES AWAY マドンナ「マイルズ.アウェイ」

相關報導

新聞地址http://www.sanspo.com/geino/top/gt200802/gt2008021901.html
翻譯:CLOVER

木村拓哉富士月九變身總理大臣!目標獲得高支持率

木村拓哉終於要飾演首相啦!18日獲悉,SMAP成員木村拓哉(35)將在4月開播的富士電視台月九劇(周一晚9點,題未定)主演總理大臣的角色。這是一部描寫一個男人由於一次轉機,而涉足政界,成為總理大臣的奮斗經歷的生活劇。曾經成功飾演過許多人物形象的收視率男木村,他的高支持率讓人注目。女演員深津繪裡將以秘書一角共同出演此劇。

鋼琴家、檢察官、冰球員、賽車手,成功飾演了多種人物形象“電視劇英雄”——木村,終於將登上日本的頂峰。

新劇將政治作為一種充滿夢想和希望的樂趣來描寫。每天被孩子們圍繞著,過著充實的日子的小學教師(木村)由於一件意想不到的事情涉足政界,最終成為了總理大臣。即使遭到老謀深算的政治家們的捉弄,也依然和那些立志強國的人們一起奮斗。不忘普通公民時的初衷,以市井人民的視線,可以說他總是以不畏艱險的總理姿態影響著周圍的人們。

角色人物年齡設定與木村真實年齡相仿,由此誕生了年僅35歲最年輕的總理。可以說只有像國民性人氣頗高的SMAP成員木村,才能演好這麼重量級的角色。

同局的制片人後籐博幸說到,”希望讓更多年齡層的觀眾觀賞。我覺得也只有木村才能演好這位具有現實性和娛樂性的有魅力的總理大臣。”此劇將會被制作成為一部可以讓各年齡層觀眾喜歡的健康向上的電視劇。

說起木村,他是日本屈指的藝人。從[悠長假期]開始,至今已主演了多部富士月九劇,且收視率也相當之高。此次,是他時隔三年登場月九。那麼,他是否能獲得最高支持率呢?讓我們拭目以待他的精彩演技吧。

另外,支持著木村總理的能干秘書的角色將由深津來飾演。自從平成14年,和木村合演了 [從天而降的一億顆星]一來,這是時隔6年來的又一次合作。這次她將飾演的是出身名門大學,懷抱影響全日本野心的女強人,但逐漸被木村總理的人性所動容, 2人的戀愛線也是看點。3月開拍。

制作過[HERO][西游記]等劇的最強陣容集結!

新劇腳本的擔當是制作了[HERO]的連續劇和電影版的福田靖氏。演出擔當是制作了[HERO]特別版和[西游記]連續劇&電影版的澤田鐮作。可謂是最強陣容集結。




娛樂場已開!

| 標籤: | 0 意見 |





成功轉做直版了

2008年4月1日 星期二 | 標籤: | 0 意見 |






超級模仿Michael Jackson - Beatbox

2008年3月16日 星期日 | 標籤: | 0 意見 |

台灣我猜之口技BeatBox

| 標籤: | 0 意見 |

法拉利超級車模

| 標籤: | 0 意見 |

看看什麼叫暴力! Kenyon Martin

| 標籤: | 0 意見 |

Naturally7在巴黎地铁里的BeatBox(In The Air Tonight)

| 標籤: | 0 意見 |

Forum

2008年3月15日 星期六 | 標籤: | 0 意見 |

hongkong-live 已經收版了

星龜飼養

2008年3月11日 星期二 | 標籤: | 0 意見 |


珍珠龜飼養

| 標籤: | 0 意見 |

珍珠龜又名盾龜又名草龜....係水龜之一
雖說係水龜但佢地的偏各陸地多....水性較差
由其係BB...佢地唔係好識沈/游的養佢地的

水位:最底=無水, 最高=佢身高的*5左右(不是站位)
缸內的設計要有濾水器, 暖管, 隱藏處....
食物以龜糧, 蝦, 魚仔, 蔬菜......等等

求婚大作戰

2008年3月10日 星期一 | 標籤: | 0 意見 |



[SP] 求婚大作戰 [山下智久/長澤雅美/榮倉奈奈/三上博史/藤木直人/平岡祐太/濱田岳]




演 員:


岩瀬健/山下智久 吉田礼/長澤 まさみ(長澤 雅美) 奥エリ/榮倉 奈々(榮倉 奈奈) 榎戸幹雄/平岡 祐太 鶴見尚/濱田 岳 妖精/三上博史(特別出演) 多田哲也/藤木直人 伊藤松憲/松重 豊(松重 豐)




禮(長澤雅美)聽了健(山下智久)的表白,從與多田(籐木直人)正在進行的婚禮中落跑,轉眼又過了一年。兩人雖然都很了解對方的心思,但卻始終無法邁出新的一步。這期間,繪裡(榮倉奈々)和小鶴(濱田岳)決定在夏威夷舉行婚禮,健,禮還有幹雄(平岡祐太)都來到了海邊的教堂。但是已經過了預定的時間婚禮還是沒有開始。雖然小鶴想方設法的拖延時間,但眾人最終還是發現新娘去向不明。早上一起床發現繪裡不見了蹤影,只留下了一張字條,上面寫道“我不明白鶴的心意”。看著向出席婚禮的人道歉的繪裡父母,還有失魂落魄的小鶴,健不由得想起一年前的自己,當他十分誠心的希望對繪裡一心一意的小鶴能夠得到幸福時,久未謀面的妖精(三上博史)再次出現了。面對還是猶豫不決與禮毫無進展的健,妖精顯得非常吃驚。但礙於友情的面上,他決定再給健一次回到過去的機會。健無論如何都要將新娘落跑的這段未來告訴小鶴,為了提醒小鶴而全力以赴…!

花羅漢疾病

2008年3月8日 星期六 | 標籤: | 0 意見 |

祗要保持水質的穩定,花羅漢發病的機會很少,偶爾發現花羅漢有不正常現象,應先詳細觀察,找出問題所在,不要隨便下藥。
花羅漢常發生的疾病 :
厭食 ─ 可能不適應新環境、飼料改變或生病。可觀察兩三天,若情況沒有改善可使用專治厭食藥物治療。
頭洞 ─ 缺乏營養或感染體內寄生蟲。 先使用維他命補充其營養,若情況沒有明顯改善則使用頭洞藥物治療。
爛鰭 ─ 細菌感染或受傷所致。 在細菌感染的情況下,應換掉部份舊水,可改善水質及減低細菌含量。使用甲基藍或福馬林。
白點 ─ 由白點寄生蟲引起。 將水溫提升至30度,使用甲基藍治療。
矇眼 ─ 眼睛受傷、細菌感染或水質不良影響。 換掉三份一魚缸水,每10公升水加入10至20克粗鹽,再提升溫度至三十度左右,觀察情況有否改善。細菌性感染可使用黃藥治療。

花羅漢繁殖

| 標籤: | 0 意見 |

花羅漢雄魚的體型基本上比雌魚大很多,身粗大的多為雄性;背鰭骨第1至6條較粗及圓為雄性,鰭骨較細及扁為雌性;背鰭無黑點多為雄性,背鰭有黑點雌性機會較高;生殖器呈 V 形為雄性,生殖器呈 U 形為雌性。
挑選己發情的雌雄花羅漢放入魚缸內,中間用透明膠片分隔兩魚數天,待兩魚的生殖器明顯凸出後取出分隔膠片,將花盆底放入缸內作為產卵器具。當魚卵受精後將雄魚取出,留下雌魚照顧魚卵(可使用甲基藍防止魚卵發霉)。小魚孵化後兩至三天待卵黃囊消退,即可餵飼豐年蝦幼體。

餵飼花羅漢

| 標籤: | 0 意見 |

由於花羅漢生長迅速,所以一天需要餵飼三數次,餌料的份量以魚兒在五分鐘內吃完為宜,避免殘餌影響水質。花羅漢對於食物並不揀擇,可使用活餌、冷藏餌或人工合成飼料。

飼養中的花羅漢

| 標籤: | 0 意見 |




花羅漢飼養

| 標籤: | 0 意見 |

很多人飼養花羅漢的初期,都是由小魚開始,亦因此使用小型水族箱飼養,但是這樣便會阻礙小魚的成長,需知花羅漢是一種生長速度極快的魚,而且成熟後身長超過一尺。或許一條小魚放在一個較大的水族箱內會給人一種空洞的感覺,但是較大的空間有利小魚加速成長,令長成後的花羅漢更大更壯。
由於花羅漢體質壯健,所以一般很少患病,使用一套有效的過濾系統,添加一些生化棉增加溶氧量,每星期換掉百份之二十的舊水,再配合均衡營養的食物,這樣魚兒便會茁壯成長。

飼養的中花羅漢

| 標籤: | 0 意見 |






挑選花羅漢

| 標籤: | 0 意見 |

由於花羅漢是美洲慈鯛雜交的品種,所以遺傳基因極不穩定,因此產下的小魚顏色各異,令人對長大後的花羅漢有無限期望。
挑選小魚要留意其身上的珠點,分佈不可太少;
墨斑鱗片從頭至尾要明顯;
身形要較寬較圓;
魚鰭完整、舒展直立、尾鰭寬大;
在一群小魚中選擇較大的,避免選擇離群獨處的小魚。
挑選成魚時要留意其隆起的頭部,需渾圓飽滿以及配合其短身高背的身形。嘴部不能太長,血紅的眼睛加上黑色眼珠。長有墨斑鱗片的花羅漢,其花紋要大且明顯,而墨斑鱗片需被銀色鱗片包住。珠點在魚體分佈均勻且亮麗。魚鰭需與身形整體配合且撐開有力。

Discuz! 6.0.0 安裝圖文教程

2008年3月7日 星期五 | 標籤: | 0 意見 |

第一步:下載適合自己的版本首先到下載所需版本的 Discuz! 6.0.0 到本地或服務器。第二步:解壓並上傳論壇程序到服務器上並且修改相應目錄權限 上傳論壇程序到服務器上 本次演示以 gbk 版本為例下載到本地,加壓縮得到如圖 1 所示的四個文件:只需要上傳 upload 這個目錄下面的所有文件到 FTP 上就可以了其中 users_guide.htm 為使用者使用說明書(本文檔);Usersguide 目錄為使用者使用說明書內容與圖utilities 目錄為論壇附帶工具將其中 upload 目錄下的所有文件使用 FTP 軟體上傳到空間,如圖 2 所示:




設置相關的目錄屬性,以便資料文件可以被程序正確讀寫 使用 FTP 軟體登錄您的服務器,將服務器上以下目錄、以及該目錄下面的所有文件的屬性設置為 777,win 主電腦請設置 internet 來賓帳戶可讀寫屬性。如果下面目錄中含有您沒有的目錄,就不用設置了。關於目錄權限修改可以參考:config.inc.php./templates./attachments./customavatars./forumdata./forumdata/templates./forumdata/cache./forumdata/threadcaches./forumdata/logs第三步:安裝過程上傳完畢后,在瀏覽器中運行安裝程序進入準備安裝頁面,如圖 3 所示:


上圖中閱讀許可協議后點擊“我同意”就進入到下面的檢查配置文件頁面,如圖 4 所示:

檢查配置過關后點擊“下一步”進入資料庫資訊配置頁面,如圖 5 所示:


注:如果是虛擬主電腦使用者,資料庫使用者名和密碼一般是由虛擬主電腦空間商提供;如果是獨立主電腦,資料庫使用者名和密碼就是你安裝 MySQL 時填寫的使用者名(一般為root)和密碼(建議新建個資料庫使用者安裝,使用 root 會有安全問題)。“系統Email”是指論壇系統使用者可以聯系到的 Email,一般都填寫站長的 Email 地址。在前台顯示為“聯系我們”這個連結。填寫好“資料庫使用者名”和“資料庫密碼”后,點擊“下一步”進入如圖 6 所示頁面:填寫管理員帳號密碼。:



上圖中填寫好管理員帳號密碼后,點擊“下一步”進入安裝頁面,如圖 7 所示:

安裝完畢點擊“恭喜您論壇安裝成功,點擊進入論壇首頁”則進入安裝好的論壇首頁,如圖 8 所示:
由Discuz!官方及Katia轉

Socket Programming in C

2008年3月6日 星期四 | 標籤: | 0 意見 |

source source
usage : ./udpClient server data1 ... dataN

/* fpont 12/99 */
/* pont.net */
/* udpClient.c */
#include
#include
#include
#include
#include
#include
#include
#include /* memset() */
#include /* select() */
#define REMOTE_SERVER_PORT 1500
#define MAX_MSG 100
int main(int argc, char *argv[]) {

int sd, rc, i;
struct sockaddr_in cliAddr, remoteServAddr;
struct hostent *h;
/* check command line args */
if(argc<3) {
printf("usage : %s ... \n", argv[0]);
exit(1);
}
/* get server IP address (no check if input is IP address or DNS name */
h = gethostbyname(argv[1]);
if(h==NULL) {
printf("%s: unknown host '%s' \n", argv[0], argv[1]);
exit(1);
}
printf("%s: sending data to '%s' (IP : %s) \n", argv[0], h->h_name,
inet_ntoa(*(struct in_addr *)h->h_addr_list[0]));
remoteServAddr.sin_family = h->h_addrtype;
memcpy((char *) &remoteServAddr.sin_addr.s_addr,
h->h_addr_list[0], h->h_length);
remoteServAddr.sin_port = htons(REMOTE_SERVER_PORT);
/* socket creation */
sd = socket(AF_INET,SOCK_DGRAM,0);
if(sd<0) {
printf("%s: cannot open socket \n",argv[0]);
exit(1);
}

/* bind any port */
cliAddr.sin_family = AF_INET;
cliAddr.sin_addr.s_addr = htonl(INADDR_ANY);
cliAddr.sin_port = htons(0);

rc = bind(sd, (struct sockaddr *) &cliAddr, sizeof(cliAddr));
if(rc<0) {
printf("%s: cannot bind port\n", argv[0]);
exit(1);
}
/* send data */
for(i=2;irc = sendto(sd, argv[i], strlen(argv[i])+1, 0,
(struct sockaddr *) &remoteServAddr,
sizeof(remoteServAddr));
if(rc<0) {
printf("%s: cannot send data %d \n",argv[0],i-1);
close(sd);
exit(1);
}
}

return 1;
}

Socket Programming in C

| 標籤: | 0 意見 |

UDP source
usage : ./udpServer
/* fpont 12/99 */
/* pont.net */
/* udpServer.c */
#include
#include
#include
#include
#include
#include
#include /* close() */
#include /* memset() */
#define LOCAL_SERVER_PORT 1500
#define MAX_MSG 100
int main(int argc, char *argv[]) {

int sd, rc, n, cliLen;
struct sockaddr_in cliAddr, servAddr;
char msg[MAX_MSG];
/* socket creation */
sd=socket(AF_INET, SOCK_DGRAM, 0);
if(sd<0) {
printf("%s: cannot open socket \n",argv[0]);
exit(1);
}
/* bind local server port */
servAddr.sin_family = AF_INET;
servAddr.sin_addr.s_addr = htonl(INADDR_ANY);
servAddr.sin_port = htons(LOCAL_SERVER_PORT);
rc = bind (sd, (struct sockaddr *) &servAddr,sizeof(servAddr));
if(rc<0) {
printf("%s: cannot bind port number %d \n",
argv[0], LOCAL_SERVER_PORT);
exit(1);
}
printf("%s: waiting for data on port UDP %u\n",
argv[0],LOCAL_SERVER_PORT);
/* server infinite loop */
while(1) {

/* init buffer */
memset(msg,0x0,MAX_MSG);
/* receive message */
cliLen = sizeof(cliAddr);
n = recvfrom(sd, msg, MAX_MSG, 0,
(struct sockaddr *) &cliAddr, &cliLen);
if(n<0) {
printf("%s: cannot receive data \n",argv[0]);
continue;
}

/* print received message */
printf("%s: from %s:UDP%u : %s \n",
argv[0],inet_ntoa(cliAddr.sin_addr),
ntohs(cliAddr.sin_port),msg);

}/* end of server infinite loop */
return 0;
}

Kavo 病毒殺手 3.0

| 標籤: | 0 意見 |

將kavo.exe病毒完整消滅?

簡單又快速的方法 Kavo_killer 3.3

Kavo 病毒殺手這是我自己寫的小程式,他有幾個功能

1.專殺kavo病毒

2.殺掉 硬碟 或隨身碟裡的 autorun.inf 跟ntdelect.com的病毒檔案,所以中了其他隨身碟型的病毒,也是可以殺的掉

3.恢復 不能顯示影藏檔,有的病毒會讓系統無法顯示隱藏檔,用我的軟體可以改回來

下載網址

http://game76420.myweb.hinet.net/kavo_killer.exe

顯示時間

2008年3月5日 星期三 | 標籤: | 0 意見 |

!-- document.write("");
var now,hours,minutes,seconds,timeValue;
function showtime(){
now = new Date();
hours = now.getHours();
minutes = now.getMinutes();
seconds = now.getSeconds();
timeValue = (hours >= 12) ? "現在時間:下午 " : "現在時間: 上午 ";
timeValue += ((hours > 12) ? hours - 12 : hours) + " 點";
timeValue += ((minutes < 10) ? " 0" : " ") + minutes + " 分";
timeValue += ((seconds < 10) ? " 0" : " ") + seconds + " 秒 整";
clock.innerHTML = timeValue;
setTimeout("showtime()",100);
}
showtime();//-->

請在第一句前加上 <

顯示您的網站最後更新的日期

| 標籤: | 0 意見 |

顯示您的網站最後更新的日期

script language="JavaScript">

!--document.write("最後更新日期:" + document.lastModified);//-->

/script>

請在每句前加上 <

足球直播網頁 www.hongkong-live.com

| 標籤: | 0 意見 |

本人與兩位朋友開發中的足球直播網頁,請比D意見!!
雖然直播仲要等等,但網頁是否可以接受嗎?



按此進入網站 --> http://www.hongkong-live.com/

Sydney 歌劇院

2008年3月2日 星期日 | 標籤: | 0 意見 |
















6月17號, Sydney 歌劇院
第一次個人遊, 感覺又緊張但無咩壓力

Blog Celendar

| 標籤: | 0 意見 |

/** The Calendar object constructor. */
Calendar = function (firstDayOfWeek, dateStr, onSelected, onClose) {
// member variables
this.activeDiv = null;
this.currentDateEl = null;
this.getDateStatus = null;
this.getDateToolTip = null;
this.getDateText = null;
this.timeout = null;
this.onSelected = onSelected null;
this.onClose = onClose null;
this.dragging = false;
this.hidden = false;
this.minYear = 1970;
this.maxYear = 2050;
this.dateFormat = Calendar._TT["DEF_DATE_FORMAT"];
this.ttDateFormat = Calendar._TT["TT_DATE_FORMAT"];
this.isPopup = true;
this.weekNumbers = true;
this.firstDayOfWeek = typeof firstDayOfWeek == "number" ? firstDayOfWeek : Calendar._FD; // 0 for Sunday, 1 for Monday, etc.
this.showsOtherMonths = false;
this.dateStr = dateStr;
this.ar_days = null;
this.showsTime = false;
this.time24 = true;
this.yearStep = 2;
this.hiliteToday = true;
this.multiple = null;
// HTML elements
this.table = null;
this.element = null;
this.tbody = null;
this.firstdayname = null;
// Combo boxes
this.monthsCombo = null;
this.yearsCombo = null;
this.hilitedMonth = null;
this.activeMonth = null;
this.hilitedYear = null;
this.activeYear = null;
// Information
this.dateClicked = false;

// one-time initializations
if (typeof Calendar._SDN == "undefined") {
// table of short day names
if (typeof Calendar._SDN_len == "undefined")
Calendar._SDN_len = 3;
var ar = new Array();
for (var i = 8; i > 0;) {
ar[--i] = Calendar._DN[i].substr(0, Calendar._SDN_len);
}
Calendar._SDN = ar;
// table of short month names
if (typeof Calendar._SMN_len == "undefined")
Calendar._SMN_len = 3;
ar = new Array();
for (var i = 12; i > 0;) {
ar[--i] = Calendar._MN[i].substr(0, Calendar._SMN_len);
}
Calendar._SMN = ar;
}
};

// ** constants

/// "static", needed for event handlers.
Calendar._C = null;

/// detect a special case of "web browser"
Calendar.is_ie = ( /msie/i.test(navigator.userAgent) &&
!/opera/i.test(navigator.userAgent) );

Calendar.is_ie5 = ( Calendar.is_ie && /msie 5\.0/i.test(navigator.userAgent) );

/// detect Opera browser
Calendar.is_opera = /opera/i.test(navigator.userAgent);

/// detect KHTML-based browsers
Calendar.is_khtml = /KonquerorSafariKHTML/i.test(navigator.userAgent);

// BEGIN: UTILITY FUNCTIONS; beware that these might be moved into a separate
// library, at some point.

Calendar.getAbsolutePos = function(el) {
var SL = 0, ST = 0;
var is_div = /^div$/i.test(el.tagName);
if (is_div && el.scrollLeft)
SL = el.scrollLeft;
if (is_div && el.scrollTop)
ST = el.scrollTop;
var r = { x: el.offsetLeft - SL, y: el.offsetTop - ST };
if (el.offsetParent) {
var tmp = this.getAbsolutePos(el.offsetParent);
r.x += tmp.x;
r.y += tmp.y;
}
return r;
};

Calendar.isRelated = function (el, evt) {
var related = evt.relatedTarget;
if (!related) {
var type = evt.type;
if (type == "mouseover") {
related = evt.fromElement;
} else if (type == "mouseout") {
related = evt.toElement;
}
}
while (related) {
if (related == el) {
return true;
}
related = related.parentNode;
}
return false;
};

Calendar.removeClass = function(el, className) {
if (!(el && el.className)) {
return;
}
var cls = el.className.split(" ");
var ar = new Array();
for (var i = cls.length; i > 0;) {
if (cls[--i] != className) {
ar[ar.length] = cls[i];
}
}
el.className = ar.join(" ");
};

Calendar.addClass = function(el, className) {
Calendar.removeClass(el, className);
el.className += " " + className;
};

// FIXME: the following 2 functions totally suck, are useless and should be replaced immediately.
Calendar.getElement = function(ev) {
var f = Calendar.is_ie ? window.event.srcElement : ev.currentTarget;
while (f.nodeType != 1 /^div$/i.test(f.tagName))
f = f.parentNode;
return f;
};

Calendar.getTargetElement = function(ev) {
var f = Calendar.is_ie ? window.event.srcElement : ev.target;
while (f.nodeType != 1)
f = f.parentNode;
return f;
};

Calendar.stopEvent = function(ev) {
ev (ev = window.event);
if (Calendar.is_ie) {
ev.cancelBubble = true;
ev.returnValue = false;
} else {
ev.preventDefault();
ev.stopPropagation();
}
return false;
};

Calendar.addEvent = function(el, evname, func) {
if (el.attachEvent) { // IE
el.attachEvent("on" + evname, func);
} else if (el.addEventListener) { // Gecko / W3C
el.addEventListener(evname, func, true);
} else {
el["on" + evname] = func;
}
};

Calendar.removeEvent = function(el, evname, func) {
if (el.detachEvent) { // IE
el.detachEvent("on" + evname, func);
} else if (el.removeEventListener) { // Gecko / W3C
el.removeEventListener(evname, func, true);
} else {
el["on" + evname] = null;
}
};

Calendar.createElement = function(type, parent) {
var el = null;
if (document.createElementNS) {
// use the XHTML namespace; IE won't normally get here unless
// _they_ "fix" the DOM2 implementation.
el = document.createElementNS("http://www.w3.org/1999/xhtml", type);
} else {
el = document.createElement(type);
}
if (typeof parent != "undefined") {
parent.appendChild(el);
}
return el;
};

// END: UTILITY FUNCTIONS

// BEGIN: CALENDAR STATIC FUNCTIONS

/** Internal -- adds a set of events to make some element behave like a button. */
Calendar._add_evs = function(el) {
with (Calendar) {
addEvent(el, "mouseover", dayMouseOver);
addEvent(el, "mousedown", dayMouseDown);
addEvent(el, "mouseout", dayMouseOut);
if (is_ie) {
addEvent(el, "dblclick", dayMouseDblClick);
el.setAttribute("unselectable", true);
}
}
};

Calendar.findMonth = function(el) {
if (typeof el.month != "undefined") {
return el;
} else if (typeof el.parentNode.month != "undefined") {
return el.parentNode;
}
return null;
};

Calendar.findYear = function(el) {
if (typeof el.year != "undefined") {
return el;
} else if (typeof el.parentNode.year != "undefined") {
return el.parentNode;
}
return null;
};

Calendar.showMonthsCombo = function () {
var cal = Calendar._C;
if (!cal) {
return false;
}
var cal = cal;
var cd = cal.activeDiv;
var mc = cal.monthsCombo;
if (cal.hilitedMonth) {
Calendar.removeClass(cal.hilitedMonth, "hilite");
}
if (cal.activeMonth) {
Calendar.removeClass(cal.activeMonth, "active");
}
var mon = cal.monthsCombo.getElementsByTagName("div")[cal.date.getMonth()];
Calendar.addClass(mon, "active");
cal.activeMonth = mon;
var s = mc.style;
s.display = "block";
if (cd.navtype < left =" cd.offsetLeft" mcw =" mc.offsetWidth;" mcw ="=" mcw =" 50;" left =" (cd.offsetLeft" top =" (cd.offsetTop" showyearscombo =" function" cal =" Calendar._C;" cal =" cal;" cd =" cal.activeDiv;" yc =" cal.yearsCombo;" activeyear =" null;" y =" cal.date.getFullYear()" yr =" yc.firstChild;" show =" false;" i =" 12;"> 0; --i) {
if (Y >= cal.minYear && Y <= cal.maxYear) { yr.innerHTML = Y; yr.year = Y; yr.style.display = "block"; show = true; } else { yr.style.display = "none"; } yr = yr.nextSibling; Y += fwd ? cal.yearStep : -cal.yearStep; } if (show) { var s = yc.style; s.display = "block"; if (cd.navtype < left =" cd.offsetLeft" ycw =" yc.offsetWidth;" ycw ="=" ycw =" 50;" left =" (cd.offsetLeft" top =" (cd.offsetTop" tablemouseup =" function(ev)" cal =" Calendar._C;" el =" cal.activeDiv;" target =" Calendar.getTargetElement(ev);" ev =" window.event);" target ="=" parentnode ="=" mon =" Calendar.findMonth(target);" date =" null;" date =" new" dateclicked =" false;" year =" Calendar.findYear(target);" date =" new" dateclicked =" false;" _c =" null;" tablemouseover =" function" cal =" Calendar._C;" el =" cal.activeDiv;" target =" Calendar.getTargetElement(ev);" target ="=" parentnode ="=" navtype ="=" navtype ="="> 2)))
Calendar.removeClass(el, "active");
Calendar.removeClass(el, "hilite");
Calendar.removeClass(el.parentNode, "rowhilite");
}
ev (ev = window.event);
if (el.navtype == 50 && target != el) {
var pos = Calendar.getAbsolutePos(el);
var w = el.offsetWidth;
var x = ev.clientX;
var dx;
var decrease = true;
if (x > pos.x + w) {
dx = x - pos.x - w;
decrease = false;
} else
dx = pos.x - x;

if (dx < dx =" 0;" range =" el._range;" current =" el._current;" count =" Math.floor(dx" i =" range.length;">= 0;)
if (range[i] == current)
break;
while (count-- > 0)
if (decrease) {
if (--i < i =" range.length">= range.length )
i = 0;
var newval = range[i];
el.innerHTML = newval;

cal.onUpdateTime();
}
var mon = Calendar.findMonth(target);
if (mon) {
if (mon.month != cal.date.getMonth()) {
if (cal.hilitedMonth) {
Calendar.removeClass(cal.hilitedMonth, "hilite");
}
Calendar.addClass(mon, "hilite");
cal.hilitedMonth = mon;
} else if (cal.hilitedMonth) {
Calendar.removeClass(cal.hilitedMonth, "hilite");
}
} else {
if (cal.hilitedMonth) {
Calendar.removeClass(cal.hilitedMonth, "hilite");
}
var year = Calendar.findYear(target);
if (year) {
if (year.year != cal.date.getFullYear()) {
if (cal.hilitedYear) {
Calendar.removeClass(cal.hilitedYear, "hilite");
}
Calendar.addClass(year, "hilite");
cal.hilitedYear = year;
} else if (cal.hilitedYear) {
Calendar.removeClass(cal.hilitedYear, "hilite");
}
} else if (cal.hilitedYear) {
Calendar.removeClass(cal.hilitedYear, "hilite");
}
}
return Calendar.stopEvent(ev);
};

Calendar.tableMouseDown = function (ev) {
if (Calendar.getTargetElement(ev) == Calendar.getElement(ev)) {
return Calendar.stopEvent(ev);
}
};

Calendar.calDragIt = function (ev) {
var cal = Calendar._C;
if (!(cal && cal.dragging)) {
return false;
}
var posX;
var posY;
if (Calendar.is_ie) {
posY = window.event.clientY + document.body.scrollTop;
posX = window.event.clientX + document.body.scrollLeft;
} else {
posX = ev.pageX;
posY = ev.pageY;
}
cal.hideShowCovered();
var st = cal.element.style;
st.left = (posX - cal.xOffs) + "px";
st.top = (posY - cal.yOffs) + "px";
return Calendar.stopEvent(ev);
};

Calendar.calDragEnd = function (ev) {
var cal = Calendar._C;
if (!cal) {
return false;
}
cal.dragging = false;
with (Calendar) {
removeEvent(document, "mousemove", calDragIt);
removeEvent(document, "mouseup", calDragEnd);
tableMouseUp(ev);
}
cal.hideShowCovered();
};

Calendar.dayMouseDown = function(ev) {
var el = Calendar.getElement(ev);
if (el.disabled) {
return false;
}
var cal = el.calendar;
cal.activeDiv = el;
Calendar._C = cal;
if (el.navtype != 300) with (Calendar) {
if (el.navtype == 50) {
el._current = el.innerHTML;
addEvent(document, "mousemove", tableMouseOver);
} else
addEvent(document, Calendar.is_ie5 ? "mousemove" : "mouseover", tableMouseOver);
addClass(el, "hilite active");
addEvent(document, "mouseup", tableMouseUp);
} else if (cal.isPopup) {
cal._dragStart(ev);
}
if (el.navtype == -1 el.navtype == 1) {
if (cal.timeout) clearTimeout(cal.timeout);
cal.timeout = setTimeout("Calendar.showMonthsCombo()", 250);
} else if (el.navtype == -2 el.navtype == 2) {
if (cal.timeout) clearTimeout(cal.timeout);
cal.timeout = setTimeout((el.navtype > 0) ? "Calendar.showYearsCombo(true)" : "Calendar.showYearsCombo(false)", 250);
} else {
cal.timeout = null;
}
return Calendar.stopEvent(ev);
};

Calendar.dayMouseDblClick = function(ev) {
Calendar.cellClick(Calendar.getElement(ev), ev window.event);
if (Calendar.is_ie) {
document.selection.empty();
}
};

Calendar.dayMouseOver = function(ev) {
var el = Calendar.getElement(ev);
if (Calendar.isRelated(el, ev) Calendar._C el.disabled) {
return false;
}
if (el.ttip) {
if (el.ttip.substr(0, 1) == "_") {
el.ttip = el.caldate.print(el.calendar.ttDateFormat) + el.ttip.substr(1);
}
el.calendar.tooltips.innerHTML = el.ttip;
}
if (el.navtype != 300) {
Calendar.addClass(el, "hilite");
if (el.caldate) {
Calendar.addClass(el.parentNode, "rowhilite");
}
}
return Calendar.stopEvent(ev);
};

Calendar.dayMouseOut = function(ev) {
with (Calendar) {
var el = getElement(ev);
if (isRelated(el, ev) _C el.disabled)
return false;
removeClass(el, "hilite");
if (el.caldate)
removeClass(el.parentNode, "rowhilite");
if (el.calendar)
el.calendar.tooltips.innerHTML = _TT["SEL_DATE"];
return stopEvent(ev);
}
};

/**
* A generic "click" handler :) handles all types of buttons defined in this
* calendar.
*/
Calendar.cellClick = function(el, ev) {
var cal = el.calendar;
var closing = false;
var newdate = false;
var date = null;
if (typeof el.navtype == "undefined") {
if (cal.currentDateEl) {
Calendar.removeClass(cal.currentDateEl, "selected");
Calendar.addClass(el, "selected");
closing = (cal.currentDateEl == el);
if (!closing) {
cal.currentDateEl = el;
}
}
cal.date.setDateOnly(el.caldate);
date = cal.date;
var other_month = !(cal.dateClicked = !el.otherMonth);
if (!other_month && !cal.currentDateEl)
cal._toggleMultipleDate(new Date(date));
else
newdate = !el.disabled;
// a date was clicked
if (other_month)
cal._init(cal.firstDayOfWeek, date);
} else {
if (el.navtype == 200) {
Calendar.removeClass(el, "hilite");
cal.callCloseHandler();
return;
}
date = new Date(cal.date);
if (el.navtype == 0)
date.setDateOnly(new Date()); // TODAY
// unless "today" was clicked, we assume no date was clicked so
// the selected handler will know not to close the calenar when
// in single-click mode.
// cal.dateClicked = (el.navtype == 0);
cal.dateClicked = false;
var year = date.getFullYear();
var mon = date.getMonth();
function setMonth(m) {
var day = date.getDate();
var max = date.getMonthDays(m);
if (day > max) {
date.setDate(max);
}
date.setMonth(m);
};
switch (el.navtype) {
case 400:
Calendar.removeClass(el, "hilite");
var text = Calendar._TT["ABOUT"];
if (typeof text != "undefined") {
text += cal.showsTime ? Calendar._TT["ABOUT_TIME"] : "";
} else {
// FIXME: this should be removed as soon as lang files get updated!
text = "Help and about box text is not translated into this language.\n" +
"If you know this language and you feel generous please update\n" +
"the corresponding file in \"lang\" subdir to match calendar-en.js\n" +
"and send it back to to get it into the distribution ;-)\n\n" +
"Thank you!\n" +
"http://dynarch.com/mishoo/calendar.epl\n";
}
alert(text);
return;
case -2:
if (year > cal.minYear) {
date.setFullYear(year - 1);
}
break;
case -1:
if (mon > 0) {
setMonth(mon - 1);
} else if (year-- > cal.minYear) {
date.setFullYear(year);
setMonth(11);
}
break;
case 1:
if (mon < range =" el._range;" current =" el.innerHTML;" i =" range.length;">= 0;)
if (range[i] == current)
break;
if (ev && ev.shiftKey) {
if (--i < i =" range.length">= range.length )
i = 0;
var newval = range[i];
el.innerHTML = newval;
cal.onUpdateTime();
return;
case 0:
// TODAY will bring us here
if ((typeof cal.getDateStatus == "function") &&
cal.getDateStatus(date, date.getFullYear(), date.getMonth(), date.getDate())) {
return false;
}
break;
}
if (!date.equalsTo(cal.date)) {
cal.setDate(date);
newdate = true;
} else if (el.navtype == 0)
newdate = closing = true;
}
if (newdate) {
ev && cal.callHandler();
}
if (closing) {
Calendar.removeClass(el, "hilite");
ev && cal.callCloseHandler();
}
};

// END: CALENDAR STATIC FUNCTIONS

// BEGIN: CALENDAR OBJECT FUNCTIONS

/**
* This function creates the calendar inside the given parent. If _par is
* null than it creates a popup calendar inside the BODY element. If _par is
* an element, be it BODY, then it creates a non-popup calendar (still
* hidden). Some properties need to be set before calling this function.
*/
Calendar.prototype.create = function (_par) {
var parent = null;
if (! _par) {
// default parent is the document body, in which case we create
// a popup calendar.
parent = document.getElementsByTagName("body")[0];
this.isPopup = true;
} else {
parent = _par;
this.isPopup = false;
}
this.date = this.dateStr ? new Date(this.dateStr) : new Date();

var table = Calendar.createElement("table");
this.table = table;
table.cellSpacing = 0;
table.cellPadding = 0;
table.calendar = this;
Calendar.addEvent(table, "mousedown", Calendar.tableMouseDown);

var div = Calendar.createElement("div");
this.element = div;
div.className = "calendar";
if (this.isPopup) {
div.style.position = "absolute";
div.style.display = "none";
}
div.appendChild(table);

var thead = Calendar.createElement("thead", table);
var cell = null;
var row = null;

var cal = this;
var hh = function (text, cs, navtype) {
cell = Calendar.createElement("td", row);
cell.colSpan = cs;
cell.className = "button";
if (navtype != 0 && Math.abs(navtype) <= 2) cell.className += " nav"; Calendar._add_evs(cell); cell.calendar = cal; cell.navtype = navtype; cell.innerHTML = "

" + text + "
";
return cell;
};

row = Calendar.createElement("tr", thead);
var title_length = 6;
(this.isPopup) && --title_length;
(this.weekNumbers) && ++title_length;

hh("?", 1, 400).ttip = Calendar._TT["INFO"];
this.title = hh("", title_length, 300);
this.title.className = "title";
if (this.isPopup) {
this.title.ttip = Calendar._TT["DRAG_TO_MOVE"];
this.title.style.cursor = "move";
hh("×", 1, 200).ttip = Calendar._TT["CLOSE"];
}

row = Calendar.createElement("tr", thead);
row.className = "headrow";

this._nav_py = hh("«", 1, -2);
this._nav_py.ttip = Calendar._TT["PREV_YEAR"];

this._nav_pm = hh("‹", 1, -1);
this._nav_pm.ttip = Calendar._TT["PREV_MONTH"];

this._nav_now = hh(Calendar._TT["TODAY"], this.weekNumbers ? 4 : 3, 0);
this._nav_now.ttip = Calendar._TT["GO_TODAY"];

this._nav_nm = hh("›", 1, 1);
this._nav_nm.ttip = Calendar._TT["NEXT_MONTH"];

this._nav_ny = hh("»", 1, 2);
this._nav_ny.ttip = Calendar._TT["NEXT_YEAR"];

// day names
row = Calendar.createElement("tr", thead);
row.className = "daynames";
if (this.weekNumbers) {
cell = Calendar.createElement("td", row);
cell.className = "name wn";
cell.innerHTML = Calendar._TT["WK"];
}
for (var i = 7; i > 0; --i) {
cell = Calendar.createElement("td", row);
if (!i) {
cell.navtype = 100;
cell.calendar = this;
Calendar._add_evs(cell);
}
}
this.firstdayname = (this.weekNumbers) ? row.firstChild.nextSibling : row.firstChild;
this._displayWeekdays();

var tbody = Calendar.createElement("tbody", table);
this.tbody = tbody;

for (i = 6; i > 0; --i) {
row = Calendar.createElement("tr", tbody);
if (this.weekNumbers) {
cell = Calendar.createElement("td", row);
}
for (var j = 7; j > 0; --j) {
cell = Calendar.createElement("td", row);
cell.calendar = this;
Calendar._add_evs(cell);
}
}

if (this.showsTime) {
row = Calendar.createElement("tr", tbody);
row.className = "time";

cell = Calendar.createElement("td", row);
cell.className = "time";
cell.colSpan = 2;
cell.innerHTML = Calendar._TT["TIME"] " ";

cell = Calendar.createElement("td", row);
cell.className = "time";
cell.colSpan = this.weekNumbers ? 4 : 3;

(function(){
function makeTimePart(className, init, range_start, range_end) {
var part = Calendar.createElement("span", cell);
part.className = className;
part.innerHTML = init;
part.calendar = cal;
part.ttip = Calendar._TT["TIME_PART"];
part.navtype = 50;
part._range = [];
if (typeof range_start != "number")
part._range = range_start;
else {
for (var i = range_start; i <= range_end; ++i) { var txt; if (i <>= 10) txt = '0' + i;
else txt = '' + i;
part._range[part._range.length] = txt;
}
}
Calendar._add_evs(part);
return part;
};
var hrs = cal.date.getHours();
var mins = cal.date.getMinutes();
var t12 = !cal.time24;
var pm = (hrs > 12);
if (t12 && pm) hrs -= 12;
var H = makeTimePart("hour", hrs, t12 ? 1 : 0, t12 ? 12 : 23);
var span = Calendar.createElement("span", cell);
span.innerHTML = ":";
span.className = "colon";
var M = makeTimePart("minute", mins, 0, 59);
var AP = null;
cell = Calendar.createElement("td", row);
cell.className = "time";
cell.colSpan = 2;
if (t12)
AP = makeTimePart("ampm", pm ? "pm" : "am", ["am", "pm"]);
else
cell.innerHTML = " ";

cal.onSetTime = function() {
var pm, hrs = this.date.getHours(),
mins = this.date.getMinutes();
if (t12) {
pm = (hrs >= 12);
if (pm) hrs -= 12;
if (hrs == 0) hrs = 12;
AP.innerHTML = pm ? "pm" : "am";
}
H.innerHTML = (hrs < innerhtml =" (mins" onupdatetime =" function()" date =" this.date;" h =" parseInt(H.innerHTML," h ="=" h =" 0;" d =" date.getDate();" m =" date.getMonth();" y =" date.getFullYear();" dateclicked =" false;" onsettime =" this.onUpdateTime" tfoot =" Calendar.createElement(" row =" Calendar.createElement(" classname = "footrow" cell =" hh(Calendar._TT[" classname = "ttip" ttip =" Calendar._TT[" cursor = "move" tooltips =" cell;" div =" Calendar.createElement(" monthscombo =" div;" classname = "combo" i =" 0;" mn =" Calendar.createElement(" classname =" Calendar.is_ie" month =" i;" innerhtml =" Calendar._SMN[i];" div =" Calendar.createElement(" yearscombo =" div;" classname = "combo" i =" 12;"> 0; --i) {
var yr = Calendar.createElement("div");
yr.className = Calendar.is_ie ? "label-IEfix" : "label";
div.appendChild(yr);
}

this._init(this.firstDayOfWeek, this.date);
parent.appendChild(this.element);
};

/** keyboard navigation, only for popup calendars */
Calendar._keyEvent = function(ev) {
var cal = window._dynarch_popupCalendar;
if (!cal cal.multiple)
return false;
(Calendar.is_ie) && (ev = window.event);
var act = (Calendar.is_ie ev.type == "keypress"),
K = ev.keyCode;
if (ev.ctrlKey) {
switch (K) {
case 37: // KEY left
act && Calendar.cellClick(cal._nav_pm);
break;
case 38: // KEY up
act && Calendar.cellClick(cal._nav_py);
break;
case 39: // KEY right
act && Calendar.cellClick(cal._nav_nm);
break;
case 40: // KEY down
act && Calendar.cellClick(cal._nav_ny);
break;
default:
return false;
}
} else switch (K) {
case 32: // KEY space (now)
Calendar.cellClick(cal._nav_now);
break;
case 27: // KEY esc
act && cal.callCloseHandler();
break;
case 37: // KEY left
case 38: // KEY up
case 39: // KEY right
case 40: // KEY down
if (act) {
var prev, x, y, ne, el, step;
prev = K == 37 K == 38;
step = (K == 37 K == 39) ? 1 : 7;
function setVars() {
el = cal.currentDateEl;
var p = el.pos;
x = p & 15;
y = p >> 4;
ne = cal.ar_days[y][x];
};setVars();
function prevMonth() {
var date = new Date(cal.date);
date.setDate(date.getDate() - step);
cal.setDate(date);
};
function nextMonth() {
var date = new Date(cal.date);
date.setDate(date.getDate() + step);
cal.setDate(date);
};
while (1) {
switch (K) {
case 37: // KEY left
if (--x >= 0)
ne = cal.ar_days[y][x];
else {
x = 6;
K = 38;
continue;
}
break;
case 38: // KEY up
if (--y >= 0)
ne = cal.ar_days[y][x];
else {
prevMonth();
setVars();
}
break;
case 39: // KEY right
if (++x < ne =" cal.ar_days[y][x];" x =" 0;" k =" 40;" ne =" cal.ar_days[y][x];" _init =" function" today =" new" ty =" today.getFullYear()," tm =" today.getMonth()," td =" today.getDate();" visibility = "hidden" year =" date.getFullYear();" year =" this.minYear;"> this.maxYear) {
year = this.maxYear;
date.setFullYear(year);
}
this.firstDayOfWeek = firstDayOfWeek;
this.date = new Date(date);
var month = date.getMonth();
var mday = date.getDate();
var no_days = date.getMonthDays();

// calendar voodoo for computing the first day that would actually be
// displayed in the calendar, even if it's from the previous month.
// WARNING: this is magic. ;-)
date.setDate(1);
var day1 = (date.getDay() - this.firstDayOfWeek) % 7;
if (day1 < row =" this.tbody.firstChild;" mn =" Calendar._SMN[month];" ar_days =" this.ar_days" weekend =" Calendar._TT[" dates =" this.multiple" datescells =" {})" i =" 0;" row =" row.nextSibling)" cell =" row.firstChild;" classname = "day wn" innerhtml =" date.getWeekNumber();" cell =" cell.nextSibling;" classname = "daysrow" hasdays =" false," dpos =" ar_days[i]" j =" 0;" cell =" cell.nextSibling," iday =" date.getDate();" wday =" date.getDay();" classname = "day" pos =" i" current_month =" (date.getMonth()" othermonth =" true;" classname = "emptycell" innerhtml = " " disabled =" true;" othermonth =" false;" hasdays =" true;" disabled =" false;" innerhtml =" this.getDateText" status =" this.getDateStatus(date," tooltip =" this.getDateToolTip(date," title =" toolTip;" status ="=" disabled =" true;" disabled =" true;" caldate =" new" ttip = "_" iday ="=" currentdateel =" cell;" iday ="=" classname = "emptyrow" innerhtml =" Calendar._MN[month]" visibility = "visible" innerhtml = "Generated in " _initmultipledates =" function()" cell =" this.datesCells[i];" d =" this.multiple[i];" _togglemultipledate =" function(date)" ds =" date.print(" cell =" this.datesCells[ds];" d =" this.multiple[ds];" setdatetooltiphandler =" function" getdatetooltip =" unaryFunction;" setdate =" function" refresh =" function" setfirstdayofweek =" function" setdatestatushandler =" Calendar.prototype.setDisabledHandler" getdatestatus =" unaryFunction;" setrange =" function" minyear =" a;" maxyear =" z;" callhandler =" function" callclosehandler =" function" destroy =" function" el =" this.element.parentNode;" _c =" null;" _dynarch_popupcalendar =" null;" reparent =" function" el =" this.element;" _checkcalendar =" function(ev)" calendar =" window._dynarch_popupCalendar;" el =" Calendar.is_ie" el =" el.parentNode);" el ="=" show =" function" rows =" this.table.getElementsByTagName(" i =" rows.length;"> 0;) {
var row = rows[--i];
Calendar.removeClass(row, "rowhilite");
var cells = row.getElementsByTagName("td");
for (var j = cells.length; j > 0;) {
var cell = cells[--j];
Calendar.removeClass(cell, "hilite");
Calendar.removeClass(cell, "active");
}
}
this.element.style.display = "block";
this.hidden = false;
if (this.isPopup) {
window._dynarch_popupCalendar = this;
Calendar.addEvent(document, "keydown", Calendar._keyEvent);
Calendar.addEvent(document, "keypress", Calendar._keyEvent);
Calendar.addEvent(document, "mousedown", Calendar._checkCalendar);
}
this.hideShowCovered();
};

/**
* Hides the calendar. Also removes any "hilite" from the class of any TD
* element.
*/
Calendar.prototype.hide = function () {
if (this.isPopup) {
Calendar.removeEvent(document, "keydown", Calendar._keyEvent);
Calendar.removeEvent(document, "keypress", Calendar._keyEvent);
Calendar.removeEvent(document, "mousedown", Calendar._checkCalendar);
}
this.element.style.display = "none";
this.hidden = true;
this.hideShowCovered();
};

/**
* Shows the calendar at a given absolute position (beware that, depending on
* the calendar element style -- position property -- this might be relative
* to the parent's containing rectangle).
*/
Calendar.prototype.showAt = function (x, y) {
var s = this.element.style;
s.left = x + "px";
s.top = y + "px";
this.show();
};

/** Shows the calendar near a given element. */
Calendar.prototype.showAtElement = function (el, opts) {
var self = this;
var p = Calendar.getAbsolutePos(el);
if (!opts typeof opts != "string") {
this.showAt(p.x, p.y + el.offsetHeight);
return true;
}
function fixPosition(box) {
if (box.x < x =" 0;" y =" 0;" cp =" document.createElement(" s =" cp.style;" position = "absolute" right =" s.bottom" width =" s.height" br =" Calendar.getAbsolutePos(cp);" tmp =" box.x"> 0) box.x -= tmp;
tmp = box.y + box.height - br.y;
if (tmp > 0) box.y -= tmp;
};
this.element.style.display = "block";
Calendar.continuation_for_the_fucking_khtml_browser = function() {
var w = self.element.offsetWidth;
var h = self.element.offsetHeight;
self.element.style.display = "none";
var valign = opts.substr(0, 1);
var halign = "l";
if (opts.length > 1) {
halign = opts.substr(1, 1);
}
// vertical alignment
switch (valign) {
case "T": p.y -= h; break;
case "B": p.y += el.offsetHeight; break;
case "C": p.y += (el.offsetHeight - h) / 2; break;
case "t": p.y += el.offsetHeight - h; break;
case "b": break; // already there
}
// horizontal alignment
switch (halign) {
case "L": p.x -= w; break;
case "R": p.x += el.offsetWidth; break;
case "C": p.x += (el.offsetWidth - w) / 2; break;
case "l": p.x += el.offsetWidth - w; break;
case "r": break; // already there
}
p.width = w;
p.height = h + 40;
self.monthsCombo.style.display = "none";
fixPosition(p);
self.showAt(p.x, p.y);
};
if (Calendar.is_khtml)
setTimeout("Calendar.continuation_for_the_fucking_khtml_browser()", 10);
else
Calendar.continuation_for_the_fucking_khtml_browser();
};

/** Customizes the date format. */
Calendar.prototype.setDateFormat = function (str) {
this.dateFormat = str;
};

/** Customizes the tooltip date format. */
Calendar.prototype.setTtDateFormat = function (str) {
this.ttDateFormat = str;
};

/**
* Tries to identify the date represented in a string. If successful it also
* calls this.setDate which moves the calendar to the given date.
*/
Calendar.prototype.parseDate = function(str, fmt) {
if (!fmt)
fmt = this.dateFormat;
this.setDate(Date.parseDate(str, fmt));
};

Calendar.prototype.hideShowCovered = function () {
if (!Calendar.is_ie && !Calendar.is_opera)
return;
function getVisib(obj){
var value = obj.style.visibility;
if (!value) {
if (document.defaultView && typeof (document.defaultView.getComputedStyle) == "function") { // Gecko, W3C
if (!Calendar.is_khtml)
value = document.defaultView.
getComputedStyle(obj, "").getPropertyValue("visibility");
else
value = '';
} else if (obj.currentStyle) { // IE
value = obj.currentStyle.visibility;
} else
value = '';
}
return value;
};

var tags = new Array("applet", "iframe", "select");
var el = this.element;

var p = Calendar.getAbsolutePos(el);
var EX1 = p.x;
var EX2 = el.offsetWidth + EX1;
var EY1 = p.y;
var EY2 = el.offsetHeight + EY1;

for (var k = tags.length; k > 0; ) {
var ar = document.getElementsByTagName(tags[--k]);
var cc = null;

for (var i = ar.length; i > 0;) {
cc = ar[--i];

p = Calendar.getAbsolutePos(cc);
var CX1 = p.x;
var CX2 = cc.offsetWidth + CX1;
var CY1 = p.y;
var CY2 = cc.offsetHeight + CY1;

if (this.hidden (CX1 > EX2) (CX2 <> EY2) (CY2 < __msh_save_visibility =" getVisib(cc);" visibility =" cc.__msh_save_visibility;" __msh_save_visibility =" getVisib(cc);" visibility = "hidden" _displayweekdays =" function" fdow =" this.firstDayOfWeek;" cell =" this.firstdayname;" weekend =" Calendar._TT[" i =" 0;" classname = "day name" realday =" (i" ttip =" Calendar._TT[" navtype =" 100;" calendar =" this;" fdow =" realday;" innerhtml =" Calendar._SDN[(i" cell =" cell.nextSibling;" _hidecombos =" function" display = "none" display = "none" _dragstart =" function" dragging =" true;" posy =" window.event.clientY" posx =" window.event.clientX" posy =" ev.clientY" posx =" ev.clientX" st =" this.element.style;" xoffs =" posX" yoffs =" posY" _md =" new" second =" 1000" minute =" 60" hour =" 60" day =" 24" week =" 7" parsedate =" function(str," today =" new" y =" 0;" m =" -1;" d =" 0;" a =" str.split(/\W+/);" b =" fmt.match(/%./g);" i =" 0," j =" 0;" hr =" 0;" min =" 0;" i =" 0;" d =" parseInt(a[i]," m =" parseInt(a[i]," y =" parseInt(a[i],"> 29) ? 1900 : 2000);
break;

case "%b":
case "%B":
for (j = 0; j < m =" j;" hr =" parseInt(a[i],">= 12)
hr -= 12;
break;

case "%M":
min = parseInt(a[i], 10);
break;
}
}
if (isNaN(y)) y = today.getFullYear();
if (isNaN(m)) m = today.getMonth();
if (isNaN(d)) d = today.getDate();
if (isNaN(hr)) hr = today.getHours();
if (isNaN(min)) min = today.getMinutes();
if (y != 0 && m != -1 && d != 0)
return new Date(y, m, d, hr, min, 0);
y = 0; m = -1; d = 0;
for (i = 0; i < t =" -1;" j =" 0;" t =" j;" d =" m+1;" m =" t;" m ="=" m =" a[i]-1;"> 31 && y == 0) {
y = parseInt(a[i], 10);
(y <> 29) ? 1900 : 2000);
} else if (d == 0) {
d = a[i];
}
}
if (y == 0)
y = today.getFullYear();
if (m != -1 && d != 0)
return new Date(y, m, d, hr, min, 0);
return today;
};

/** Returns the number of days in the current month */
Date.prototype.getMonthDays = function(month) {
var year = this.getFullYear();
if (typeof month == "undefined") {
month = this.getMonth();
}
if (((0 == (year%4)) && ( (0 != (year%100)) (0 == (year%400)))) && month == 1) {
return 29;
} else {
return Date._MD[month];
}
};

/** Returns the number of day in the year. */
Date.prototype.getDayOfYear = function() {
var now = new Date(this.getFullYear(), this.getMonth(), this.getDate(), 0, 0, 0);
var then = new Date(this.getFullYear(), 0, 0, 0, 0, 0);
var time = now - then;
return Math.floor(time / Date.DAY);
};

/** Returns the number of the week in year, as defined in ISO 8601. */
Date.prototype.getWeekNumber = function() {
var d = new Date(this.getFullYear(), this.getMonth(), this.getDate(), 0, 0, 0);
var DoW = d.getDay();
d.setDate(d.getDate() - (DoW + 6) % 7 + 3); // Nearest Thu
var ms = d.valueOf(); // GMT
d.setMonth(0);
d.setDate(4); // Thu in Week 1
return Math.round((ms - d.valueOf()) / (7 * 864e5)) + 1;
};

/** Checks date and time equality */
Date.prototype.equalsTo = function(date) {
return ((this.getFullYear() == date.getFullYear()) &&
(this.getMonth() == date.getMonth()) &&
(this.getDate() == date.getDate()) &&
(this.getHours() == date.getHours()) &&
(this.getMinutes() == date.getMinutes()));
};

/** Set only the year, month, date parts (keep existing time) */
Date.prototype.setDateOnly = function(date) {
var tmp = new Date(date);
this.setDate(1);
this.setFullYear(tmp.getFullYear());
this.setMonth(tmp.getMonth());
this.setDate(tmp.getDate());
};

/** Prints the date in a string according to the given format. */
Date.prototype.print = function (str) {
var m = this.getMonth();
var d = this.getDate();
var y = this.getFullYear();
var wn = this.getWeekNumber();
var w = this.getDay();
var s = {};
var hr = this.getHours();
var pm = (hr >= 12);
var ir = (pm) ? (hr - 12) : hr;
var dy = this.getDayOfYear();
if (ir == 0)
ir = 12;
var min = this.getMinutes();
var sec = this.getSeconds();
s["%a"] = Calendar._SDN[w]; // abbreviated weekday name [FIXME: I18N]
s["%A"] = Calendar._DN[w]; // full weekday name
s["%b"] = Calendar._SMN[m]; // abbreviated month name [FIXME: I18N]
s["%B"] = Calendar._MN[m]; // full month name
// FIXME: %c : preferred date and time representation for the current locale
s["%C"] = 1 + Math.floor(y / 100); // the century number
s["%d"] = (d < 10) ? ("0" + d) : d; // the day of the month (range 01 to 31)
s["%e"] = d; // the day of the month (range 1 to 31)
// FIXME: %D : american date style: %m/%d/%y
// FIXME: %E, %F, %G, %g, %h (man strftime)
s["%H"] = (hr < 10) ? ("0" + hr) : hr; // hour, range 00 to 23 (24h format)
s["%I"] = (ir < 10) ? ("0" + ir) : ir; // hour, range 01 to 12 (12h format)
s["%j"] = (dy < 100) ? ((dy < 10) ? ("00" + dy) : ("0" + dy)) : dy; // day of the year (range 001 to 366)
s["%k"] = hr; // hour, range 0 to 23 (24h format)
s["%l"] = ir; // hour, range 1 to 12 (12h format)
s["%m"] = (m < 9) ? ("0" + (1+m)) : (1+m); // month, range 01 to 12
s["%M"] = (min < 10) ? ("0" + min) : min; // minute, range 00 to 59
s["%n"] = "\n"; // a newline character
s["%p"] = pm ? "PM" : "AM";
s["%P"] = pm ? "pm" : "am";
// FIXME: %r : the time in am/pm notation %I:%M:%S %p
// FIXME: %R : the time in 24-hour notation %H:%M
s["%s"] = Math.floor(this.getTime() / 1000);
s["%S"] = (sec < 10) ? ("0" + sec) : sec; // seconds, range 00 to 59
s["%t"] = "\t"; // a tab character
// FIXME: %T : the time in 24-hour notation (%H:%M:%S)
s["%U"] = s["%W"] = s["%V"] = (wn < 10) ? ("0" + wn) : wn;
s["%u"] = w + 1; // the day of the week (range 1 to 7, 1 = MON)
s["%w"] = w; // the day of the week (range 0 to 6, 0 = SUN)
// FIXME: %x : preferred date representation for the current locale without the time
// FIXME: %X : preferred time representation for the current locale without the date
s["%y"] = ('' + y).substr(2, 2); // year without the century (range 00 to 99)
s["%Y"] = y; // year with the century
s["%%"] = "%"; // a literal '%' character

var re = /%./g;
if (!Calendar.is_ie5 && !Calendar.is_khtml)
return str.replace(re, function (par) { return s[par] par; });

var a = str.match(re);
for (var i = 0; i < a.length; i++) {
var tmp = s[a[i]];
if (tmp) {
re = new RegExp(a[i], 'g');
str = str.replace(re, tmp);
}
}

return str;
};

Date.prototype.__msh_oldSetFullYear = Date.prototype.setFullYear;
Date.prototype.setFullYear = function(y) {
var d = new Date(this);
d.__msh_oldSetFullYear(y);
if (d.getMonth() != this.getMonth())
this.setDate(28);
this.__msh_oldSetFullYear(y);
};

// END: DATE OBJECT PATCHES


// global object that remembers the calendar
window._dynarch_popupCalendar = null;

木馬病毒 Kavo.exe

| 標籤: | 0 意見 |

1.先執行cmd呼叫「命令執行視窗」【步驟2~4請在命令執行視窗裡下指令】

2.執行attrib -A -S -H -R x:\autorun.inf
執行attrib -A -S -H -R x:\ntdelect.com
執行attrib -A -S -H -Rc:\windows\system32\kavo*.*
注意:x代表自己的磁碟機,所有分割的磁碟機都要

3.delc:\windows\system32\kavo.exe
del x:\autorun.inf
del x:\ntdelect.com
注意:x代表自己的磁碟機,所有分割的磁碟機都要
注意:不要砍錯檔!ntdetect是winxp系統檔,ntde『l』ect才是木馬!

4.用attrib x:\autorun.inf和attrib x:\ntdelect.com檢查所有磁碟機是否還有重生的餘孽

5.執行regedit

6.找到HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run
裡有一個執行c:\windows\system32\kavo.exe的值,砍了它,別客氣!

7.找到 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\ Explorer\Advanced\Folder\Hidden\SHOWALL
裡的一個值CheckedValue把它改成1

8. 將c:\windows\system32\kavo0.dll 刪除(選重開機後刪除),如果沒有killbox,就先重開機,在跑完BIOS畫面後一直按F8,選擇進入「安全模式」就可以刪除了

9.成功刪除 c:\windows\system32\kavo0.dll 後,再檢查一次第7步驟的值有沒有改成功
再重開機後試試看能不能「顯示隱藏檔」(本來木馬在的時候,就算選了顯示還是會跳回去),
如果可以就是大功告成了!
如果還是不放心,就看看c:\windows\system32裡還有沒有kavo開頭的檔案,並利用顯示隱藏檔的方式,檢查各分割磁區裡有沒有autorun.inf和ntdelect.com這兩個檔

再重開機後試試看能不能「顯示隱藏檔」(本來木馬在的時候,就算選了顯示還是會跳回去),
如果可以就是大功告成了!
如果還是不放心,就看看c:\windows\system32裡還有沒有kavo開頭的檔案,並利用顯示隱藏檔的方式,檢查各分割磁區裡有沒有autorun.inf和ntdelect.com這兩個檔

安裝流程

2008年3月1日 星期六 | 標籤: | 0 意見 |

安裝詳細流程
第 1 步:上傳
使用 FTP 軟件登錄您的服務器,建立一個單獨的目錄,或選擇合適的位置,確保存放在此位置的文件能夠被 web 請求所訪問到,並且該目錄中具有執行 PHP 代碼的權限。將 Discuz! 文件包的 ./upload 目錄中的全部文件和目錄結構上傳到服務器(注意是上傳 upload 目錄中的文件和目錄,而不是上傳包含 upload 目錄本身的目錄和結構)。

Discuz! 要求使用 FTP 軟件上傳 php 文件時,使用二進制(BINARY)方式進行,否則將無法正常使用。

第 2 步:設置目錄屬性
如果您的服務器使用 Windows 操作系統,可跳過這一步。
您在正式安裝以前,需要設置相關的目錄屬性,以便數據文件可以被 Discuz! 正確的讀寫。使用 FTP 軟件登錄您的服務器,將服務器上以下的目錄屬性設置為 777。

  • /templates
  • /templates/default
  • /templates/default/*.*
  • /attachments
  • /customavatar
  • /forumdata
  • /forumdata/cache
  • /forumdata/templates
  • /forumdata/threadcaches
  • /forumdata/logs

第 3 步:配置數據庫信息
使用編輯器打開您本地機器上的默認配置文件(config.inc.php),看到以下的內容:

$dbhost = 'localhost'; // database server

// 數據庫服務器

$dbuser = 'dbuser'; // database username

// 數據庫用戶名

$dbpw = 'dbpw'; // database password

// 數據庫密碼

$dbname = 'discuz'; // database name

// 數據庫名

$adminemail = 'admin@your.com'; // admin email

// 論壇系統

Email $dbreport = 0; // send db error report? 1=yes

// 是否發送數據庫錯誤報告? 0=否, 1=是

請依據以上的註釋配置空間服務商提供的數據庫服務器、用戶名、密碼及數據庫名。如果您使用自己安裝的服務器環境,我們建議您在可能的情況下,盡量不要使用 root 賬號,而依據 Discuz! 及服務器上其他軟件的需要,單獨為每個程序分配賬號和數據庫,以減少安全問題發生的可能。
請您瞭解:數據庫參數我們也無法告訴您如何設置,需要根據服務器賬號的實際情況而定。如果您不瞭解,請咨詢您的空間服務商,他們會完整的告訴您具體的設置方法。
配置好參數設置後,請保存該文件(config.inc.php),並不要忘記將其上傳到服務器上的論壇目錄中,覆蓋原有的默認配置文件。

第 4 步:執行安裝腳本
請在瀏覽器中運行 install.php,即訪問 http://您的域名/論壇目錄/install.php。
安裝腳本會檢查您的服務器系統環境、剩餘空間、數據庫環境,並具備一定的糾錯功能。如果您在之前某一步驟操作有問題,通常安裝腳本會發現並作以提示,請您根據提示再對安裝過程進行檢查。如果沒有提示出問題,請您按照其中的說明,完成最後的安裝。

第 5 步:運行快速設置嚮導
現在進行到最後一步,如果您瞭解整個論壇的設置則不必運行此嚮導。
請在瀏覽器運行admincp.php,即訪問 http://您的域名/論壇目錄/admincp.php,進行設置,此嚮導將根據您論壇的類型批量設置相關參數,您可以在運行完後,再進入詳細設置進行微調。
安裝成功後,請通過 FTP 刪除安裝腳本(install.php),以避免被再次安裝。

RPC - multithread: server.c

| 標籤: | 0 意見 |

/*
* show_sp.c : display integer sent by client
*/

#include
#include "show.h"

int * show_1(data, req)
int *data;
struct svc_req *req;
{
static int result;
FILE *f;

sleep (10); /* test multi requests are served by multi threads */

f = fopen("/dev/console","w");
if (f == (FILE *)NULL)
{
printf("Cannot open console\n");
}
else
{
printf("Received client's data : %d\n", *data);
result = (int)(*data) * 2;
}
return &result;
}

RPC - multithread: Client.c

| 標籤: | 0 意見 |

/*
* usage: client server-host int-num
* send an integer and collect returns
*/

#include
#include
#include "show.h"

main(argc, argv)
int argc;
char *argv[];
{
CLIENT *clnt;
char *server;
int *result;
int data;

if (argc != 3)
{
printf("usage:%s server integer\n", argv[0]);
exit(1);
}

server = argv[1];
data = atoi(argv[2]);

clnt = clnt_create(server, SHOWPROG, SHOWVER, "tcp");
if (clnt == (CLIENT *)NULL)
{
clnt_pcreateerror(server);
exit(1);
}

result = show_1(&data, clnt);

if (result == (int *)NULL)
{
printf("error\n");
clnt_perror(clnt, server);
exit(1);
}

printf("Parm is now %d\n", *result);
exit(0);
}

現在時間

HSI

Google
 
Powered By Blogger