var checkAllDelete = function($){
	/*
		$a = Check All Checkbox
		$c = Single Checkboxes
		$cs = String for single checkbox
		$b = Button
		$m = Delete confirm message
		$mx = [x] in Delete message 
		$ct = Counter
		$s = Success Message Box
		$smt = Success Message
		$fa = form action
		$ad = Ajax Delete
	*/
	var $a, $c, $cs, $b, $m, $mx, $ct, $s, $smt, $fa;
	var $p = 'tr';
	var $ad = false;
			
	function toggleDeleteButton(onOff){
		if(onOff) {
			$b.removeClass('disabled').removeAttr('disabled');
		} else {
			$b.addClass('disabled').attr('disabled','disabled');
		}	
	}
	
	function bindClickToCheckSingles(){
		$c.bind('click',function(){
			if ($c.filter(':checked').size() > 0) {
				toggleDeleteButton(1);
			} else {
				toggleDeleteButton(0);
			}
			
			if ($c.size() !== $c.filter(':checked').size()) {
				$a.removeAttr('checked');
			}
		});
	}
	
	function bindClickToCheckAll(){
		if ($c.size() == 0) {
			$a.attr('disabled','disabled');						
		} else {
			$a.bind('click',function(){
				if ($a.is(':checked')) {
					$c.attr('checked','checked');
					toggleDeleteButton(1);
				} else {
					$c.removeAttr('checked','checked');
					toggleDeleteButton(0);
				}
			});
		}	
	}
	
	function bindClickToDeleteButton(){
		$b.bind('click',function(){
			if(!$b.hasClass('disabled') && $ad) {
				var ids = [];
				/* update $c because the checked ones will be different */
				$c = $($cs);
				var $cc = $c.filter(':checked');
				var $tempM = $m;
				
				if($cc.size() > 1) {
					$tempM = $tempM.replace('[x]',$mx[1]);
				} else {
					$tempM = $tempM.replace('[x]',$mx[0]);
				}			
				
				if(confirm($tempM)) {
					
					$cc.each(function(){
						ids.push($(this).val());	
					});
					
					$.ajax({
					  type: 'POST',
					  url: '/ajax/index.htm',
					  data: { 
						pageUrl: window.location.href,
						buttonId: $b[0].id,
						action: "messageBoardDeleteAction", 
						dataId: ids},
					  	success: function(){
							$cc.each(function(){
								var $pt = $(this).add($(this).parents()).filter($p)[0];
								$($pt).fadeOutRemove();
							});
							
							if($ct) {
								$ct.html(parseInt($ct.text())-$c.filter(':checked').size()*1);
								toggleDeleteButton(0);
								//checkReload();
							}  
							
							if($s) {							
								$s.find('div').html($smt).end().hide().show().fadeOut(5000);
							}
						},
					  error: function(){
					  	alert('Error happened. Please try again later.')
					  },
					  dataType: 'json'
					});
					
					 
				}
			}
		});
	}
	
	function checkReload() {
		$c = $($cs);
		var $cc = $c.filter(':checked');
				
		if($c.size() == $cc.size()) {
			okayToLeave = true;
			window.location.reload();
		}
	}
	
	function bindClickToAcceptRejectButton() {
		$b.each(function(){
			var $t = $(this);
			var $f = $('#f');
			$t.bind('click', function(){
				if(!$t.hasClass('disabled')) {
					if($t.hasClass('acceptButton')) {
						$f.attr('action',window.location.href.replace('member_applications','accept_member_app'));
					} else if ($t.hasClass('rejectButton')){
						$f.attr('action',window.location.href.replace('member_applications','reject_member_app'));
					}
					$(':hidden[name=process]').remove();
					$f[0].submit();
				}		
			});
		});
	}
						
	return {
		setCheckAll : function(a) { $a = $(a); },
		setCheckSingles : function(c) { $cs = c; $c = $(c); },
		setButton : function(b) { $b = $(b); },
		setDeleteText : function(t) { $t = t; },
		setDeleteMessage : function(m) { $m = m; },
		setXDeleteMessage : function(mx) { $mx = eval(mx); },
		setCounter : function(ct) { $ct = $(ct); },
		setParentTag : function(p) { $p = p; },
		setSuccessMessageBox : function(s) { $s = $(s); },
		setSuccessMessage : function(smt) { $smt = smt; },
		setFormAction : function(fa) { $fa = fa; },
		setAjaxDelete : function(ad) { $ad = ad; },
		
		init : function() {
			bindClickToCheckAll();
			bindClickToCheckSingles();
			/* 2 means 2 delete buttons */
			/* 4 means 2 accept buttons, and 2 reject buttons */
			if ($b.size() === 2) {
				bindClickToDeleteButton();
			} else if ($b.size() === 4){
				bindClickToAcceptRejectButton();
			}
		}
	}
}(jQuery);
