//JS버전
var today = new Date();
const js_version = itp_fn_date_format(today);

requirejs.config({
	baseUrl: ITP_CONTEXTPATH,
	paths: {
		'jquery': 'js/jquery.min',
		'jquery-ui': 'js/jquery-ui.min',
		'jquery.bootstrap': 'bootstrap/dist/js/bootstrap.min',
		'jquery.bootstrap.fileUpload': 'bootstrap-fileUpload/dist/bootstrap-FileUpload.js?version='+js_version,
		'jquery.bootstrap.datepicker': 'bootstrap-datepicker/js/bootstrap-datepicker',
		'jquery.bootstrap.datepicker.locale': 'bootstrap-datepicker/locales/bootstrap-datepicker.' + ITP_LANGUAGE + '.min',
		'message.locale': 'js/app/locales/locale-' + ITP_LANGUAGE + '.js?version='+js_version,
		'crypto': 'js/crypto', 					//Crypto 암호화 js
	},
	shim: {
		'jquery.bootstrap': {
			deps: [
				'jquery',
				'jquery-ui'
			]
		},
		'jquery.bootstrap.fileUpload': {
			deps: ['jquery.bootstrap']
		},
		'jquery.bootstrap.datepicker.locale': {
			deps: [
				'jquery.bootstrap',
				'jquery.bootstrap.datepicker'
			]
		},
	}
});

require([
	'jquery',
	'jquery.bootstrap',
	'jquery.bootstrap.datepicker.locale',
	'message.locale'
], function($) {
	history.pushState(null, null, location.href);

	$.fn.serializeObject = function() {
		var result = {};
		var extend = function(i, element) {
			var node = result[element.name];
			if ('undefined' !== typeof node && node !== null) {
				if ($.isArray(node)) {
					node.push($.trim(element.value));
				} else {
					result[element.name] = [node, $.trim(element.value)];
				}
			} else {
				result[element.name] = $.trim(element.value);
			}
		}
		$.each(this.serializeArray(), extend);
		return result;
	};

	$.fn.extend({
		treed: function(o) {
			var openedClass = 'glyphicon-minus text-primary';
			var closedClass = 'glyphicon-plus text-primary';

			if (typeof o != 'undefined') {
				if (typeof o.openedClass != 'undefined') {
					openedClass = o.openedClass;
				}
				if (typeof o.closedClass != 'undefined') {
					closedClass = o.closedClass;
				}
			};

			var tree = $(this);
			tree.addClass('tree');
			tree.find('li').has('ul').each(function() {
				var branch = $(this);
				branch.find('.list-group-item').first().prepend('<i class="indicator glyphicon ' + closedClass + '"></i>');
				branch.addClass('branch');
				branch.on('click', function(e) {
					if (this == e.target) {
						var icon = $(this).find('.list-group-item').first().children('i:first');
						icon.toggleClass(openedClass + ' ' + closedClass);
						$(this).children('ul').children().toggle();
					}
				});
				branch.children('ul').children().toggle();
				//branch.children('ul').children().show();
			});

			tree.find('.branch .indicator').each(function() {
				$(this).on('click', function() {
					$(this).closest('li').click();
					return false;
				});
			});
		}
	});

	$('#ITP_BTN_HOME').on('click', function() {
		location.replace(MOBILE_CONTEXTPATH + '/app/main.html');
	});

	$('#ITP_BTN_USER').on('click', function() {
	});

	// 로그아웃 버튼
	$('#ITP_BTN_LOGOUT').click(function() {
		console.log('ITP_BTN_LOGOUT');
		fnLogout();
	});

});

function fn_make_select(options, code, select_id, all_show_yn, all_name) { //셀렉트 박스 만들기
	$select_id = $('#' + select_id);
	$select_id.empty();

	$.each(options, function(key, value) {
		if (value.codeCd == code) {
			if(all_show_yn == undefined || all_show_yn == true) {
				if(all_name == undefined || all_name == '') {
					$('<option/>', {'value': '', 'text': value.codeNm}).prependTo($select_id);
				} else {
					$('<option/>', {'value': '', 'text': all_name}).prependTo($select_id);
				}
			}
			$.each(value.codeDtlList, function(k, val) {
				$('<option/>', {
					'value': val.codeDtlCd,
					'text': val.codeDtlNm
				}).appendTo($select_id);
			});
			return false;
		}
	});
};

function fn_make_select_upper_menu(options, select_id, all_show_yn, all_name) { //셀렉트 박스 만들기
	$select_id = $('#' + select_id);
	$select_id.empty();
	if(all_show_yn == true) {
		$('<option/>', {'value': '', 'text': all_name}).prependTo($select_id);
	}
	$.each(options, function(key, value) {
		if (value.level == 3) {
			$('<option/>', {
				'value': value.menuNo,
				'text': value.menuNm
			}).appendTo($select_id);
		}
	});
};

function fn_make_select_brand(options, select_id, all_show_yn, all_name) { //브랜드 셀렉트 박스 만들기
	$select_id = $('#' + select_id);
	$select_id.empty();
	if(all_show_yn == true) {
		$('<option/>', {'value': '', 'text': all_name}).prependTo($select_id);
	}
	$.each(options, function(key, value) {
		$('<option/>', {
			'value': value.brandId,	// 브랜드코드
			'text': value.brandNm	// 브랜드명
		}).appendTo($select_id);
	});
};

function fn_make_select_item_class(options, select_id, all_show_yn, all_name) { //브랜드 셀렉트 박스 만들기
	$select_id = $('#' + select_id);
	$select_id.empty();
	if(all_show_yn == true) {
		$('<option/>', {'value': '', 'text': all_name}).prependTo($select_id);
	}
	$.each(options, function(key, value) {
		$('<option/>', {
			'value': value.itemClass,	// 브랜드코드
			'text': value.itemClassNm	// 브랜드명
		}).appendTo($select_id);
	});
};

function fn_make_select_store(options, select_id, all_show_yn, all_name, all_value) { //매장 셀렉트 박스 만들기
	$select_id = $('#' + select_id);
	$select_id.empty();
	if(all_show_yn == true) {
		$('<option/>', {'value': !all_value || all_value == undefined ? '' : all_value, 'text': all_name}).prependTo($select_id);
	}
	$.each(options, function(key, value) {
		$('<option/>', {
			'value': value.storeId,	// 매장번호
			'text': value.storeNm	// 매장명
		}).appendTo($select_id);
	});
}

function fnHashed(code) { //유니코드로 들어오는 해쉬키를 스트링으로 변환
	return decodeURIComponent(JSON.parse('"' + code.replace(/\"/g, '\\"') + '"'));
}

function fnLogout() { //로그아웃
	var callbackFn = function(result) {
		sessionStorage.removeItem('itp_login_info'); //Jwt 키 제거
		sessionStorage.removeItem('itp_manage_user_info'); //로그인 사용자 정보 제거
		$(location).attr('href', MOBILE_CONTEXTPATH + '/app/login.html');
	};
	fn_ajax_call('/api/member/sign-out', null, callbackFn, 'PATCH');
}

function fnSessionOut() { //1시간 동안 아무것도 안할때 또는 강제 만료시킬때 사용
	var callbackFn = function(result) {
		sessionStorage.removeItem('itp_login_info'); //Jwt 키 제거
		$(location).attr('href', MOBILE_CONTEXTPATH + '/app/login.html');
	};
	fn_ajax_call('/api/session/expire', null, callbackFn, 'PATCH');
}

//AJAX 양식 (이렇게 사용하시면 됩니다.)
function fn_ajax_call(href, param, fn, type) {
	$.ajax({
		contentType: 'application/json',
		url: DOMAIN + href,
		data: param,
		type: type,
		async: false,
		timeout: 10000,
		xhrFields: {
			withCredentials: true //Cross Domain 처리
		},
		beforeSend: function(xhr) {
			$('#ITP_OVERLAY').show();
			xhr.setRequestHeader('X-AUTH-TOKEN', CONN_KEY); //Jwt 토큰을 헤더에 담아서 보낸다.
		},
		complete: function() {
			$('#ITP_OVERLAY').hide();
		},
		success: function(result) {
			console.log(result);
			if (result.code !== undefined) { //성공시에도 메세지가 있으면 얼럿 예)저장되었습니다.
				itp_fn_modal_alert_ajax(result.message);
			}
			if (fn !== undefined || typeof fn !== 'undefined') fn(result);
		},
		error: function(xhr, status, error) {
			if (xhr.responseJSON !== undefined) { //실패시 서버에서 내려주는 메세지 얼럿
				itp_fn_modal_alert_ajax(xhr.responseJSON.message);
				if (xhr.status == 401) { //401에러가 떨어지면 로그인페이지로 이동
					sessionStorage.removeItem('itp_login_info'); //Jwt 키 제거
					$(location).attr('href', MOBILE_CONTEXTPATH + '/app/login.html');
				}
			} else {
				itp_fn_modal_alert_ajax(ITP_MSG_LOCALE.message.ajax.failProcess);
			}
		},
		fail: function() {
			itp_fn_modal_alert_ajax(ITP_MSG_LOCALE.message.ajax.failProcess);
		}
	});
};

function itp_fn_modal_alert(msg) {
	$('#ITP_MODAL_ALERT_CANCEL').hide();
	$('#ITP_MODAL_ALERT').modal('show');
	$('#ITP_MODAL_ALERT').find('.itp_alert_txt').html(msg);
	$('#ITP_MODAL_ALERT_CONFIRM').off('click');
	$('#ITP_MODAL_ALERT_CONFIRM').on('click', function() {
		$('#ITP_MODAL_ALERT').modal('hide');
	});
};

function itp_fn_modal_alert_ajax(msg) {
	$('#ITP_MODAL_ALERT_AJAX').modal('show');
	$('#ITP_MODAL_ALERT_AJAX').find('.itp_alert_txt').html(msg);
	$('#ITP_MODAL_ALERT_AJAX_CONFIRM').off('click');
	$('#ITP_MODAL_ALERT_AJAX_CONFIRM').on('click', function() {
		$('#ITP_MODAL_ALERT_AJAX').modal('hide');
	});
};

function itp_fn_modal_duplicate(label, input) {
	let msg = ITP_MSG_LOCALE.message.form.duplicate;
	msg = msg.replace('{0}', label);
	$('#ITP_MODAL_ALERT_CANCEL').hide();
	$('#ITP_MODAL_ALERT').modal('show');
	$('#ITP_MODAL_ALERT').find('.itp_alert_txt').html(msg);
	$('#ITP_MODAL_ALERT_CONFIRM').off('click');
	$('#ITP_MODAL_ALERT_CONFIRM').on('click', function() {
		$('#ITP_MODAL_ALERT').modal('hide');
		if (input != null) {
			$(input).focus();
		}
	});
};

function itp_fn_modal_confirm(msg, fn, args) {
	$('#ITP_MODAL_ALERT_CANCEL').show();
	$('#ITP_MODAL_ALERT').modal('show');
	$('#ITP_MODAL_ALERT').find('.itp_alert_txt').html(msg);
	if (fn !== undefined || typeof fn !== 'undefined') {
		$('#ITP_MODAL_ALERT_CONFIRM').off('click');
		$('#ITP_MODAL_ALERT_CONFIRM').on('click', function() {
			fn.callBack(args);
			$('#ITP_MODAL_ALERT').modal('hide');
		});
	}
};

function itp_fn_date_format(date, type) {
	let month = date.getMonth() + 1;
	let day = date.getDate();
	let hour = date.getHours();
	let minute = date.getMinutes();
	let second = date.getSeconds();

	month = month >= 10 ? month : '0' + month;
	day = day >= 10 ? day : '0' + day;
	hour = hour >= 10 ? hour : '0' + hour;
	minute = minute >= 10 ? minute : '0' + minute;
	second = second >= 10 ? second : '0' + second;

	if(type && type == 1) {
		return date.getFullYear() + '-' + month + '-' + day + ' ' + hour + ':' + minute + ':' + second;
	} else if(type && type == 2) {
		return date.getFullYear() + '.' + month + '.' + day;
	} else if(type && type == 3) {
		return date.getFullYear() + '' + month + '' + day;
	} else {
		return date.getFullYear() + month + day + hour + minute + second;
	}
}
