//-------------------------------- 조직 설정 ---------------------------------- //
let selectRows = [];
let groupAgGridData = [];
let dutyAgGridData = [];

let dutyTotalCount   = 0;
let dutyTotalPages   = 0;
let groupTotalCount   = 0;
let groupTotalPages   = 0;
/****************************************************************************
* 조직설정 정보 리스트 조회
****************************************************************************/
function fn_selectListGroupJson(){
	let formData = new FormData();
	formData.append("menuClass", menuClass);

	$.ajax({
		url: encodeURI('/webgroup/selectListGroup.do'),
		data: formData,
		dataType: "json",
		processData: false,
		contentType: false,
		type: 'POST',
		async: true,
		success: function(data){
			if('0'==data.msgCode){
					groupTotalCount = data.totalCount;
					groupTotalPages = Math.ceil(groupTotalCount / groupLimit);
					groupAgGridData = data.rows;
					groupGridOptions.api.setRowData(groupAgGridData);

					if (0 < data.rows.length) {

						// 페이징 처리
						window.pagObj = $('#groupPagination').twbsPagination({
							startPage: ((groupStart / groupLimit) + 1),
							totalPages: (groupTotalPages == 0) ? 1 : groupTotalPages,
							visiblePages: 10,
							initiateStartPageClick: false,
							prev: '<img src="/image/web/page_navigation_arrow.svg" alt="prev">',
							next: '<img src="/image/web/page_navigation_arrow.svg" alt="next">',
							first: '',
							last: '',
							onPageClick: function (event, page) {
								fn_groupPagination(page);
							}
						}).on('page', function (event, page) {
						});

					}
			}
			else{
				modalEvent.danger("조회 오류", data.msgDesc);
			}
		},
		error : function(xhr, status, error) {
			modalEvent.danger("조회 오류", "조회 중 오류가 발생하였습니다. 잠시후 다시시도하십시오.");
		},
		beforeSend:function(){
			
		},
		complete:function(){
			
		}
	});
}
let groupColumnDefs = [
	{
		field: "checkbox",
		headerName: "",
		minWidth: 55,
		maxWidth: 55,
		headerCheckboxSelection: true,
		checkboxSelection: true
	},
	/* {field: "rowNum", headerName:"번호", minWidth:80,maxWidth:80, sortable: false}, */
	{field: "orderNumber", headerName: "번호", minWidth: 60, cellStyle: {cursor: 'pointer',textAlign: 'center'}},
	{field: "groupName", headerName: "조직명", minWidth: 300, maxWidth: 300},
	{field: "etc", headerName: "메모", minWidth:1164},
];
let groupGridOptions = {
	suppressRowTransform: true,
	columnDefs: groupColumnDefs,
	defaultColDef: {		// 리스트 기본 설정
		flex: 1,
		sortable: true,		//정렬 여부
		resizable: true,	//리사이즈
		editable: false,		// 그리드에서 데이터 수정
		cellStyle: {textAlign: 'left', fontSize: '14px', padding: '0'},
		//suppressSizeToFit:true,		//자동 맞춤
		//enableRowGroup: true,		// 그룹 묶음
		enablePivot: true,
		enableValue: true
	},
	//suppressMultiSort:true,  //단일솔트 true가 단일, false가 다중 shift + sort 시
	headerHeight: 41, // header 높이
	rowHeight: 41, // row 높이
	rowData: groupAgGridData,
	suppressRowClickSelection: true, // 로우 클릭시 체크박스 선택 true no, false yes
	localeText: {
		noRowsToShow: '조회 결과가 없습니다.'
	}, //데이터 없을 시 나오는 문구
	rowSelection: 'multiple', // row 다중 선택
	debug: false,
	onCellClicked: function (event) { //셀 클릭 이벤트
		/* alert(event.column.colId); */
		fn_updateGroupPopup(event.data);
	},
	onSelectionChanged: function (event) { //체크박스 선택
		selectRows = event.api.getSelectedRows();
	},
	onSortChanged: function (event) {
		//정렬
		groupSort = ''; //기존 정렬 초기화
		let columnArr = event.columnApi.getColumnState();
		if (0 < columnArr.length) {

			//sort index 순으로 재정렬
			columnArr.sort(function (a, b) {
				return a.sortIndex - b.sortIndex;
			});

			let nullCnt = 0;
			for (let i = 0; i < columnArr.length; i++) {
				let gridSortModel = columnArr[i].colId;
				let gridSort = columnArr[i].sort;

				if (gridSort != null) {
					groupStart = 0;

					groupSort += gridSortModel + ' ' + gridSort + ',';

				} else {
					nullCnt++;

					if (nullCnt == columnArr.length) {
						groupSort = '';
						// userDir = '';

						groupStart = 0;
					}
				}
			}
		}

		groupSort = groupSort.substring(0, groupSort.lastIndexOf(",")); //맨끝 콤마 지우기

		// fn_userSearch();
	}
};

let groupGridDiv = document.querySelector('#groupGrid');
new agGrid.Grid(groupGridDiv, groupGridOptions);
/****************************************************************************
 * 조직 페이징 처리
 ****************************************************************************/
function fn_groupPagination(param){
	groupStart = (parseInt(param)-1)*groupLimit;
	fn_selectListGroupJson();
}
/****************************************************************************
* 조직설정 삭제
****************************************************************************/
function fn_deleteGroup(param){

	if("Y"!=deleteUseYn){
		modalEvent.warning("", "삭제 권한이 없습니다.");
		return false;
	}
	
	if(!param.length){
		modalEvent.warning("", "삭제할 대상 정보가 없습니다.");
		return false;
	}

	modalEvent.info("삭제", "선택한 조직 정보를 삭제하시겠습니까?", function(){
		let formData = new FormData();
		formData.append("menuClass", menuClass);
		formData.append("deleteDataList", JSON.stringify(param));

		$.ajax({
			url: encodeURI('/webgroup/deleteGroup.do'),
			data: formData,
			dataType: "json",
			processData: false,
			contentType: false,
			type: 'POST',
			async: true,
			success: function(data){
				selectRows = []
				if('0'==data.msgCode){
					modalEvent.success("삭제 성공", data.msgDesc, function(){
						fn_groupOk();
					});
				}
				else{
					modalEvent.danger("삭제 오류", data.msgDesc);
				}
			},
			error : function(xhr, status, error) {
				modalEvent.danger("삭제 오류", "삭제 중 오류가 발생하였습니다. 잠시후 다시시도하십시오.");
			},
			beforeSend:function(){
				
			},
			complete:function(){
				
			}
		});
	});
}

/****************************************************************************
* 완료
****************************************************************************/
function fn_groupOk(){
	fn_selectListGroupJson();
}

function fn_insertGroupPopup(){
	if("Y"!=insertUseYn){
		modalEvent.warning("", "등록 권한이 없습니다.");
		return false;
	}
	
	let reqParam =  {};
	groupInsertModal.popup(function(obj, reqParam) {
		fn_groupOk();
	}, reqParam);
}

function fn_updateGroupPopup(param){
	if("Y"!=updateUseYn){
		modalEvent.warning("", "수정 권한이 없습니다.");
		return false;
	}
	groupUpdateModal.popup(function(obj, reqParam) {
		fn_groupOk();
	}, param);
}

//-------------------------------- 직무 설정 ---------------------------------- //
/****************************************************************************
* 직무설정 정보 리스트 조회
****************************************************************************/
function fn_selectListDutyJson(){
	let formData = new FormData();
	formData.append("menuClass", menuClass);

	$.ajax({
		url: encodeURI('/webduty/selectListDuty.do'),
		data: formData,
		dataType: "json",
		processData: false,
		contentType: false,
		type: 'POST',
		async: true,
		success: function(data){
			if('0'==data.msgCode){
				dutyTotalCount = data.totalCount;
				dutyTotalPages = Math.ceil(dutyTotalCount / dutyLimit);
				dutyAgGridData = data.rows;
				dutyGridOptions.api.setRowData(dutyAgGridData);

				if (0 < data.rows.length) {
					window.pagObj = $('#dutyPagination').twbsPagination({
						startPage: ((dutyStart / dutyLimit) + 1),
						totalPages: (dutyTotalPages == 0) ? 1 : dutyTotalPages,
						visiblePages: 10,
						initiateStartPageClick: false,
						prev: '<img src="/image/web/page_navigation_arrow.svg" alt="prev">',
						next: '<img src="/image/web/page_navigation_arrow.svg" alt="next">',
						first: '',
						last: '',
						onPageClick: function (event, page) {
							fn_dutyPagination(page);
						}
					}).on('page', function (event, page) {
					});
				}
			}
			else{
				modalEvent.danger("조회 오류", data.msgDesc);
			}
		},
		error : function(xhr, status, error) {
			modalEvent.danger("조회 오류", "조회 중 오류가 발생하였습니다. 잠시후 다시시도하십시오.");
		},
		beforeSend:function(){
			
		},
		complete:function(){
			
		}
	});
}
let dutyColumnDefs = [
	{
		field: "checkbox",
		headerName: "",
		minWidth: 55,
		maxWidth: 55,
		headerCheckboxSelection: true,
		checkboxSelection: true
	},
	/* {field: "rowNum", headerName:"번호", minWidth:80,maxWidth:80, sortable: false}, */
	{field: "orderNumber", headerName: "번호", minWidth: 60, cellStyle: {cursor: 'pointer',textAlign:'center'}},
	{field: "dutyName", headerName: "직무명", minWidth: 300, maxWidth: 300},
	{field: "etc", headerName: "메모", minWidth:1164},
];
let dutyGridOptions = {
	suppressRowTransform: true,
	columnDefs: dutyColumnDefs,
	defaultColDef: {		// 리스트 기본 설정
		flex: 1,
		sortable: true,		//정렬 여부
		resizable: true,	//리사이즈
		editable: false,		// 그리드에서 데이터 수정
		cellStyle: {textAlign: 'left', fontSize: '14px', padding: '0'},
		//suppressSizeToFit:true,		//자동 맞춤
		//enableRowGroup: true,		// 그룹 묶음
		enablePivot: true,
		enableValue: true
	},
	//suppressMultiSort:true,  //단일솔트 true가 단일, false가 다중 shift + sort 시
	headerHeight: 41, // header 높이
	rowHeight: 41, // row 높이
	rowData: dutyAgGridData,
	suppressRowClickSelection: true, // 로우 클릭시 체크박스 선택 true no, false yes
	localeText: {
		noRowsToShow: '조회 결과가 없습니다.'
	}, //데이터 없을 시 나오는 문구
	rowSelection: 'multiple', // row 다중 선택
	debug: false,
	onCellClicked: function (event) { //셀 클릭 이벤트
		/* alert(event.column.colId); */
		fn_updateDutyPopup(event.data);
	},
	onSelectionChanged: function (event) { //체크박스 선택
		selectRows = event.api.getSelectedRows();
	},
	onSortChanged: function (event) {
		//정렬
		groupSort = ''; //기존 정렬 초기화
		let columnArr = event.columnApi.getColumnState();
		if (0 < columnArr.length) {

			//sort index 순으로 재정렬
			columnArr.sort(function (a, b) {
				return a.sortIndex - b.sortIndex;
			});

			let nullCnt = 0;
			for (let i = 0; i < columnArr.length; i++) {
				let gridSortModel = columnArr[i].colId;
				let gridSort = columnArr[i].sort;

				if (gridSort != null) {
					groupStart = 0;

					groupSort += gridSortModel + ' ' + gridSort + ',';

				} else {
					nullCnt++;

					if (nullCnt == columnArr.length) {
						groupSort = '';
						// userDir = '';

						groupStart = 0;
					}
				}
			}
		}

		groupSort = groupSort.substring(0, groupSort.lastIndexOf(",")); //맨끝 콤마 지우기

		// fn_userSearch();
	}
};

let dutyGridDiv = document.querySelector('#dutyGrid');
new agGrid.Grid(dutyGridDiv, dutyGridOptions);
/****************************************************************************
 * 직무 페이징 처리
 ****************************************************************************/
function fn_dutyPagination(param){
	dutyStart = (parseInt(param)-1)*dutyLimit;
	fn_selectListDutyJson();
}
/****************************************************************************
* 직무설정 삭제
****************************************************************************/
function fn_deleteDuty(param){

	if("Y"!=deleteUseYn){
		modalEvent.warning("", "삭제 권한이 없습니다.");
		return false;
	}
	
	if(!param.length){
		modalEvent.warning("", "삭제할 대상 정보가 없습니다.");
		return false;
	}

	modalEvent.info("삭제", "선택한 직무 정보를 삭제하시겠습니까?", function(){
		let formData = new FormData();
		formData.append("menuClass", menuClass);
		formData.append("deleteDataList", JSON.stringify(param));

		$.ajax({
			url: encodeURI('/webduty/deleteDuty.do'),
			data: formData,
			dataType: "json",
			processData: false,
			contentType: false,
			type: 'POST',
			async: true,
			success: function(data){
				selectRows = []
				if('0'==data.msgCode){
					modalEvent.success("삭제 성공", data.msgDesc, function(){
						fn_dutyOk();
					});
				}
				else{
					modalEvent.danger("삭제 오류", data.msgDesc);
				}
			},
			error : function(xhr, status, error) {
				modalEvent.danger("삭제 오류", "삭제 중 오류가 발생하였습니다. 잠시후 다시시도하십시오.");
			},
			beforeSend:function(){
				
			},
			complete:function(){
				
			}
		});
	});
}

/****************************************************************************
* 완료
****************************************************************************/
function fn_dutyOk(){
	fn_selectListDutyJson();
}

function fn_insertDutyPopup(){
	if("Y"!=insertUseYn){
		modalEvent.warning("", "등록 권한이 없습니다.");
		return false;
	}
	
	let reqParam =  {};
	dutyInsertModal.popup(function(obj, reqParam) {
		fn_dutyOk();
	}, reqParam);
}

function fn_updateDutyPopup(param){
	if("Y"!=updateUseYn){
		modalEvent.warning("", "수정 권한이 없습니다.");
		return false;
	}

	dutyUpdateModal.popup(function(obj, reqParam) {
		fn_dutyOk();
	}, param);
}

// -------------------------------- 권한 설정 ---------------------------------- //

/****************************************************************************
* 권한 정보 리스트 조회
****************************************************************************/
function fn_selectListAuth(){
	let formData = new FormData();
	formData.append("menuClass", menuClass);

	$.ajax({
		url: encodeURI('/webauth/selectListAuth.do'),
		data: formData,
		dataType: "json",
		processData: false,
		contentType: false,
		type: 'POST',
		async: true,
		success: function(data){
			if('0'==data.msgCode){
				$("#authorityList li").not(":lt(1)").remove();
				
				let listHTML = '';
				
				if(0<data.rows.length){
					for(let i = 0; i < data.rows.length; i++){
						let muAuthId     = data.rows[i].muAuthId;
						let authName     = data.rows[i].authName;
						
							listHTML += '<li>';
							listHTML += '	<div class="authority_box" onclick="javascript:fn_selectAuthMenuRelation(\''+muAuthId+'\');">'+authName+'</div>';
							listHTML += '	<div class="dropdown_box">';
							listHTML += '		<button type="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">';
							listHTML += '			<img src="/image/web/day_list_dropdown_icon.svg" alt="dropdown"/>';
							listHTML += '		</button>';
							listHTML += '		<ul class="dropdown-menu">';
							listHTML += '			<li onclick="fn_updateAuthPopup(\''+muAuthId+'\', \'U\');">';
							listHTML += '				<p class="list">수정</p>';
							listHTML += '			</li>';
							listHTML += '			<li onclick="javascript:fn_deleteAuth(\''+muAuthId+'\');">';
							listHTML += '				<p class="list red_list">삭제</p>';
							listHTML += '			</li>';
							listHTML += '		</ul>';
							listHTML += '	</div>';
							listHTML += '</li>';
					}
					$("#authorityList").append(listHTML);
					
					fn_selectAuthMenuRelation(data.rows[0].muAuthId);
				}
			}
			else{
				modalEvent.danger("조회 오류", data.msgDesc);
			}
		},
		error : function(xhr, status, error) {
			modalEvent.danger("조회 오류", "조회 중 오류가 발생하였습니다. 잠시후 다시시도하십시오.");
		},
		beforeSend:function(){
			
		},
		complete:function(){
			
		}
	});
}


/****************************************************************************
* 권한별 메뉴 정보 리스트 조회
****************************************************************************/
function fn_selectAuthMenuRelation(param){
	let muAuthId = param;
	
	if(!muAuthId){
		modalEvent.warning("", "권한 정보가 없습니다.");
		return false;
	}
	
	let formData = new FormData();
	formData.append("menuClass", menuClass);
	formData.append("muAuthId", muAuthId);

	$.ajax({
		url: encodeURI('/webauthmenurelation/selectListAuthMenuRelation.do'),
		data: formData,
		dataType: "json",
		processData: false,
		contentType: false,
		type: 'POST',
		async: true,
		success: function(data){
			if('0'==data.msgCode){
				let authName = data.authName;
				
				$(".authority_table_box .filter_box P").text('권한 ('+authName+')');
				$(".authority_table_box .filter_box #muAuthId").val(muAuthId);
				
				let listHTML = '';
				
				if(0<data.rows.length){
					for(let i = 0; i < data.rows.length; i++){
						let muMenuId        = data.rows[i].muMenuId;
						let menuCode        = data.rows[i].menuCode;
						let menuName        = data.rows[i].menuName;
						let selectUseYn     = data.rows[i].selectUseYn;
						let insertUseYn     = data.rows[i].insertUseYn;
						let updateUseYn     = data.rows[i].updateUseYn;
						let deleteUseYn     = data.rows[i].deleteUseYn;
						let downloadUseYn   = data.rows[i].downloadUseYn;
						let selectChecked   = data.rows[i].selectUseYn=='Y'?'checked':'';
						let insertChecked   = data.rows[i].insertUseYn=='Y'?'checked':'';
						let updateChecked   = data.rows[i].updateUseYn=='Y'?'checked':'';
						let deleteChecked   = data.rows[i].deleteUseYn=='Y'?'checked':'';
						let downloadChecked = data.rows[i].downloadUseYn=='Y'?'checked':'';
						let subMenuCount    = data.rows[i].subMenuCount+1;
						
						if(menuCode.length==2){
							if(i!=0){
								listHTML += '		</tbody>';
								listHTML += '	</table>';
								listHTML += '</div>';
							}
							
							listHTML += '<div class="table_box">';
							listHTML += '	<table>';
							listHTML += '		<tbody>';
							listHTML += '			<tr>';
							listHTML += '				<td rowspan="'+subMenuCount+'" class="menu_td">'+menuName+'</td>';
							listHTML += '				<td colspan="6" class="all_td">';
							listHTML += '					<label for="checkAll'+i+'" class="chk_box">';
							listHTML += '						<input type="checkbox" id="checkAll'+i+'" onclick="javascript:fn_checkboxAll(this);">';
							listHTML += '						<span class="on"></span>';
							listHTML += '					</label>';
							listHTML += '					모든 권한 허용';
							listHTML += '				</td>';
							listHTML += '			</tr>';
						}
						else{
							listHTML += '			<tr class="trMenu">';
							listHTML += '				<td>';
							listHTML += '					<input type="hidden" name="muMenuId" value="'+muMenuId+'"/>';
							listHTML += menuName;
							listHTML += '				</td>';
							listHTML += '				<td>';
							listHTML += '					<label for="insertUseYn'+i+'" class="chk_box">';
							listHTML += '						<input type="checkbox" id="insertUseYn'+i+'" name="insertUseYn" '+insertChecked+' onclick="javascript:fn_checkbox(this);">';
							listHTML += '						<span class="on"></span>';
							listHTML += '					</label>';
							listHTML += '					등록';
							listHTML += '				</td>';
							listHTML += '				<td>';
							listHTML += '					<label for="selectUseYn'+i+'" class="chk_box">';
							listHTML += '						<input type="checkbox" id="selectUseYn'+i+'" name="selectUseYn" '+selectChecked+' onclick="javascript:fn_checkbox(this);">';
							listHTML += '						<span class="on"></span>';
							listHTML += '					</label>';
							listHTML += '					조회';
							listHTML += '				</td>';
							
							listHTML += '				<td>';
							listHTML += '					<label for="updateUseYn'+i+'" class="chk_box">';
							listHTML += '						<input type="checkbox" id="updateUseYn'+i+'" name="updateUseYn" '+updateChecked+' onclick="javascript:fn_checkbox(this);">';
							listHTML += '						<span class="on"></span>';
							listHTML += '					</label>';
							listHTML += '					수정';
							listHTML += '				</td>';

							listHTML += '				<td>';
							listHTML += '					<label for="deleteUseYn'+i+'" class="chk_box">';
							listHTML += '						<input type="checkbox" id="deleteUseYn'+i+'" name="deleteUseYn" '+deleteChecked+' onclick="javascript:fn_checkbox(this);">';
							listHTML += '						<span class="on"></span>';
							listHTML += '					</label>';
							listHTML += '					삭제';
							listHTML += '				</td>';

							listHTML += '				<td>';
							listHTML += '					<label for="downloadUseYn'+i+'" class="chk_box">';
							listHTML += '						<input type="checkbox" id="downloadUseYn'+i+'" name="downloadUseYn" '+downloadChecked+' onclick="javascript:fn_checkbox(this);">';
							listHTML += '						<span class="on"></span>';
							listHTML += '					</label>';
							listHTML += '					내려받기';
							listHTML += '				</td>';
							listHTML += '			</tr>';
						}
					}
				}
				$(".authority_table_box .table_check_box").empty().html(listHTML);
				
				// 모든 권한 허용 체크박스 처리
				if(0<data.rows.length){
					for(let i = 0; i < data.rows.length; i++){
						let menuCode        = data.rows[i].menuCode;
						
						if(menuCode.length==2){
							let checkboxLength = $("#checkAll"+i).closest("table").find("tr:eq(1)").find("input:checkbox").length;
							let checkedLength  = $("#checkAll"+i).closest("table").find("tr:eq(1)").find("input:checkbox:checked").length;
							
							if(checkboxLength==checkedLength){
								$("#checkAll"+i).prop("checked", true);
							}
						}
					}
				}
			}
			else{
				modalEvent.danger("조회 오류", data.msgDesc);
			}
		},
		error : function(xhr, status, error) {
			modalEvent.danger("조회 오류", "조회 중 오류가 발생하였습니다. 잠시후 다시시도하십시오.");
		},
		beforeSend:function(){
			
		},
		complete:function(){
			
		}
	});
}



/****************************************************************************
* 권한 설정 저장
****************************************************************************/
function fn_updateAuthMenuRelation(){
	let muAuthId      = $("#muAuthId").val();
	
	// 1|Y|Y|Y|Y|Y,2|Y|N|N|Y|Y, .....
	let selectAuthArr = '';
	
	// 권한별 메뉴 정보
	let trMenu = $('.authority_table_box .table_check_box .trMenu');
	let menuLength  = trMenu.length;
	
	for(let i=0 ; i < menuLength ; i++){
		let muMenuId      = trMenu.eq(i).find('input[name="muMenuId"]').val();
		let selectUseYn   = trMenu.eq(i).find('input[name="selectUseYn"]').is(':checked')==true?'Y':'N';
		let insertUseYn   = trMenu.eq(i).find('input[name="insertUseYn"]').is(':checked')==true?'Y':'N';
		let updateUseYn   = trMenu.eq(i).find('input[name="updateUseYn"]').is(':checked')==true?'Y':'N';
		let deleteUseYn   = trMenu.eq(i).find('input[name="deleteUseYn"]').is(':checked')==true?'Y':'N';
		let downloadUseYn = trMenu.eq(i).find('input[name="downloadUseYn"]').is(':checked')==true?'Y':'N';
		
		selectAuthArr += muMenuId+'|'+selectUseYn+'|'+insertUseYn+'|'+updateUseYn+'|'+deleteUseYn+'|'+downloadUseYn+','
	}
	selectAuthArr = selectAuthArr.substring(0, selectAuthArr.lastIndexOf(','));
	
	if("Y"!=updateUseYn){
		modalEvent.warning("저장", "수정 권한이 없습니다.");
		return false;
	}
	
	if(!selectAuthArr){
		modalEvent.warning("저장", "권한별 메뉴 정보가 없습니다.");
		return false;
	}

	modalEvent.info("저장", "권한 정보를 저장하시겠습니까?", function(){
		let formData = new FormData();
		formData.append("menuClass", menuClass);
		formData.append("muAuthId", muAuthId);
		formData.append("selectAuthArr", selectAuthArr);

		$.ajax({
			url: encodeURI('/webauthmenurelation/updateAuthMenuRelation.do'),
			data: formData,
			dataType: "json",
			processData: false,
			contentType: false,
			type: 'POST',
			async: true,
			success: function(data){
				if('0'==data.msgCode){
					modalEvent.success("저장 성공", data.msgDesc, function(){
						fn_selectListAuth();
					});
				}
				else{
					modalEvent.danger("저장 오류", data.msgDesc);
				}
			},
			error : function(xhr, status, error) {
				modalEvent.danger("저장 오류", "저장 중 오류가 발생하였습니다. 잠시후 다시시도하십시오.");
			},
			beforeSend:function(){
				
			},
			complete:function(){
				
			}
		});
	});
}

function fn_AuthOk(){
	fn_selectListAuth();
}
function fn_insertAuthPopup(){
	if("Y"!=insertUseYn){
		modalEvent.warning("", "등록 권한이 없습니다.");
		return false;
	}

	let reqParam =  {};
	authInsertModal.popup(function(obj, reqParam) {
		fn_AuthOk();
	}, reqParam);
}
function fn_updateAuthPopup(param, param2){
	if("Y"!=updateUseYn){
		modalEvent.warning("", "수정 권한이 없습니다.");
		return false;
	}
	let reqParam =  {
		"muAuthId" : param,
		"type" : param2
	};
	authUpdateModal.popup(function(obj, reqParam) {
		fn_AuthOk();
	}, reqParam);
}

/****************************************************************************
* 권한 삭제
****************************************************************************/
function fn_deleteAuth(param){
	let muAuthId      = param;
	
	if("Y"!= deleteUseYn){
		modalEvent.warning("삭제", "삭제 권한이 없습니다.");
		return false;
	}
	
	if(!muAuthId){
		modalEvent.warning("삭제", "권한 정보가 없습니다.");
		return false;
	}

	modalEvent.info("삭제", "권한 정보를 삭제하시겠습니까?", function(){
		let formData = new FormData();
		formData.append("menuClass", menuClass);
		formData.append("muAuthId", muAuthId);

		$.ajax({
			url: encodeURI('/webauth/deleteAuth.do'),
			data: formData,
			dataType: "json",
			processData: false,
			contentType: false,
			type: 'POST',
			async: true,
			success: function(data){
				if('0'==data.msgCode){
					modalEvent.success("삭제 성공", data.msgDesc, function(){
						fn_selectListAuth();
					});
				}
				else{
					modalEvent.danger("삭제 오류", data.msgDesc);
				}
			},
			error : function(xhr, status, error) {
				modalEvent.danger("삭제 오류", "삭제 중 오류가 발생하였습니다. 잠시후 다시시도하십시오.");
			},
			beforeSend:function(){
				
			},
			complete:function(){
				
			}
		});
	});
}

/****************************************************************************
* 모든 권한 허용 체크박스 이벤트
****************************************************************************/
function fn_checkboxAll(target){
	if($(target).is(':checked')){
		$(target).closest("table").find("input:checkbox").prop("checked", true);
	}
	else{
		$(target).closest("table").find("input:checkbox").prop("checked", false);
	}
}

/****************************************************************************
* 체크박스 이벤트
****************************************************************************/
function fn_checkbox(target){
	let checkboxLength = $(target).closest("table").find("tr:eq(1)").find("input:checkbox").length;
	let checkedLength  = $(target).closest("table").find("tr:eq(1)").find("input:checkbox:checked").length;
	
	if(checkboxLength==checkedLength){
		$(target).closest("table").find("tr:eq(0)").find("input:checkbox").prop("checked", true);
	}
	else{
		$(target).closest("table").find("tr:eq(0)").find("input:checkbox").prop("checked", false);
	}
}

/****************************************************************************
* 페이지 init
****************************************************************************/
function fn_pageInit(){
	// 첫번째 탭 - 조직설정 조회
	fn_selectListGroupJson();
}

/****************************************************************************
* 페이지 event
****************************************************************************/
function fn_pageEvent(){
	// 조직설정 - 조직 등록 버튼
	$("#btnInserGroup").click(function () {
		fn_insertGroupPopup();
	});
	$("#btnDeleteGroup").click(function () {
		fn_deleteGroup(selectRows);
	});
	// 직무설정 - 직무 등록 버튼
	$("#btnInsertDuty").click(function () {
		fn_insertDutyPopup();
	});
	$("#btnDeleteDuty").click(function () {
		fn_deleteDuty(selectRows);
	});
	
	// 권한설정 - 권한그룹 추가 버튼
	$("#btnAddAuthRow").click(function () {
		fn_insertAuthPopup();
	});
	
	// 권한설정 - 권한그룹 저장 버튼
	$("#btnUpdateAuthMenuRelation").click(function () {
		fn_updateAuthMenuRelation();
	});
	
	// 탭 이벤트
	$('a[data-toggle="tab"]').on('shown.bs.tab', function (e) {
		let target = $(e.target).attr("href");
		selectRows = [];
		if(('#group' == target)) {
			// 조직설정
			fn_selectListGroupJson();
		}
		else if(('#job' == target)) {
			// 직무설정
			fn_selectListDutyJson();
		}
		else if(('#authority' == target)) {
			// 권한설정
			fn_selectListAuth();
		}
	});
}

$(function(){
	// 페이지 init
	fn_pageInit();
	
	// 페이지 event
	fn_pageEvent();
});