/*****************************************************************************
 * 파일명 : jsl-ajax.js
 * 작성일 : 2007. 12. 31
 * 설   명 : Ajax통신을 위한 Utility js, prototype.js include 후 사용한다.
 * Dependency  : prototype.js
 * 메세지효과를 위하여 ExtJs 아래 정의 되어야 합니다.
 * ===========================================================================
 * 변경이력:
 * DATE				AUTHOR		DESCRIPTION
 * ---------------------------------------------------------------------------
 * 변경 이력은 이곳에 추가 합니다.
 *****************************************************************************/


jsl.Ajax = function() {
	return {
		request: function(url, opts) {
		window.focus();
			var options = {
				parameters: opts.parameters + '&_ajax_flag=true',
				onCreate: function() {
					Progress.show();
				},
				onComplete: function(res) {
					Progress.hide();
					
				 	result = res.responseJSON;	
					
					if (result == 'Session Timeout') {
						// 로그인 페이지로.
						if (opts.sesstimeout) {
							opts.sesstimeout(res);
						}else{
							// 로그아웃처리
							window.location.href = jsl.APPLICATION_CONTEXT_ROOT + "/logout.jsp";
						}
						return;
					}else {
						if (result.code.substring(0, 4) != 'CMMI') {
							jsl.Dialog.alert(result.message);
							if (opts.failure) 
								opts.failure(res);
							return;
						}
						if (opts.displayMessage) {
							jsl.Dialog.alert(result.message, function() {
								if (opts.success) {
									opts.success(res);
								}
							});
						}
						else {
							if (opts.success) {
								opts.success(res);
							}
						}
					}
				}
			};
			new Ajax.Request(url, options);
		},
		updater: function(container, url, opts) {
			window.focus();
			var options = {
				evalScripts: true,
				parameters: opts.parameters + '&_ajax_flag=true',
				onCreate: function() {
					Progress.show();
				},
				onComplete: function(res) {
					Progress.hide();
					
					if (res.getHeader("json-type")) {
						if (opts.sesstimeout) {
							opts.sesstimeout(res);
						}else{
							// 로그아웃처리
							window.location.href = jsl.APPLICATION_CONTEXT_ROOT + "/logout.jsp";
						}
						return;
					}
					if (opts.success) {
						opts.success(res);
					}
				}
			};
			new Ajax.Updater(container, url, options);
		},
		// 세션 종료시 로그인 페이지로 이동.
		sesstimeout : function(res){
			alert('로그인이 필요한 페이지 입니다. 먼저 로그인을 해주세요.');
			
			window.location.href = jsl.APPLICATION_CONTEXT_ROOT + "/logout.jsp";
			return;
		},
		// result json callback.
//	    submitLoginRequest: function(url, formObj, callback) {
//	    	
//			if(!common.loginCookieCheck()) return;
//	    	
//			common.setUserInfo(formObj);
//
//	    	jsl.Ajax.submitRequest(url, formObj,callback);		
//		},
		submitRequest: function(url, formObj, callback){
			var params = null;
			if(formObj != null){
				params = Form.serialize(formObj);
			}			
			var options = {
				parameters: params,
				success : callback,
				sesstimeout : jsl.Ajax.sesstimeout
			};
			jsl.Ajax.request(url, options);
		},
		submitUpdate: function(container, url, formObj, callback){
			var params = null;
			if(formObj != null){
				params = Form.serialize(formObj);
			}
			var options = {
				parameters: params,
				success : callback,
				sesstimeout : jsl.Ajax.sesstimeout
			};
			jsl.Ajax.updater(container, url, options);
		}
	}
}();

jsl.Ajax2 = function() {
	return {
		request: function(url, opts) {
			if (!opts.parameters) {
				opts.parameters = {};
			}
			var options = {
				parameters: opts.parameters,
				onComplete: function(res) {
					if (opts.success) {
						opts.success(res);
					}
				}
			};
			new Ajax.Request(url, options);
		}
	}
}();

/**
 * LogoutTimer의 인스턴스를 이용하여 타이머를 작동시킨다 
 * @constructor jsl.LogoutTimer
 */
var timerInstance = null;
jsl.startTimer = function() {
	if (null == timerInstance) {
		if ($(jsl.ICON_CLOCK_DIV)) {
			timerInstance = new jsl.LogoutTimer();
		} else {
			return null;
		}
	}
	
	return timerInstance;
}

/**
 * LogoutTimer 를 설정하는 클래스
 * @constructor jsl.LogoutTimer
 */
jsl.LogoutTimer = function() {
    /* Member field */
	this.running    	 = false;
	this.currDate        = new Date();
	this.endDate         = new Date();
	this.currSec 		 = 0;
	this.currMin 		 = 0;
	this.logoutTimeDiv 	 = jsl.LOGOUT_TIME_DIV;   // 1분이 됐을 경우 보여줄 Alert레이어
	this.showTimeDiv 	 = jsl.SHOW_TIME_DIV;     // 화면에 보여줄 남은 시간 레이어
	this.alertMinutesDiv = jsl.ALERT_MINUTES_DIV; // 1분이 됐을 경우 Alert레이어에 보여줄 남은 시간 레이어
	this.iconClockDiv 	 = jsl.ICON_CLOCK_DIV;    // 남은시간 보여줄 레이어영역
	this.isRemainProc    = true                   // 1분미만일때 한번 처리될 부분을 처리할지 여부
	this.intervalID;							  // setInterval ID (중지할때 사용)
}


jsl.LogoutTimer.prototype = {
	instance : null,
	/* Member method */
	/**
	 * login 하고 나면 실행시킨다.
	 */		
	start : function() {
		if (!this.running) {
			this.running = true;
			if (this.reset()) {			
				instance = this;
				this.intervalID = setInterval(function(){
					instance.update()
				}, 1000);
			}
		}
		else {
			// Observer 를 중지 시킨다.
			Event.stopObserving(window, 'resize', this.resizeHandler);
			Event.stopObserving(window, 'scroll', this.resizeHandler);
			
			this.reset();
		}
	},
	
	/**
	 * 로그인 유지시간 초기화
	 */
	reset : function() {
		this.isRemainProc = true;
		
		//if(!document.getElementById(this.iconClockDiv)) return;
		if(null==$(this.iconClockDiv) || $(this.iconClockDiv) == undefined) {
			return false;
		}
		
		jsl.showDiv(this.iconClockDiv);
		document.getElementById(this.iconClockDiv).src = jsl.APPLICATION_CONTEXT_ROOT + "/resource/image/common/layout/icon_clock.gif";
		document.getElementById(this.showTimeDiv).style.color = "#596fb8";
		document.getElementById(this.showTimeDiv).innerHTML = "<span class='point_text_color_blue b' style='font-size:11px;font-family:Tahoma;'>05:00</span>";

		this.endDate = new Date();
		
		// TODO 테스트할때 계속 뜨면 짜증나기에 6시간으로 변경 추후 5분으로 다시 셋팅해야 함.
		this.endDate.setMinutes(this.endDate.getMinutes() + 360);
		
		return true;
	},

	/**
	 * 로그인 유지시간 체크
	 */
	update : function () {
		this.currDate = new Date();

		if (this.running) {
		
			var sec = (this.endDate - this.currDate) / 1000;
			this.currMin = eval(parseInt(sec / 60));
			this.currSec = eval(parseInt(sec % 60));
			
			// 1분 미만일 경우
			if (this.currMin < 1) {
				
				// 1분 미만 알림레이어 설정
				if (this.isRemainProc){
					document.getElementById(this.iconClockDiv).src = jsl.APPLICATION_CONTEXT_ROOT + "/resource/image/common/layout/icon_clock2.gif";
					document.getElementById(this.showTimeDiv).style.color = "#ff0000";
					
					// 알림 레이어를 띄워 준다.
					this.openMsgLayer();
					this.isRemainProc = false;
				}
				
				// 로그인 만료시간이 됐을 경우(00:00)
				if (this.currSec <= 0) {
					// 동작이 끝났을 경우 Observer 를 중지 시킨다.
					Event.stopObserving(window, 'resize', this.resizeHandler);
					Event.stopObserving(window, 'scroll', this.resizeHandler);
					
					this.reset();
					this.running = false;
					
					// 레이어 숨기기
					this.closeMsgLayer();
					/*
					jsl.extJS.messageBox.errMsgBox({
						isConfirm: false,
						title: '로그아웃',
						message: '고객님의 보안을 위해 자동으로 로그아웃되었습니다.<br/><br/>로그인 후 일정시간동안 사이트를 이용하지 않으셨습니다.<br/>불편하시더라도 다시 로그인 하시어 사용해 주시기 바랍니다.',
						callback: function(e){
							// TO DO 로그아웃 Action을 실행한다.
						}
					});
					*/
				}
			}
			
			Strsec = "" + this.currSec;
			Strmin = "" + this.currMin;
			if (Strsec.length < 2) {
				Strsec = "0" + this.currSec;
			}
			if (Strmin.length < 2) {
				Strmin = "0" + this.currMin;
			}
			document.getElementById(this.showTimeDiv).innerHTML = "<span class='point_text_color_blue b' style='font-size:11px;font-family:Tahoma;'>" + Strmin + ":" + Strsec + "</span>";
			//jsl.extJS.logoutMessage.updateTime(this.alertMinutesDiv, Strsec);
		}
		else {
			clearInterval(this.intervalID);
		}
	},
	
	/**
	 * 
	 * @param {Object} url
	 */
	loginTimeSubmit : function(url) {
		var request = new Ajax.Request(
			url,
			{
				method : 'post',
				parameters : 'ajax=ture',
				onSuccess : this.restart,
				onFailure : this.restart
			}
		);	
	},
	
	openMsgLayer: function(){
		/*
		jsl.extJS.logoutMessage.show();
		*/
		Event.observe(window, 'resize', this.resizeHandler);
		Event.observe(window, 'scroll', this.resizeHandler);
	},
	
	closeMsgLayer: function(){
		// 동작이 끝났을 경우 Observer 를 중지 시킨다.
		Event.stopObserving(window, 'resize', this.resizeHandler);
		Event.stopObserving(window, 'scroll', this.resizeHandler);
		/*
		if (null != jsl.extJS.logoutMessage) {
			jsl.extJS.logoutMessage.close();
		}
		*/
	},
	
	/**
	 * 5분 로그인 유지시간 초기화
	 */
	restart : function(){
		// Observer 를 중지 시킨다.
		Event.stopObserving(window, 'resize', this.resizeHandler);
		Event.stopObserving(window, 'scroll', this.resizeHandler);
		this.closeMsgLayer();
		this.reset();
	},
	
	/**
	 * 리사이즈/스크롤시 이벤트 핸들러
	 * @param {Object} evt
	 */
	resizeHandler : function(evt){
		/*
		// 레이어가 화면 가운데에 위치하도록 설정
		if (null != jsl.extJS.logoutMessage.logoutLayer) {
			jsl.extJS.logoutMessage.logoutLayer.center();
		}
		*/ 
	}
}
