var REG_ERROR_NAME_DUPLICATE  = '*帳號已被註冊';
var REG_ERROR_MAIL_DUPLICATE  = '*信箱已被註冊';
var REG_ERROR_MAIL_FORBIDDEN  = '*請輸入正確的電子郵件信箱';
var REG_ERROR_REQUIRED_FIELD  = '*必要欄位';
var REG_ERROR_CHECK_USERTERM  = '您必須同意使用者條款，才能啟用funP.com的服務。';
var REG_ERROR_NAME_FORMAT     = '請檢查帳號格式是否填寫正確';

function clearErrorMsg(id){
   $(id).innerHTML = '&nbsp';
}

function checkUsername( doAjax ){
   if( typeof(doAjax) == 'undefined' )
      doAjax = true;
   if( $F('username') == '' ){
      $('username_msg').innerHTML = REG_ERROR_REQUIRED_FIELD;
      return false;
   }else if( !$F('username').match(/^[a-zA-Z]+[0-9a-zA-Z]+$/) ){
      $('username_msg').innerHTML = '*帳號只能包含英文字元和數字，並以英文字元為首，長度為兩個字元以上';
      return false;
   }else if( $F('username').match(/(fuck)/i) ){
      $('username_msg').innerHTML = '*帳號不能使用髒字';
      return false;
   }else if( doAjax ){
      new Ajax.Request( ACCOUNT_P+'register/register.ajax.php', {
         method: 'post',
         parameters:{'op':'checkUsername', 'username':$F('username')},
         onSuccess: function(rs){
            rsobj = ej(rs.responseText);
            if( rsobj.res == 'ok' ){
               $('username_ok').innerHTML = 'OK!';
            }else{
               if( rsobj.type == 'username_duplicate' )
                  $('username_msg').innerHTML = REG_ERROR_NAME_DUPLICATE;
            }
         }
      });
   }
   return true;
}

function checkEmail( doAjax ){
   if( typeof(doAjax) == 'undefined' )
      doAjax = true;

   if($F('email') == ''){
      $('email_msg').innerHTML = REG_ERROR_REQUIRED_FIELD;
      return false;
   }
   var filter=/^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/i
   if (!(matched=$F('email').match(filter))){
      $('email_msg').innerHTML = '*請輸入正確的電子郵件信箱';
      return false;
   }
   var funp_f=/^([\w-]+(?:\.[\w-]+)*)@(funp\.com|discardmail\.com|meltmail\.com|spambog\.com|modmailcom\.com|guerrillamail\.\w+|trashymail\.com|aa\.a0927\.com|bsnow\.net|jetable\.org)$/i
   if ($F('email').match(funp_f)){
      $('email_msg').innerHTML = REG_ERROR_MAIL_FORBIDDEN;
      return false;
   }
   var common = [
      {dn:'yahoo.com', full:false, dist:2}, 
      {dn:'yahoo.com.tw', full:true, dist:1}, 
      {dn:'gmail.com', full:true, dist:2}, 
      {dn:'hotmail.com', full:true, dist:2}
   ];
   for (var i=0; i<common.length; ++i) {
      var s1 = common[i].dn;
      var s2 = matched[2]+(common[i].full?'.'+matched[3]:'');
      var r = matched[1]+'@'+common[i].dn+(common[i].full?'':'.'+matched[3]);
      var dst = edit_dst(s1, s2);
      if (0 < dst && dst <= common[i].dist && confirm('您的意思是'+r+'嗎？')) {
         $('email').value = r;
         break;
      }
   }
   if(doAjax){
      new Ajax.Request( ACCOUNT_P+'register/register.ajax.php', {
         method: 'post',
         parameters: { 'op':'checkEmail', 'email':$F('email') },
         onSuccess: function(rs){
            rsobj = ej(rs.responseText);
            if( rsobj.res == 'ok' ){
               $('email_ok').innerHTML = 'OK!';
            }else{
               if( rsobj.type == 'email_duplicate' )
                  $('email_msg').innerHTML = REG_ERROR_MAIL_DUPLICATE;
               else if( rsobj.errtype == 'forbidden_mail' )
                  $('email_msg').innerHTML = REG_ERROR_MAIL_FORBIDDEN;
            }
         }
      });
   }
   return true;
}

function checkPassword(){
   if( $F('nickname') == ''){
      $('nickname_msg').innerHTML = REG_ERROR_REQUIRED_FIELD;
   } else {
      $('nickname_ok').innerHTML = 'OK!';
   }

   if($F('password') == '' || $F('password') == ''){
      $('password_msg').innerHTML = '*請輸入密碼和密碼確認';
      return false;
   }else if($F('password').length < 6){
      $('password_msg').innerHTML = '*密碼長度不足6個字元';
      return false;
   }else if($F('password') != $F('repassword')){
      $('password_msg').innerHTML = '*密碼和密碼確認不相符';
      return false;
   }
   return true;
}

function edit_dst(s1, s2) {
   var i,j,t = new Array(s1.length+1);
   for (i=0; i<=s1.length; ++i) t[i] = new Array(s2.length+1);
   t[0][0] = 0;
   for (j=1; j<=s2.length; ++j) t[0][j] = j;
   for (i=1; i<=s1.length; ++i) {
      t[i][0] = i;
      for (j=1; j<=s2.length; ++j) {
         t[i][j] = t[i-1][j-1];
         if (s1.charAt(i-1) != s2.charAt(j-1)) ++t[i][j];
         t[i][j] = Math.min(t[i][j], t[i-1][j]+1);
         t[i][j] = Math.min(t[i][j], t[i][j-1]+1);
      }
   }
   return t[s1.length][s2.length];
}

// send upgrade form
function sendUpgrade(){
   if( !$('confirmTermBox').checked ){
      alert(REG_ERROR_CHECK_USERTERM);
      return;
   }
   if( !checkUsername( false ) ){
      alert(REG_ERROR_NAME_FORMAT);
      return;
   }

   showLoading();
   $('submitBtn').disabled = true;
   new Ajax.Request( ACCOUNT_P+'register/register.ajax.php', {
      method:'post',
      parameters: Form.serialize($('upgrade_form')),
      onSuccess: function(rs){
         hideLoading();
         rsobj = ej(rs.responseText);
         if( rsobj.res == 'ok' ){
            Element.hide('upgrade_step');
            Element.show('confirm_step');
         }else{
            $('submitBtn').disabled = false;
            if( rsobj.type == 'username_duplicate' ){
               $('username_msg').innerHTML = REG_ERROR_NAME_DUPLICATE;
               alert("請檢查帳號名稱，確認是否無誤");
            }else alert("設定失敗，請重新嘗試");               
         }
      }
   });
}

// check register args
function checkRegArgs(){
   if( !$('confirmTermBox').checked ){
      alert(REG_ERROR_CHECK_USERTERM);
      return;
   }
   if( !checkPassword() ){
      alert("請檢查密碼長度是否不足，或是不相符");
      return;
   }
   if( !checkUsername(false) ){
      alert(REG_ERROR_NAME_FORMAT);
      return;
   }   
   if( !checkEmail(false) ){
      alert("請檢查電子郵件信箱是否填寫正確");
      return;
   }   
   new Ajax.Request( ACCOUNT_P+'register/register.ajax.php', {
      method: 'post',
      parameters: {'op':'checkAll', 'username':$F('username'), 'email':$F('email')},
      onSuccess: function(rs){
         rsobj = ej(rs.responseText);
         if( rsobj.res == 'ok' ){
            $('username_ok').innerHTML = 'OK!';
            $('email_ok').innerHTML = 'OK!';
            // send register form
            sendRegister();
         }else{
            if( rsobj.type == 'username_duplicate' )
               $('username_msg').innerHTML = REG_ERROR_NAME_DUPLICATE;
            else if( rsobj.errtype == 'email_duplicate' )
               $('email_msg').innerHTML = REG_ERROR_MAIL_DUPLICATE;
            else if( rsobj.errtype == 'forbidden_mail' )
               $('email_msg').innerHTML = REG_ERROR_MAIL_FORBIDDEN;
            
            alert("請檢查註冊資料，確認是否無誤");
         }
      }
   });
}
// send register form
function sendRegister(){
   showLoading();
   $('submitBtn').disabled = true;
   Element.hide('captcha_error');
   new Ajax.Request( ACCOUNT_P+'register/register.ajax.php', {
      method:'post',
      parameters: Form.serialize($('register_form')),
      onSuccess: function(rs){
         hideLoading();
         rsobj = ej(rs.responseText);
         if( rsobj.res == 'ok' ){
            $('reg_fmail').innerHTML = ' &lt;'+$F('email')+'&gt; ';
            Element.hide('register_step');
            Element.show('confirm_step');
         }else{
            if( rsobj.type == 'error_captcha'){
               Element.show('captcha_error');
               $('user_code').value = '';
               $('submitBtn').disabled = false;
               $('captcha_img').src = PUSH_P+'comment/captcha.php?r='+
                                      Math.random();
            }else{
               alert('註冊帳號失敗，請重新嘗試');
               $('submitBtn').disabled = false;
            }
         }
      }
   });
}
