$.fn.toast_print = function(params){
	/**
	 * 인쇄 옵션 선택 레이어
	 *     title : 상위에 나타나는 title
	 *     visible_member_ids : 담당자 선택 레이어에 표시되는 멤버값
	 *     check_box_values: 레이어 상에서 나타나는 인쇄 옵션 선택값
	 *     charge_option_use: 담당자 선택레이어 추가 여부
	 *     charge_option_type: 담당자 선택 레어어의 타이틀(ex) 업무: 담당자, 보고서: 보고자
	 *     alternative_url: 컨트롤러의 함수를 호출해야 하는 주소(현재 페이지의 주소와 다를경우 설정)
	 *     page : page값(page 정보를 get으로 넘기는 경우 사용)
	 *     parent : 레이어 창에서 인쇄 레이어를 띄우는 경우 사용
	 *     use_info_box: 게시판의 상세 정보 열림/닫힘 상태(file), 출근부 정렬 쿠키값(attend)
	 *     layer_type: layer_id 설정 한페이지에서 2개 이상의 레이어를 띄울때 적용
	 */
	
	var $this = $(this);
	
	var defaults = {
		title: "",
		left: $this.offset().left - 250, 
		top: $this.offset().top + $this.height(), 
		visible_member_ids: [],
		check_box_values: {},
		charge_option_use: "N",
		charge_option_type: "",
		alternative_url: document.location.pathname,
		page: "",
		parent: "",
		use_info_box: "",
		layer_type: "layer_print"
	};
	
	var options = $.extend({}, defaults, params);
	
	var layer_id = options.layer_type;
	var $layer = $('#'+layer_id);
	
	if($layer.length && $layer.is(':visible')) {
		$.toast.pop_layer.hide(layer_id);
	}else {
		var contents = [];
		contents.push({ content: "<li class=\"total\"><label><input type=\"checkbox\" name =\"print_option[]\" value=\"all\" checked/> "+ I18n.t("print.layer.all") +"</label>" });
		
		if(options.check_box_values.length > 0){
			for (var i = 0; i < options.check_box_values.length; i++) {
				var check = options.check_box_values[i];
				var content = "";
				if (check['value'] == 'description') {
					content = "<p class=\"desc\">" + check['name'] + "</p>";
				}else{
					if (check['value'] == "task_report" || check['value'] == "ing") {
						content = "<li class=\"select_member\">";
					}else {
						content = "<li>";
					}
					if (check['sub'] != undefined && check['sub'] == 'Y') {
						content = content + "<label class=\"sub_option\">";
					}else {
						content = content + "<label>";
					}
					content = content + "<input type=\"checkbox\" value=\"" + check['value'] +
					"\" name=\"print_option[]\" class=\"check\" checked/> " +check['name'] +"</label>"
					if(check['value'] == "task_report" || check['value'] == "ing"){
						var mem = ""
						if((options.charge_option_type == "reporter" || options.charge_option_type == "charger") && options.charge_option_use == "y" && options.visible_member_ids != ""){
							
							var members = get_datas_by_ids(options.visible_member_ids, "charge");
							mem = $.map(members, function(members, row){return $.trim(members.name);}).join(', ');
							
							content = content + "<br>" +
									"<label class=\"sub\">" +I18n.t("print.layer." + options.charge_option_type) +"</label>" +
									"<a class=\"select_info\">" +I18n.t("layer.modify") +"</a>" +
									"<p style=\"display:none\">" +mem +"</p>" +
									"<input id=\"duty_member_id\" type=\"hidden\" value=\"" +options.visible_member_ids +"\" name=\"duty_member_id\">"
						}else if(options.charge_option_use == "b" && options.visible_member_ids != "") {
							var members = get_datas_by_ids(options.visible_member_ids, "charge");
							mem = $.map(members, function(members, row){return $.trim(members.name);}).join(', ');
							
							content = content + 
								"<a class=\"select_info\">" + I18n.t("layer.modify")+"</a>" +
								"<p style=\"display:none\">" + mem +"</p>" +
								"<input id=\"duty_member_id\" type=\"hidden\" value=\"" +options.visible_member_ids +"\" name=\"duty_member_id\">"
						}
					}
				}
				content = content + "</li>";
				
				contents.push({
					content: content
				});
			}
		}
		
		var layer_option = {
			before: "<form id=\"print_form\" action=\"post\">", 
			after: '</form>',
			class_name: 'layer_print',
			boxtop_title: "<h4 class=\"layer_title\">"+ options.title +"</h4>",
			boxbody_content: "<ul class=\"print_option\">" + 
									$.map(contents, function(content, idx){ return content['content']; }).join("")+ 
								"</ul>" ,
			boxbottom_right: "",
			boxbottom_footer: "<a class=\"btn_layer_m\"><span>" + I18n.t("print.layer.print") + "</span></a>" +
								"<a class=\"btn_layer\"><span>" + I18n.t("print.layer.cancel") + "</span></a>",
			version: 2,
			draggable: true,
			parent: options.parent
		};
		
		if ("layer_print" == layer_id){
			$.toast.pop_layer.add_layer({
				layer_print: layer_option
			});
		}else if("layer_file_print" == layer_id){
			$.toast.pop_layer.add_layer({
				layer_file_print: layer_option
			});
		}
		
		var $layer = $('#'+layer_id);
		
		$('ul.print_option>li', $layer).bind('click', function(e){
			var $target = $(e.target);
			if( $target.is(':checkbox') ){
				if( $target.is(':checked') ){
					if( $target.val() == "all" ){
						$('input:checkbox:not(:disabled)', $layer).attr('checked', 'checked');
					}else{
						var all_length=$('input:checkbox', $layer).length;
						var selected_length=$('input:checkbox:checked', $layer).length;
						if(all_length-1<=selected_length){
							$('input:checkbox[value="all"]', $layer).attr('checked', 'checked');
						}
					}
				}else{
					if( $target.val() != "all" ){
						if (!$target.parent('label').hasClass('sub_option')){
							$('input:checkbox[value="all"]:not(:disabled)', $layer).removeAttr('checked');
						}
					}else{
						$('input:checkbox:not(:disabled)', $layer).removeAttr('checked');
					}
				}
			}
		});
		
		$('a.select_info', $layer).click(function(){
			var $a = $(this);
			var $duty_member_id = $('input#duty_member_id');
			
			$a.charge_layer({
				kind: 'charge', 
				visible_member_ids: options.visible_member_ids,
				selected_member_ids: $duty_member_id.val().split(',') || [], 
				title: I18n.t("print.layer."+ options.charge_option_type),
				callback: function(members){
					var duty_member_ids = $.map(members, function(member, row){ return member.id })
					
					if( members.length ){
						$a.text(I18n.t("layer.modify"));
						$a.prev('span').hide();
						$a.next('p').slideDown().text($.map(members, function(member, row){ return $.trim(member.name); }).join(', '));
						$('input:hidden[name="duty_member_id"]', $layer).val(duty_member_ids);
						$a.parent().nextAll().slideDown();	
					}
					else{
						$a.text(I18n.t("layer.choose"));
						$a.prev('span').show();
						$a.next('p').slideUp().text('');
						$('input:hidden[name="duty_member_id"]', $layer).val(duty_member_ids);
					}
					return true;
				}
			})
		});
		
		$('a.btn_layer, a.box_x', $layer).bind('click', function(){
			$.toast.pop_layer.hide(layer_id);
		});
		
		$('a.btn_layer_m', $layer).bind('click', function(){
			var $checkboxs = $('ul.print_option>li>label>input:checkbox:checked',$layer);
			if ($checkboxs.length == 0){
				alert(I18n.t("print.message.select print option"));
				return;
			}
			
			//보고자 확인
			if( $checkboxs.filter('[value="task_report"]').length > 0 || $checkboxs.filter('[value="ing"]').length > 0){
				if($('#duty_member_id', $layer).val() == ""){
					alert(I18n.t("print.message.select " + options.charge_option_type));
					return;
				}
			}
			
			//검색 조건(자료실 and 그외)
			var hash_query = "";
			if(options.use_info_box == "file"){
				hash_query = $('body').get_hash_params();
			}else if(options.use_info_box == "attend"){
				hash_query = {attend_order : $.cookie(options.use_info_box)};
			}else{
				hash_query = $.hashHistoryData();
			}
			
			if (options.page != ""){
				hash_query.page = options.page;
			}
			
			//게시판의 개요 상태
			//게시판: display_bbs_box, 자료실: display_file_box, 요청처리: display_issue_box
			if(options.use_info_box != "" && options.use_info_box == "file"){
				var cookie_name = 'display_' + options.use_info_box + '_box';
				var val = $.cookie(cookie_name);
				if(val != null){
					hash_query.bbs_box = val;
				}else{
					if(options.use_info_box == "file"){
						hash_query.bbs_box = "show";
					}else{
						hash_query.bbs_box = "detail";
					}
				}
			}
			
			var flags = []
			$('input:checkbox:checked', $("#" + layer_id)).each(function(){
					flags.push($(this).val());
			});
			
			if ($('#duty_member_id', $layer).val() != undefined) {
				hash_query.duty_member_id = $('#duty_member_id', $layer).val();
			}
			
			hash_query.print = "Y";
			hash_query.print_option = flags.join(',');
			
			var w = window.open('', 'toast_print', 'scrollbars=yes,location=no,menubar=no,status=no,titlebar=no,width=840,height=800');
			
			$.ajax({
				type: "POST",
				url: options.alternative_url,
				data: hash_query,
				dataType: 'json',
				success: function(data){
					if(data.status == JSON_SUCCESS){
						d = w.document;
						d.open();
						d.write(data.contents);
						d.close();
					}else{
						toast_error_handle(data);
					}
				},
				error: function(res, e){
					toast_ajax_error(res, '[toast_print]' + e);
				},
				complete: function(res, e){
					//complete_ajax(action);
				}
			})
			
		});
	}
	
	$.toast.pop_layer.show(layer_id,{top: options.top, left: options.left});
};