function submitRoll() {
   showLoading(true);
   if (e=$('captcha_msg')) Element.hide(e);
   new Ajax.Request(BLOGS_P+'roll/roll.ajax.php', {
      parameters: Form.serialize($('roll_form')),
      onSuccess: function(t) {
         hideLoading();
         rsobj = ej(t.responseText);
         if (rsobj.res == 'error' && rsobj.type == 'error_captcha') {
            $('captcha_img').src = PUSH_P+'comment/captcha.php?r='+Math.random();
            $('captcha_text').value = '';
            $('captcha_text').focus();
            Element.show('captcha_msg');
         } else if (rsobj.res == 'error' && rsobj.type == 'too_many') {
            showAlertBox('對不起，您擁有的聯播數目已經達到上限了。');
         } else if (rsobj.res == 'error' && rsobj.type == 'invalid:title') {
            showAlertBox('對不起，您的標題是空白的或是過長。');
         } else if (rsobj.res == 'error' && rsobj.type == 'invalid:description') {
            showAlertBox('對不起，您的描述是空白的或是過長。');
         } else if (rsobj.res == 'ok' && rsobj.roll_id) {
            if ($('roll_form').op.value == 'edit_roll') {
               redirect(BLOGS_P+'roll/info.php?id='+rsobj.roll_id);
            } else if ($('roll_form').op.value == 'new_roll') {
               redirect(BLOGS_P+'roll/edit.php?blogs&id='+rsobj.roll_id);
            }
         }
      }
   });
}

function removeRoll(roll_id) {
   showLoading(true);
   if (e=$('captcha_msg')) Element.hide(e);
   new Ajax.Request(BLOGS_P+'roll/roll.ajax.php', {
      parameters: {'roll_id':roll_id, 'op':'remove_roll'},
      onSuccess: function(t) {
         hideLoading();
         funpDlg.close();
         rsobj = ej(t.responseText);
         if (rsobj.res == 'ok') redirect(BLOGS_P+'roll/');
      }
   });
}

function removeIcon(roll_id, icon_id) {
   showLoading(true);
   new Ajax.Request(BLOGS_P+'roll/roll.ajax.php', {
      parameters: {'op':'remove_icon', 'roll_id':roll_id, 'icon_id':icon_id},
      onSuccess: function(t) {
         hideLoading();
         rsobj = ej(t.responseText);
         if (rsobj.res == 'ok') {
            Element.remove('icon_'+icon_id);
         }
      }
   });
}

function participate(op, roll_id, type, type_id, remove) {
   var args = {'roll_id':roll_id};
   args['op'] = op;
   args[type] = type_id;
   if (remove) args['remove'] = true;
   showLoading();
   new Ajax.Request(BLOGS_P+'roll/roll.ajax.php', {
      parameters: args,
      onSuccess: function(t) {
         hideLoading();
         rsobj = ej(t.responseText);
         if (rsobj.res == 'error' && rsobj.type == 'too_many') {
            showAlertBox('對不起，參與此聯播的部落格數目已經達到上限了。');
         } else if (rsobj.res == 'error' && rsobj.type == 'participate_fail') {
            showAlertBox('您所輸入的部落格已經參與此聯播。');
         } else if (rsobj.res == 'ok') {
            Element.update('participants', rsobj.participants);
         }
      }
   });
}

function addToRoll(blog_id) {
   participate('participate', currentRoll, 'blog_id', blog_id, false);
}

function removeFromRoll(blog_id) {
   participate('participate', currentRoll, 'blog_id', blog_id, true);
}

function importFavoTag(favotag_id) {
   participate('importFavoTag', currentRoll, 'favotag_id', favotag_id, false);
}

function removeImage(roll_id) {
   showLoading(true);
   new Ajax.Request(BLOGS_P+'roll/roll.ajax.php', {
      parameters: {'op':'remove_image', 'roll_id':roll_id},
      onSuccess: function(t) {
         hideLoading();
         rsobj = ej(t.responseText);
         if (rsobj.res == 'error' && rsobj.type == 'error_captcha') {
         } else if (rsobj.res == 'ok') {
            redirect(location.href);
         }
      }
   });
}

function favoRoll(roll_id, remove) {
   if (!isUserLogined) {
      checkLogin('javascript:favoRoll('+roll_id+', '+remove+')');
      return;
   }
   var args = {'op':'favo', 'roll_id':roll_id};
   if (remove) args['remove'] = true;
   showLoading();
   new Ajax.Request(BLOGS_P+'roll/roll.ajax.php', {
      parameters: args,
      onSuccess: function(t) {
         hideLoading();
         rsobj = ej(t.responseText);
         if (rsobj.res == 'error' && rsobj.type == 'too_many') {
            showAlertBox('對不起，您最愛的聯播數目已經達到上限了。');
         } else if (rsobj.res == 'ok') {
            if (remove) {
               // num
               if (e=$('rNum_'+rsobj.roll_id)) Element.update(e, rsobj.favoCount);
               // button
               if (e=$('rButton_'+rsobj.roll_id)) {
                  Element.removeClassName(e, 'buttonPlugin_press');
                  Element.addClassName(e, 'buttonPlugin');
                  e.href = 'javascript:addFavoRoll('+rsobj.roll_id+');';
               }
               // button2
               if (e=$('rButton2_'+rsobj.roll_id)) Element.hide(e);
            } else {
               // num
               if (e=$('rNum_'+rsobj.roll_id)) Element.update(e, rsobj.favoCount);
               // button
               if (e=$('rButton_'+rsobj.roll_id)) Element.addClassName(e, 'buttonPlugin_press');
               // button2
               if (e=$('rButton2_'+rsobj.roll_id)) Element.show(e);
            }
         }
      }
   });
}

function addFavoRoll(roll_id) {
   favoRoll(roll_id, false);
}

function removeFavoRoll(roll_id) {
   favoRoll(roll_id, true);
}

