merge sandbox to trunk for 1.4.4.2

git-svn-id: http://xe-core.googlecode.com/svn/trunk@7944 201d5d3c-b55e-5fd7-737f-ddc643e51545
This commit is contained in:
ngleader 2010-11-30 07:01:36 +00:00
parent 9139515e57
commit f59deeb270
131 changed files with 11605 additions and 4218 deletions

View file

@ -69,8 +69,8 @@
$lang->webmaster_name = '管理員名稱';
$lang->webmaster_email = '管理員電子郵件';
$lang->about_keep_signed = '關閉瀏覽器後也將維持登入狀態。\n\n使用自動登入功能可解決每次訪問都要輸入帳號及密碼的麻煩。\n\n為防止個人資料洩露,在網咖,學校等公共場所,請務必要確認解除登入狀態。';
$lang->about_keep_warning = '關閉瀏覽器後也將維持登入狀態。\n\n使用自動登入功能可解決每次訪問都要輸入帳號及密碼的麻煩。 為防止個人資料洩露,在網咖,學校等公共場所,請務必要確認解除登入狀態。';
$lang->about_keep_signed = '關閉瀏覽器後也將維持登入狀態。<br />使用此功能,可解決每次訪問都要輸入帳號及密碼的麻煩。<br />為防止個人資料洩露,在網咖,學校等公共場所,請務必要確認解除登入狀態。';
$lang->about_keep_warning = '關閉瀏覽器後也將維持登入狀態。<br />使用此功能,可解決每次訪問都要輸入帳號及密碼的麻煩。<br />為防止個人資料洩露,在網咖,學校等公共場所,請務必要確認解除登入狀態。';
$lang->about_webmaster_name = '請輸入認證所需的電子郵件地址或管理其他網站時要使用的網站管理員名稱。(預設 : webmaster)';
$lang->about_webmaster_email = '請輸入網站管理員的電子郵件地址。';

View file

@ -51,22 +51,22 @@
$args->s_email_address = $search_keyword;
break;
case 'regdate' :
$args->s_regdate = ereg_replace("[^0-9]","",$search_keyword);
$args->s_regdate = preg_replace("/[^0-9]/","",$search_keyword);
break;
case 'regdate_more' :
$args->s_regdate_more = substr(ereg_replace("[^0-9]","",$search_keyword) . '00000000000000',0,14);
$args->s_regdate_more = substr(preg_replace("/[^0-9]/","",$search_keyword) . '00000000000000',0,14);
break;
case 'regdate_less' :
$args->s_regdate_less = substr(ereg_replace("[^0-9]","",$search_keyword) . '00000000000000',0,14);
$args->s_regdate_less = substr(preg_replace("/[^0-9]/","",$search_keyword) . '00000000000000',0,14);
break;
case 'last_login' :
$args->s_last_login = $search_keyword;
break;
case 'last_login_more' :
$args->s_last_login_more = substr(ereg_replace("[^0-9]","",$search_keyword) . '00000000000000',0,14);
$args->s_last_login_more = substr(preg_replace("/[^0-9]/","",$search_keyword) . '00000000000000',0,14);
break;
case 'last_login_less' :
$args->s_last_login_less = substr(ereg_replace("[^0-9]","",$search_keyword) . '00000000000000',0,14);
$args->s_last_login_less = substr(preg_replace("/[^0-9]/","",$search_keyword) . '00000000000000',0,14);
break;
case 'extra_vars' :
$args->s_extra_vars = ereg_replace("[^0-9]","",$search_keyword);
@ -75,8 +75,13 @@
}
// selected_group_srl이 있으면 query id를 변경 (table join때문에)
$sort_order = Context::get('sort_order');
$sort_index = Context::get('sort_index');
if($sort_index != 'last_login') $sort_index = "member_srl";
if($sort_index != 'last_login') {
$sort_index = "list_order";
}else{
$sort_order = 'desc';
}
if($args->selected_group_srl) {
$query_id = 'member.getMemberListWithinGroup';
$args->sort_index = "member.".$sort_index;
@ -84,8 +89,7 @@
$query_id = 'member.getMemberList';
$args->sort_index = $sort_index;
}
$sort_order = Context::get('sort_order');
if($sort_order != "asc") $sort_order = "desc";
if($sort_order != "desc") $sort_order = "asc";
$args->sort_order = $sort_order;
Context::set('sort_order', $sort_order);
@ -93,7 +97,8 @@
$args->page = Context::get('page');
$args->list_count = 40;
$args->page_count = 10;
return executeQuery($query_id, $args);
$output = executeQuery($query_id, $args);
return $output;
}
/**

View file

@ -153,6 +153,9 @@
if(!$oDB->isColumnExists("member", "find_account_question")) return true;
if(!$oDB->isColumnExists("member", "find_account_answer")) return true;
if(!$oDB->isColumnExists("member", "list_order")) return true;
if(!$oDB->isIndexExists("member","idx_list_order")) return true;
return false;
}
@ -206,6 +209,18 @@
$oDB->addColumn("member", "find_account_answer", "varchar", 250);
}
if(!$oDB->isColumnExists("member", "list_order")) {
$oDB->addColumn("member", "list_order", "number", 11);
set_time_limit(0);
$args->list_order = 'member_srl';
executeQuery('member.updateMemberListOrderAll',$args);
executeQuery('member.updateMemberListOrderAll');
}
if(!$oDB->isIndexExists("member","idx_list_order")) {
$oDB->addIndex("member","idx_list_order", array("list_order"));
}
return new Object(0, 'success_updated');
}

View file

@ -540,6 +540,7 @@
// 필수 정보들을 미리 추출
$args = Context::gets('user_id','user_name','nick_name','homepage','blog','birthday','email_address','password','allow_mailing','find_account_question','find_account_answer');
$args->member_srl = getNextSequence();
$args->list_order = -1 * $args->member_srl;
// 넘어온 모든 변수중에서 몇가지 불필요한 것들 삭제
$all_args = Context::getRequestVars();
@ -613,6 +614,7 @@
unset($all_args->body);
unset($all_args->accept_agreement);
unset($all_args->signature);
unset($all_args->_filter);
// 모든 request argument에서 필수 정보만 제외 한 후 추가 데이터로 입력
$extra_vars = delObjectVars($all_args, $args);
@ -1050,11 +1052,14 @@
// 임시비밀번호로 변경 및 비밀번호 변경시간을 1로 설정
$args->member_srl = $member_srl;
list($usec, $sec) = explode(" ", microtime());
$args->temp_password = substr(md5($user_id . $member_info->find_account_answer. $usec . $sec),0,20);
$args->change_password_date = '1';
$this->updateMemberPassword($args);
$temp_password = substr(md5($user_id . $member_info->find_account_answer. $usec . $sec),0,15);
$_SESSION['xe_temp_password_'.$user_id] = $args->temp_password;
$args->password = $temp_password;
$args->change_password_date = '1';
$output = $this->updateMemberPassword($args);
if(!$output->toBool()) return $output;
$_SESSION['xe_temp_password_'.$user_id] = $temp_password;
$this->add('user_id',$user_id);
}
@ -1627,6 +1632,7 @@
// DB에 입력
$args->member_srl = getNextSequence();
$args->list_order = -1 * $args->member_srl;
if($args->password && !$password_is_hashed) $args->password = md5($args->password);
elseif(!$args->password) unset($args->password);

View file

@ -23,7 +23,7 @@
</group>
</conditions>
<navigation>
<index var="sort_index" default="member_srl" order="sort_order" />
<index var="sort_index" default="list_order" order="sort_order" />
<list_count var="list_count" default="20" />
<page_count var="page_count" default="10" />
<page var="page" default="1" />

View file

@ -26,7 +26,7 @@
</group>
</conditions>
<navigation>
<index var="sort_index" default="member.member_srl" order="sort_order" />
<index var="sort_index" default="member.list_order" order="sort_order" />
<list_count var="list_count" default="20" />
<page_count var="page_count" default="10" />
<page var="page" default="1" />

View file

@ -25,5 +25,6 @@
<column name="is_admin" var="is_admin" default="N" />
<column name="description" var="description" />
<column name="extra_vars" var="extra_vars" />
<column name="list_order" var="list_order" />
</columns>
</query>

View file

@ -5,4 +5,4 @@
<columns>
<column name="change_password_date" var="change_password_date" notnull="notnull" default="curdate()" />
</columns>
</query>
</query>

View file

@ -0,0 +1,8 @@
<query id="updateMemberListOrderAll" action="update">
<tables>
<table name="member" />
</tables>
<columns>
<column name="list_order" notnull="notnull" var="list_order" default="multiply(-1)" />
</columns>
</query>

View file

@ -1,25 +1,26 @@
<table name="member">
<column name="member_srl" type="number" size="11" notnull="notnull" primary_key="primary_key" />
<column name="user_id" type="varchar" size="80" notnull="notnull" unique="unique_user_id" />
<column name="email_address" type="varchar" size="250" notnull="notnull" unique="unique_email_address" />
<column name="password" type="varchar" size="60" notnull="notnull" />
<column name="email_id" type="varchar" size="80" notnull="notnull" />
<column name="email_host" type="varchar" size="160" index="idx_email_host" />
<column name="user_name" type="varchar" size="40" notnull="notnull" />
<column name="nick_name" type="varchar" size="40" notnull="notnull" unique="unique_nick_name" />
<column name="find_account_question" type="number" size="11" />
<column name="find_account_answer" type="varchar" size="250" />
<column name="homepage" type="varchar" size="250" />
<column name="blog" type="varchar" size="250" />
<column name="birthday" type="char" size="8" />
<column name="allow_mailing" type="char" size="1" default="Y" notnull="notnull" index="idx_allow_mailing" />
<column name="allow_message" type="char" size="1" default="Y" notnull="notnull" />
<column name="denied" type="char" size="1" default="N" index="idx_is_denied" />
<column name="limit_date" type="date" />
<column name="regdate" type="date" index="idx_regdate" />
<column name="last_login" type="date" index="idx_last_login" />
<column name="change_password_date" type="date" />
<column name="is_admin" type="char" size="1" default="N" index="idx_is_admin" />
<column name="description" type="text" />
<column name="extra_vars" type="text" />
<column name="member_srl" type="number" size="11" notnull="notnull" primary_key="primary_key" />
<column name="user_id" type="varchar" size="80" notnull="notnull" unique="unique_user_id" />
<column name="email_address" type="varchar" size="250" notnull="notnull" unique="unique_email_address" />
<column name="password" type="varchar" size="60" notnull="notnull" />
<column name="email_id" type="varchar" size="80" notnull="notnull" />
<column name="email_host" type="varchar" size="160" index="idx_email_host" />
<column name="user_name" type="varchar" size="40" notnull="notnull" />
<column name="nick_name" type="varchar" size="40" notnull="notnull" unique="unique_nick_name" />
<column name="find_account_question" type="number" size="11" />
<column name="find_account_answer" type="varchar" size="250" />
<column name="homepage" type="varchar" size="250" />
<column name="blog" type="varchar" size="250" />
<column name="birthday" type="char" size="8" />
<column name="allow_mailing" type="char" size="1" default="Y" notnull="notnull" index="idx_allow_mailing" />
<column name="allow_message" type="char" size="1" default="Y" notnull="notnull" />
<column name="denied" type="char" size="1" default="N" index="idx_is_denied" />
<column name="limit_date" type="date" />
<column name="regdate" type="date" index="idx_regdate" />
<column name="last_login" type="date" index="idx_last_login" />
<column name="change_password_date" type="date" />
<column name="is_admin" type="char" size="1" default="N" index="idx_is_admin" />
<column name="description" type="text" />
<column name="extra_vars" type="text" />
<column name="list_order" type="number" size="11" notnull="notnull" index="idx_list_order" />
</table>

View file

@ -51,16 +51,17 @@
<th><div>{$lang->email_address} <span class="require">*</span></div></th>
<td><input type="text" name="email_address" value="{htmlspecialchars($member_info->email_address)}" /><p>{$lang->about_email_address}</p></td>
</tr>
<!--@if($member_info->find_account_question)-->
<tr>
<!--@if(count($lang->find_account_question_items)>1)-->
<tr>
<th><div>{$lang->find_account_question} <span class="require">*</span></div></th>
<td>
<select name="find_account_question">
<!--@for($i=1,$c=count($lang->find_account_question_items);$i<$c;$i++)-->
<option value="{$i}" <!--@if($member_info->find_account_question==$i)-->selected="selected" <!--@end-->>{$lang->find_account_question_items[$i]}</option>
<option value="{$i}">{$lang->find_account_question_items[$i]}</option>
<!--@end-->
</select>
<br /><input type="text" name="find_account_answer" value="{$member_info->find_account_answer}" class="inputTypeText w300"/>
<br />
<input type="text" name="find_account_answer" value="{$member_info->find_account_answer}" class="inputTypeText w300"/>
</td>
</tr>
<!--@end-->

View file

@ -1,42 +1,42 @@
/* Mobile XE Login (/modules/member/tpl/login_form.html) */
body{margin:0;background:#fff;color:#000;word-wrap:break-word}
body,input,textarea,select,button,table{font-family:Tahoma,Geneva,sans-serif}
img{border:0}
em{font-style:normal}
form{margin:0;padding:0}
fieldset{margin:0;padding:0;border:0}
textarea{resize:vertical}
input[type=checkbox],
input[type=radio]{width:13px;height:13px;margin:0;padding:0}
/* Common */
.fl{float:left}
.fr{float:right}
/* Body */
.bd{background:#f8f8f8;padding:1px 0;border-bottom:1px solid #ccc8be}
.bd:after{content:"";margin:0;position:relative;top:3px;display:block;clear:both;height:1px;background:#fff}
/* Hx */
.hx{position:relative;border-bottom:1px solid #ccc8be;padding:8px 10px;margin:0}
.hx:after{content:"";margin:0 -10px;position:relative;top:10px;display:block;clear:both;height:1px;background:#fff}
.hx.h2{background:#e5e5e5}
.hx h2{margin:0 10px 0 0;display:inline}
.hx h2{font-size:16px;line-height:1.4}
/* Form Field */
.ff{margin:0;padding:10px 0}
.ff ul{margin:0 10px 10px 10px;padding:10px 0 0 0;list-style:none}
.ff li{margin:0 0 5px 0;padding:0}
.ff label+input[type=text],
.ff label+input[type=password],
.ff label+textarea,
.ff label+select{display:block;width:96%;font-size:14px;margin:0 0 5px 0}
.ff label+input[type=text],
.ff label+input[type=password],
.ff label+textarea{padding:5px}
/* Button Area */
.bna{text-align:center;padding:0 10px;margin:10px 0}
.bna:after{content:"";display:block;clear:both}
.bn{display:inline-block;line-height:26px !important;padding:0 10px;font-size:12px;font-weight:bold;border:1px solid;text-decoration:none;border-radius:5px;-moz-border-radius:5px;-webkit-border-radius:5px;cursor:pointer;vertical-align:middle}
.bn[type=submit],
.bn[type=button]{height:28px}
.bn[href]{height:26px}
.bn.dark{border-color:#666;background:#777 -webkit-gradient(linear,0% 0%,0% 100%,from(#7e7c78),to(#5c5b58));background:#777 -moz-linear-gradient(top,#7e7c78,#5c5b58);color:#fff;box-shadow:0 0 1px #fff inset;-moz-box-shadow:0 0 1px #fff inset;-webkit-box-shadow:0 0 1px #fff inset}
.bn.white{border-color:#b5b5b5;background:#1b1b1b -webkit-gradient(linear,0% 0%,0% 100%,from(#fff),to(#f6f6f6),color-stop(0.5,#f0f0f0),color-stop(0.5,#e4e4e4));background:#1b1b1b -moz-linear-gradient(top,#fff,#e4e4e4);color:#000}
/* Mobile XE Login (/modules/member/tpl/login_form.html) */
body{margin:0;background:#fff;color:#000;word-wrap:break-word}
body,input,textarea,select,button,table{font-family:Tahoma,Geneva,sans-serif}
img{border:0}
em{font-style:normal}
form{margin:0;padding:0}
fieldset{margin:0;padding:0;border:0}
textarea{resize:vertical}
input[type=checkbox],
input[type=radio]{width:13px;height:13px;margin:0;padding:0}
/* Common */
.fl{float:left}
.fr{float:right}
/* Body */
.bd{background:#f8f8f8;padding:1px 0;border-bottom:1px solid #ccc8be}
.bd:after{content:"";margin:0;position:relative;top:3px;display:block;clear:both;height:1px;background:#fff}
/* Hx */
.hx{position:relative;border-bottom:1px solid #ccc8be;padding:8px 10px;margin:0}
.hx:after{content:"";margin:0 -10px;position:relative;top:10px;display:block;clear:both;height:1px;background:#fff}
.hx.h2{background:#e5e5e5}
.hx h2{margin:0 10px 0 0;display:inline}
.hx h2{font-size:16px;line-height:1.4}
/* Form Field */
.ff{margin:0;padding:10px 0}
.ff ul{margin:0 10px 10px 10px;padding:10px 0 0 0;list-style:none}
.ff li{margin:0 0 5px 0;padding:0}
.ff label+input[type=text],
.ff label+input[type=password],
.ff label+textarea,
.ff label+select{display:block;width:96%;font-size:14px;margin:0 0 5px 0}
.ff label+input[type=text],
.ff label+input[type=password],
.ff label+textarea{padding:5px}
/* Button Area */
.bna{text-align:center;padding:0 10px;margin:10px 0}
.bna:after{content:"";display:block;clear:both}
.bn{display:inline-block;line-height:26px !important;padding:0 10px;font-size:12px;font-weight:bold;border:1px solid;text-decoration:none;border-radius:5px;-moz-border-radius:5px;-webkit-border-radius:5px;cursor:pointer;vertical-align:middle}
.bn[type=submit],
.bn[type=button]{height:28px}
.bn[href]{height:26px}
.bn.dark{border-color:#666;background:#777 -webkit-gradient(linear,0% 0%,0% 100%,from(#7e7c78),to(#5c5b58));background:#777 -moz-linear-gradient(top,#7e7c78,#5c5b58);background-color:#777;color:#fff;box-shadow:0 0 1px #fff inset;-moz-box-shadow:0 0 1px #fff inset;-webkit-box-shadow:0 0 1px #fff inset}
.bn.white{border-color:#b5b5b5;background:#1b1b1b -webkit-gradient(linear,0% 0%,0% 100%,from(#fff),to(#f6f6f6),color-stop(0.5,#f0f0f0),color-stop(0.5,#e4e4e4));background:#1b1b1b -moz-linear-gradient(top,#fff,#e4e4e4);background-color:#fff;color:#000}

View file

@ -1,50 +1,50 @@
@charset "utf-8";
/* Mobile XE (/modules/member/tpl/signup_form.html) */
body{margin:0;background:#fff;color:#000;word-wrap:break-word}
body,input,textarea,select,button,table{font-family:Tahoma,Geneva,sans-serif}
img{border:0}
em{font-style:normal}
form{margin:0;padding:0}
fieldset{margin:0;padding:0;border:0}
textarea{resize:vertical}
input[type=checkbox],
input[type=radio]{width:13px;height:13px;margin:0;padding:0}
/* Body */
.bd{background:#f8f8f8;padding:1px 0}
/* Hx */
.hx{position:relative;border-bottom:1px solid #ccc8be;padding:8px 10px;margin:0}
.hx:after{content:"";margin:0 -10px;position:relative;top:10px;display:block;clear:both;height:1px;background:#fff}
.hx.h2{background:#e5e5e5;text-shadow:1px 1px 0 #fff}
.hx.h2 em{font-size:12px;color:#6352d2}
.hx.h3{background:#868686;color:#fff}
.hx.h3 em{font-size:12px}
.hx h2, .hx h3{margin:0 10px 0 0;display:inline}
.hx h2{font-size:16px;line-height:1.4}
.hx h3{font-size:14px}
.hx a{color:#000}
.hx .ex{font-size:12px}
.hx .tg{position:absolute;top:0;left:0;width:100%;height:100%;margin:0;padding:0;overflow:visible;border:0;cursor:pointer;opacity:0;filter:alpha(opacity=0);background:none}
.hx .ca{font-size:12px;text-decoration:underline;color:#333}
.hx .ca:after{content:"";display:inline-block;position:relative;left:4px;width:0;height:0;border:4px solid;border-color:transparent;border-left-color:#8d7de1;margin:0 -8px 0 0}
.hx .write{position:absolute;top:8px;right:10px;background-position:0 0;display:inline-block;width:28px;height:27px;font-size:0;overflow:hidden;text-indent:28px}
/* Form Field */
.ff{margin:0;padding:10px 0}
.ff ul{margin:0 10px 10px 10px;padding:10px 0 0 0;list-style:none}
.ff li{margin:0 0 5px 0;padding:0}
.ff li p{color:#666}
.ff label+input[type=text],
.ff label+input[type=password],
.ff label+textarea,
.ff label+select{display:block;width:96%;font-size:14px;margin:0 0 5px 0}
.ff label+input[type=text],
.ff label+input[type=password],
.ff label+textarea{padding:5px}
/* Button Area */
.bna{text-align:center;padding:0 10px;margin:10px 0}
.bna:after{content:"";display:block;clear:both}
.bn{display:inline-block;line-height:26px !important;padding:0 10px;font-size:12px;font-weight:bold;border:1px solid;text-decoration:none;border-radius:5px;-moz-border-radius:5px;-webkit-border-radius:5px;cursor:pointer;vertical-align:middle}
.bn[type=submit],
.bn[type=button]{height:28px}
.bn[href]{height:26px}
.bn.dark{border-color:#666;background:#777 -webkit-gradient(linear,0% 0%,0% 100%,from(#7e7c78),to(#5c5b58));background:#777 -moz-linear-gradient(top,#7e7c78,#5c5b58);background-color:#777;color:#fff;box-shadow:0 0 1px #fff inset;-moz-box-shadow:0 0 1px #fff inset;-webkit-box-shadow:0 0 1px #fff inset}
.bn.white{border-color:#b5b5b5;background:#1b1b1b -webkit-gradient(linear,0% 0%,0% 100%,from(#fff),to(#f6f6f6),color-stop(0.5,#f0f0f0),color-stop(0.5,#e4e4e4));background:#1b1b1b -moz-linear-gradient(top,#fff,#e4e4e4);background-color:#1b1b1b;color:#000}
@charset "utf-8";
/* Mobile XE (/modules/member/tpl/signup_form.html) */
body{margin:0;background:#fff;color:#000;word-wrap:break-word}
body,input,textarea,select,button,table{font-family:Tahoma,Geneva,sans-serif}
img{border:0}
em{font-style:normal}
form{margin:0;padding:0}
fieldset{margin:0;padding:0;border:0}
textarea{resize:vertical}
input[type=checkbox],
input[type=radio]{width:13px;height:13px;margin:0;padding:0}
/* Body */
.bd{background:#f8f8f8;padding:1px 0}
/* Hx */
.hx{position:relative;border-bottom:1px solid #ccc8be;padding:8px 10px;margin:0}
.hx:after{content:"";margin:0 -10px;position:relative;top:10px;display:block;clear:both;height:1px;background:#fff}
.hx.h2{background:#e5e5e5;text-shadow:1px 1px 0 #fff}
.hx.h2 em{font-size:12px;color:#6352d2}
.hx.h3{background:#868686;color:#fff}
.hx.h3 em{font-size:12px}
.hx h2, .hx h3{margin:0 10px 0 0;display:inline}
.hx h2{font-size:16px;line-height:1.4}
.hx h3{font-size:14px}
.hx a{color:#000}
.hx .ex{font-size:12px}
.hx .tg{position:absolute;top:0;left:0;width:100%;height:100%;margin:0;padding:0;overflow:visible;border:0;cursor:pointer;opacity:0;background:none}
.hx .ca{font-size:12px;text-decoration:underline;color:#333}
.hx .ca:after{content:"";display:inline-block;position:relative;left:4px;width:0;height:0;border:4px solid;border-color:transparent;border-left-color:#8d7de1;margin:0 -8px 0 0}
.hx .write{position:absolute;top:8px;right:10px;background-position:0 0;display:inline-block;width:28px;height:27px;font-size:0;overflow:hidden;text-indent:28px}
/* Form Field */
.ff{margin:0;padding:10px 0}
.ff ul{margin:0 10px 10px 10px;padding:10px 0 0 0;list-style:none}
.ff li{margin:0 0 5px 0;padding:0}
.ff li p{color:#666}
.ff label+input[type=text],
.ff label+input[type=password],
.ff label+textarea,
.ff label+select{display:block;width:96%;font-size:14px;margin:0 0 5px 0}
.ff label+input[type=text],
.ff label+input[type=password],
.ff label+textarea{padding:5px}
/* Button Area */
.bna{text-align:center;padding:0 10px;margin:10px 0}
.bna:after{content:"";display:block;clear:both}
.bn{display:inline-block;line-height:26px !important;padding:0 10px;font-size:12px;font-weight:bold;border:1px solid;text-decoration:none;border-radius:5px;-moz-border-radius:5px;-webkit-border-radius:5px;cursor:pointer;vertical-align:middle}
.bn[type=submit],
.bn[type=button]{height:28px}
.bn[href]{height:26px}
.bn.dark{border-color:#666;background:#777 -webkit-gradient(linear,0% 0%,0% 100%,from(#7e7c78),to(#5c5b58));background:#777 -moz-linear-gradient(top,#7e7c78,#5c5b58);background-color:#777;color:#fff;box-shadow:0 0 1px #fff inset;-moz-box-shadow:0 0 1px #fff inset;-webkit-box-shadow:0 0 1px #fff inset}
.bn.white{border-color:#b5b5b5;background:#1b1b1b -webkit-gradient(linear,0% 0%,0% 100%,from(#fff),to(#f6f6f6),color-stop(0.5,#f0f0f0),color-stop(0.5,#e4e4e4));background:#1b1b1b -moz-linear-gradient(top,#fff,#e4e4e4);background-color:#fff;color:#000}