/**
 * Lottecard 공통
 * 함수는 lcf_ 접두사로 한다.
 * 변수는 lcv_ 접두사로 한다.
 *
 * @author ultteky@e4net.net
 * @version 1.0
 */
var lcv_CheckDoubleSubmit; //이중서브밋방지 플래그

_n_sid = "lottecard"; //[lottecard:개인], [corplottecard:법인], [ladmlottecard:관리자], [merchantlottecard:가맹점] 분석대상 사이트 도메인명이나 CP사명을 입력하세요. _n_sid 값 별로 로그파일이 별도로 생성이 됩니다.
_n_uid_cookie = "UID"; //사이트 내에서 사용하시는 회원ID 쿠키명을 입력하시면 됩니다.회원제 사이트가 아니라면 삭제하셔도 됩니다.
try { n_logging(); } catch (e) {}

if (eiwafv_IsIE6Version == true) {
	document.write("<script type=\"text/javascript\" src=\"/js/DD_belatedPNG.js\"><\/script>");
	$(function() {
		DD_belatedPNG.fix('.lt, .tt, .pop_body, .pop_bg_right, .lb, .ft');
	});
}

/**
 * 모바일/태블릿의 경우 모바일옙 설치 유도.
 * @return 체크 결과
 * @type Boolean
 */
function eiwaf_ModuleCheckFailInterceptor() {
	if (!(lcf_CheckTabletDevice() || lcf_CheckMobileDevice())) {
		return;
	}
	var pId  = "divMobileWkInstall";
	var pObj = $("#" + pId);
	if (pObj.length == 0 ) {
		pObj = $("<div id='" + pId + "' DivPopup='true' style='display:none;'></div>").appendTo("body");
	}
	lcf_DivPopupShow("/popup/comn/Mobile.html", "#" + pId);
	return false;
}

/**
 * 폼데이터를 서버로 전송, 롯데카드 2차도메인 암호화 통신을 위한 보정(submit).
 * 롯데카드(2차도메인포함) 이외의 타도메인의 경우 해당 도메인의 모듈을 사용해야 암호화 통신이 가능함
 * @param {HTMLFormElement} fobj form object 
 * @param {String} url URL
 * @param {String} tar target [optional]
 * @param {String} mtd method [optional]
 * @type void
 */
function lcf_Submit(fobj, url, tar, mtd) {
	if (!svcf_ModuleCheck(url)) {
		return;
	}
	if (fobj.encoding.indexOf("multipart") > -1) {
		fobj.encoding = "application/x-www-form-urlencoded";
	}
	fobj.action = url;
	fobj.target = utlf_Nvl2(tar, "_self");
	fobj.method = utlf_Nvl2(mtd, "post");
	XecureSubmit(fobj, true);
}

/**
 * window.open 이용한 GET 방식 링크, 롯데카드 2차도메인 암호화 통신을 위한 보정.
 * 롯데카드(2차도메인포함) 이외의 타도메인의 경우 해당 도메인의 모듈을 사용해야 암호화 통신이 가능함
 * @param {String} url URL
 * @param {String} data 파라미터("&"연결) [optional]
 * @param {String} tar target [optional]
 * @param {String} attr 윈도우 속성 [optional]
 * @type void
 */
function lcf_Link(url, data, tar, attr) {
	if (data) {
		if (url.indexOf("?") > -1) {
			url = url + "&" + data;
		} else {
			url = url + "?" + data;
		}
	}
	if (!svcf_ModuleCheck(url)) {
		return;
	}
	tar = utlf_Nvl2(tar, '_self');
	XecureNavigate(url, tar, attr, true);
}

/**
 * 서버 리소스 활용이 불가능한 경우 아이피를 이용해서 웹서버 주소(도메인) 획득.
 * @param {String} site 웹서버 구분값
 * @type String
 */
function lcf_HostName(site) {
	var hn = window.location.hostname;
	if (hn.indexOf(".lottecard.co.kr") > -1) {
		if (site == 'corp') {
			return "http://corp.lottecard.co.kr";
		} else if (site == 'mer') {
			return "http://merchant.lottecard.co.kr";
		}
		return "http://www.lottecard.co.kr";
	}
	if (site == 'corp') {
		return "http://" + hn + ":13016";
	} else if (site == 'mer') {
		return "http://" + hn + ":13019";
	}
	return "http://" + hn + ":13015";
}

/**
 * 2차 도메인(개인/법인) 로그인 정보 공유.
 * @param {JSON} options 데이터
 * @type void
 */
function lcf_SSO(options) {
	if (!utlf_IsNull(options.success)) {
		var reurl = utlf_Nvl(options.reUrl, options.indexUrl);
		var fproc = utlf_Nvl(options.forcedProc, "N");
		if (options.form) {
			if (options.success == true) {
				var rf = svcf_GetReform("SSO");
				$("<input type='hidden' name='login_type'/>").appendTo(rf).val("rrno");
				$("<input type='hidden' name='mbr_rrno'/>").appendTo(rf).val(options.mbrRrno);
				$("<input type='hidden' name='re_url'/>").appendTo(rf).val(reurl);
				$("<input type='hidden' name='forced_proc'/>").appendTo(rf).val(fproc);
				svcf_AppendForm(rf, options.form);
				lcf_Submit(rf, options.hostname + options.ssoUrl, options.target, options.method);
				return;
			}
			reurl = "/app" + reurl;
			if (reurl.endsWith(".top") || reurl.indexOf(".top?") > -1) {
				lcf_Submit(options.form, options.hostname + reurl, options.target, options.method);
			} else {
				svcf_WebSubmit(options.form, options.hostname + reurl, options.target, options.method);
			}
		} else {
			var pp = utlf_Nvl(options.params, "");
			if (options.success == true) {
				var params = new EiwafParams().add("login_type", "rrno").add("mbr_rrno", options.mbrRrno).add("re_url", reurl).add("forced_proc", fproc);
				lcf_Link(options.hostname + options.ssoUrl, params.getEncodeQueryString() + "&" + pp, options.target, options.attribute);
				return;
			}
			reurl = "/app" + reurl;
			if (reurl.endsWith(".top") || reurl.indexOf(".top?") > -1) {
				lcf_Link(options.hostname + reurl, pp, options.target, options.attribute);
			} else {
				svcf_WebLink(options.hostname + reurl, pp, options.target, options.attribute);
			}
		}
		return;
	}
	if (!HaveControl_web()) {
		svcf_WebLink(options.hostname + "/app" + options.indexUrl, new Date().getTime());
		return;
	}
	
	svcf_AjaxParam(options.mbrRrrnoUrl, "forced_proc=" + options.forcedProc, {
		timeout: 10000,
		callbackFn: function(status, data){
			if (status.code == 0 && !utlf_IsNullOrEmpty(data.mbr_rrno)) {
				options.mbrRrno = data.mbr_rrno;
				options.success = true;
			} else {
				options.success = false;
				if (options.forcedProc == "Y") {
					if (options.forcedProcCallback != false) {
						utlf_AlertMsg("응답", status.message);
						if (status.msgCode == "AS0044004") {
							eiwaf_IntroPag();
							return;
						}
					}
				}
			}
			if (options.callbackFn) {
				options.callbackFn.call(options);
			} else {
				lcf_SSO(options);
			}
		}
	});
}

/**
 * 법인 => 개인 사이트 이동.
 * @param {JSON} options 데이터
 * @type void
 */
function lcf_PersSSO(options) {
	options.mbrRrrnoUrl = "/app/CPMBRAA_P210.top";
	options.hostname = lcf_HostName("pers");
	options.indexUrl = "/index.jsp";
	options.ssoUrl = "/app/IHMBRAA_P910.top";
	lcf_SSO(options);
}

/**
 * 개인 => 법인 사이트 이동.
 * @param {JSON} options 데이터
 * @type void
 */
function lcf_CorpSSO(options) {
	options.mbrRrrnoUrl = "/app/IHMBRAA_P210.top";
	options.hostname = lcf_HostName("corp");
	options.indexUrl = "/index.jsp";
	options.ssoUrl = "/app/CPMBRAA_P910.top";
	lcf_SSO(options);
}

/**
 * 날짜 기간설정.
 * com.lottecard.framework.web.tag.html.DateTermTag 태그 처리
 * @param {HTMLInputElement} startInput 시작일자 input
 * @param {HTMLInputElement} endInput 종료일자 input
 * @param {String} startDate 시작일자 값
 * @param {String} endDate 종료일자 값
 * @type void
 */
function lcf_DateTerm(startInput, endInput, startDate, endDate) {
	$(startInput).val(startDate);
	$(endInput).val(endDate);
}

/**
 * 날짜 기간설정 유효성 검사.
 * - dPattern 기본값 - Date.FocusFormat
 * - 예1 : lcf_IsDateTerm("20100102", "20100101"), 기본형: yyyyMMdd
 * - 예2 : lcf_IsDateTerm(document.form1.start_date, document.form1.end_date), 기본형: yyyy.MM.dd
 * @param {HTMLInputElementOrString} startInput 시작일자 input 또는 값
 * @param {HTMLInputElementOrString} endInput 종료일자 input 또는 값
 * @param {String} dPattern 날짜패턴 [optional]
 * @return 체크 결과
 * @type Boolean
 */
function lcf_IsDateTerm(startInput, endInput, dPattern) {
	var isInput = (utlf_GetType(startInput) == "string" ? false : true);
	var sdate, edate;
	if (isInput) {
		sdate = startInput.value;
		edate = endInput.value;
		dPattern = utlf_Nvl(dPattern, "yyyy.MM.dd");
	} else {
		sdate = startInput;
		edate = endInput;
	}
	if (sdate.parseDate(dPattern) > edate.parseDate(dPattern)) {
		if (isInput) {
			var stitle = utlf_Nvl2(startInput.title, "시작일");
			var etitle = utlf_Nvl2(endInput.title, "종료일");
			utlf_AlertMsg("기간설정", stitle + "이(가) " + etitle + "보다 큽니다.");
			utlf_Focus(endInput);
		} else {
			utlf_AlertMsg("기간설정", "시작일이 종료일보다 큽니다.");
		}
		return false;
	}
	return true;
}

/**
 * Ajax통신이 송신되어지기 전에 호출되는 Ajax event.
 * 함수 안에서 this 는 Ajax 호출 시 사용한 옵션이다.
 * @type void
 */
function lcf_AjaxStart() {
	var svc = utlf_Nvl(this.processClss, "Q");
	var message;
	if      (svc == "Q") { message = "요청"; }
	else if (svc == "R") { message = "조회"; }
	else if (svc == "I") { message = "등록"; }
	else if (svc == "U") { message = "수정"; }
	else if (svc == "D") { message = "삭제"; }
	else if (svc == "P") { message = "인쇄"; }
	else                 { message = svc;    }
	if (this.dimmed) {
		lcf_AjaxRemainContent(this, message);
	} else if (this.contentExpr) {
		if (this.contentRemain == false) {
			lcf_AjaxClearContent(this, message);
		} else {
			var dimTar = $(this.contentExpr);
			if (utlf_IsNullOrBlank(dimTar.html())) {
				this.internalContentRemain = false;
				lcf_AjaxClearContent(this, message);
			} else {
				this.internalContentRemain = true;
				lcf_AjaxRemainContent(this, message, dimTar);
			}
		}
	}
}

/**
 * Ajax통신이 완료시 호출되는 event, sccuess 와 error이 호출되어진 후에 호출되는 Ajax Event.
 * 함수 안에서 this 는 Ajax 호출 시 사용한 옵션이다.
 * @type void
 */
function lcf_AjaxEnd() {
	if (this.dimmed || this.contentRemain != false) {
		$("#divAjaxLoading2").hide();
	}
	if (this.internalContentRemain != true) {
		if (this.contentExpr) {
			$(this.contentExpr + " .loading-locate").remove();
		}
	}
}

/**
 * private 메소드
 * @param options
 * @param message
 * @private
 */
function lcf_AjaxClearContent(options, message) {
	var jObj = $("#divAjaxLoading");
	if (jObj.length == 0) {
		jObj = $(
				"<div id=\"divAjaxLoading\" style=\"display:none;\"><div class=\"loading-locate\"><div class=\"loading\"><div class=\"anima\"><img src=\"/images/common/loading2.gif\" alt=\"\" /></div><div class=\"txt-var\"><p><span id=\"spnAjaxLoadingSvc\"></span>&nbsp;처리중입니다.</p></div></div></div></div>"
			).appendTo("body");
	}
	$("#spnAjaxLoadingSvc").html(message);
	$(options.contentExpr).html(jObj.html());
}

/**
 * private 메소드
 * @param options
 * @param message
 * @param dimTar
 * @private
 */
function lcf_AjaxRemainContent(options, message, dimTar) {
	var jObj = $("#divAjaxLoading2");
	if (jObj.length == 0) {
		jObj = $(
				"<div id=\"divAjaxLoading2\" style=\"position:absolute; display:none; z-index:9999;\"><div class=\"loading\"><div class=\"anima\"><img src=\"/images/common/loading2.gif\" alt=\"\" /></div><div class=\"txt-var\"><p><span id=\"spnAjaxLoadingSvc2\"></span>&nbsp;처리중입니다.</p></div></div></div>"
			).appendTo("body");
	}
	$("#spnAjaxLoadingSvc2").html(message);
	var barObj = $("div:first", jObj);
	var barOpts = {
			margin: '0px auto',
			left: '0px',
			top: '34%',
			position: 'relative'
		};
	if (dimTar) {
		jObj.css({
				left: dimTar.offset().left + 'px',
				top: dimTar.offset().top + 'px',
				width: dimTar.css('width'),
				height: dimTar.css('height')
			});
	} else {
		var opts = {
				left: '0px',
				top: '0px'
			};
		if (options.dimmed != true) {
			opts.width = '245px';
			opts.height = '0px';
			opts = $.extend(opts, options.dimmed);
		} else {
			opts.width = $(document).width() + 'px';
			opts.height = $(document).height() + 'px';
			barOpts.top = (($(window).height() - barObj.outerHeight()) / 2) + ($(window).scrollTop() || 0) + 'px';
		}
		jObj.css(opts);
	}
	barObj.css(barOpts);
	jObj.show();
}

/**
 * 레이어팝업 호출.
 * @param {String} url URL
 * @param {String} contentExpr JQuery 표현식
 * @param {JSON} options [optional]
 * @type void
 */
function lcf_DivPopupShow(url, contentExpr, options) {
	var jObj = $(contentExpr);
	if (utlf_IsNullOrBlank(jObj.html())) {
		jObj.load(url, function(response, status, xhr) {
				if (status == "success") {
					if (options) {
						$("> div:first", jObj).css(options);
					}
					if (eiwafv_IsIE6Version == true) {
						DD_belatedPNG.fix('.lt, .tt, .pop_body, .pop_bg_right, .lb, .ft');
					}
				}
			});
	}
	jObj.show();
}

/**
 * 레이어팝업 닫기.
 * @param {HTMLAnchorElement} aObj 닫기버튼 링크 Object
 * @type void
 */
function lcf_DivPopupHide(aObj) {
	$(aObj).closest("[DivPopup='true']").hide();
}

/**
 * 이중서브밋방지.
 * @return 체크 결과
 * @type Boolean
 */
function lcf_CheckDoubleSubmit() {
	if (lcv_CheckDoubleSubmit) {
		return true;
	}
	setTimeout(function() { lcv_CheckDoubleSubmit = false; }, 1000);
	lcv_CheckDoubleSubmit = true;
	return false;
}

/**
 * 모바일 체크.
 * @return 체크 결과
 * @type Boolean
 */
function lcf_CheckMobileDevice() {
	var cmpUserAgent = navigator.userAgent;
	var srcRegExpr = eval("/" + ([
			"iPhone",
			"iPod",
			"Android",
			"Windows CE",
			"BlackBerry",
			"Symbian",
			"Windows Phone",
			"webOS",
			"Opera Mini",
			"Opera Mobi",
			"POLARIS",
			"IEMobile",
			"lgtelecom",
			"nokia",
			"SonyEricsson"
		]).join("|") + "/i");
	if (cmpUserAgent.match(srcRegExpr) != null) {
		return true;
	}
	srcRegExpr = eval("/" + ([
				"LG",
				"SAMSUNG",
				"Samsung"
			]).join("|") + "/");
	if (cmpUserAgent.match(srcRegExpr) != null) {
		return true;
	}
	return false;
}

/**
 * 태블릿 체크.
 * @return 체크 결과
 * @type Boolean
 */
function lcf_CheckTabletDevice() {
	var cmpUserAgent = navigator.userAgent;
	var srcRegExpr = eval("/" + ([
			"iPad",
			"SHW-M180S"
		]).join("|") + "/i");
	if (cmpUserAgent.match(srcRegExpr) != null) {
		return true;
	}
	return false;
}
