
function getBrowserInfo(){
    var browser;
    var version;
    if(navigator.appName==""){
        browser="Unknown";
    } else {
        browser=navigator.appName;
    }

    version = parseFloat(navigator.appVersion);
    if ((Math.round(parseFloat(navigator.appVersion)*100)) - (parseInt(navigator.appVersion) * 100) == 0) {
        version = version + ".0";
    }

    if (navigator.appName.substring(0,9) == "Microsoft") {
        var msiestart = (navigator.appVersion.indexOf('(') + 1);
        var msieend = navigator.appVersion.indexOf(')');
        var msiestring = navigator.appVersion.substring(msiestart, msieend);
        var msiearray = msiestring.split(";");
        var platform = msiearray[2];
        var msieversion = msiearray[1].split(" ");
        version = msieversion[2];
    }
    return [browser,version];
};

function isIE7(){
    var verInfo = getBrowserInfo();
    if( verInfo[0].indexOf("Microsoft") != -1 && verInfo[1].indexOf("7.0") != -1 ){
        return true;
    }
    return false;
}

function isIE(){
    var info = getBrowserInfo();
    if( info[0].indexOf("Microsoft") != -1 ){
        return true;
    }
    return false;
}

function getIE7PlusFix(fix){
    if( isIE7() ){
        return fix;
    }
    return 0;
}

function trim(str){
	str = str.replace(/^\s*/,'').replace(/\s*$/, '');
	return str;
}

function isEmail(mail) {
	if(!/^[\w_-]+(\.[\w_-]+)*@[\w_-]+(\.[\w_-]+)*\.\w{2,3}$/.test(mail)) {
		return false;
	}

	return true;
}

function isNumber(num) {
	var numLen = num.length;
	for( var i = 0 ; i < numLen ; i++ ) {
		var chr = num.charAt(i);
		if( '0' > chr || '9' < chr ) {
			return false;
		}
	}

	return true;
}

/*
* 이벤트에 의해 처리된다.
* 한글 전환 불가 모드에서 처리 해야 한다.
* 탭 버튼과 backspace 버튼은 검증에서 제외된다.
*/
function numericOnly(){
	/*
	* event code 8 = backspace
	* event code 9 = tab
	*/
	if(event.keyCode != 8 && event.keyCode != 9) {
		if((event.keyCode < 48)||(event.keyCode > 57)
				&& (event.keyCode < 96 || event.keyCode > 105 ) ) {
		   event.returnValue=false;
		}
	}
}

/*
* 이벤트에 의해 처리된다.
* 한글 전환 불가 모드에서 처리 해야 한다.
* 탭 버튼과 backspace 버튼은 검증에서 제외된다.
* firefox 에서 처리 되도록 수정
*/
function numericOnlyExt(e){
	/*
	* event code 8 = backspace
	* event code 9 = tab
	*/
	var charCode = (window.event) ?  event.keyCode : e.which;
	if (charCode > 31 && (charCode < 48 || charCode > 57)) {
		if(charCode != 46){
			return false;
		}
	}
	return true;
	/*
	if(e.keyCode != 8 && e.keyCode != 9) {
		if((e.keyCode<48)||(e.keyCode>57)) {
		   e.returnValue=false;
		}
	}
	*/
}

function returnImageSize(imageFileUrl){

	if(imageFileUrl == null || imageFileUrl ==""){
		return null;
	}

	var imagePath = imageFileUrl;
	var imageInfo = new Image();
	var ImageInfoArray = new Array(2);

	imageInfo.src = imagePath;
	ImageInfoArray[0] = imageInfo.width;
	ImageInfoArray[1] = imageInfo.height;

	return ImageInfoArray;
}

function isWhiteSpace(str){
	var pattern = /\s+/;
	if(str.length == 0 ){
		return true;
	}
	return (pattern.test(str) && str.length == RegExp.lastIndex) ? true : false;
}


function isCheckboxed(value){
	var obj = value;
	for(var i=0; i<obj.length;i++){
		if( obj[i].checked ) return true;
	}
	return false;
}

String.prototype.trim = function(){
	return this.replace(/(^\s*)|(\s*$)/gi, "");
}

/*
* return only character length except white space or new line
*/
String.prototype.lengthWithoutSpace= function() {
	return this.replace(/(\s)+/gi, "").length;
}

String.prototype.replaceAll = function(str1, str2){
	var temp_str = "";

	if (this.trim() != "" && str1 != str2){
		temp_str = this.trim();
		while (temp_str.indexOf(str1) > -1){
			temp_str = temp_str.replace(str1, str2);
		}
	}
	return temp_str;
}


function isImgFile(str){
	var ext = str.split(".");
	var imgchk = ext[ext.length-1].toUpperCase();

	if(imgchk == "JPG" || imgchk == "GIF" || imgchk == "BMP" || imgchk == "PNG"){
		return true;
	}else{
		return false;
	}
}

function isEng(str) {
	for(var i=0;i<str.length;i++){
		achar = str.charCodeAt(i);
		if( achar > 255 ){
			return false;
		}
	}
	return true;
}

/**
 * 오직 영어만 있는지의 여부를 판단한다.
 * isEng(str)함수고 제 역활을 하지 못해서 추가함
 * hmjkor@nowonplay.com
 */
function isOnlyEng(str){
	return str.search(/^[a-zA-Z]+$/) != -1;
}

function isKorean(str) {
	var i;
	var ch;

	for (i=0;i<str.length;i++) {
		ch = escape(str.charAt(i));

		if (strCharByte(ch) != 2) {
			return false;
		}
	}
	return true;
}

function strCharByte(chStr) {
	if (chStr.substring(0, 2) == '%u') {
		if (chStr.substring(2,4) == '00')
			return 1;
		else
			return 2;        //한글
	} else if (chStr.substring(0,1) == '%') {
		if (parseInt(chStr.substring(1,3), 16) > 127)
			return 2;        //한글
		else
			return 1;
	} else {
			return 1;
	}
}

function numberFormat(number) {
	var numStr = number.toString();
	if(numStr.length <= 1) {
		return "0"+numStr;
	} else {
		return number;
	}
}


function isLeapYear(year) {
	if((year%4==0) && (year%100!=0) || (year%400==0)){
		return true;
	}else{
		return false;
	}
}

function getRadioValue(ele) {

	for(i = 0; i < ele.length; i++) {
		if(ele[i].checked) {
			return ele[i].value;
		}
	}
}
/*
function getWeekDayString(num) {
	var str = "월요일";

	switch(num) {
		case 0 : str = "일요일";
			break;
		case 1 : str = "월요일";
			break;
		case 2 : str = "화요일";
			break;
		case 3 : str = "수요일";
			break;
		case 4 : str = "목요일";
			break;
		case 5 : str = "금요일";
			break;
		case 6 : str = "토요일";
			break;
	}

	return str;
}
*/
/*
* 엔터 값을 센다. \n 값
* textArea 같은 필드에서 현재 입력된 row count 를 구할 수 있다.
* 글자가 입력 되도 엔터값을 치면 않는다면 row count 는 0 이다
*/
function countLineBreaks (string) {
	var re = /\r\n|\r|\n/g;
	var n = 0;
	while (re.exec(string))
	  n++;
	return n;
}

/**
 * textarea의 rows보다 라인이 더 입력되면,
 * 입력받은 이벤트를 무시한다.
 * 따라서 onKeyPress 에 걸어줘야 함.
 */
function fixRowTextArea(textarea, maxRowCount){

	var lineBreaks = countLineBreaks(textarea.value);
	if(maxRowCount <= lineBreaks){
		for(i = lineBreaks; i >= maxRowCount; i--) {
			if(textarea.value.lastIndexOf("\n") != -1) {
				textarea.value = textarea.value.substring(0, textarea.value.lastIndexOf("\n")-1);
			}
		}
		/*
		alert("해당 필드에 입력 하실 수 있는 row 는 최대 " + maxRowCount + " 줄 까지 입니다.");
		event.keyCode = '';
		textarea.value = textarea.value.substring(0, textarea.value.lastIndexOf("\n")-1);
		*/
		return false;
	}else{
		return true;
	}
}

/**
 * 주민등록번호를 검사한다.
 * @param {Object} firstNumber 주민등록번호 앞자리
 * @param {Object} secondNumber 주민등록번호 뒷자리
 * @return true-유효한 주민번호
 */
function checkSocialNumber( firstNumber, secondNumber ){
	var i, sum = 0;
	var str = firstNumber + secondNumber;
	var first = firstNumber;
	var second=secondNumber;

	if( parseInt( second ) < 1000000 && parseInt( second ) > 2999999 ){
		return false;
	}

	if( str.length < 13 ){
		return false;
	}

	for (i=0,sum=0; i<12; i++){
		sum += ( ( ( i % 8 ) + 2 ) * ( str.charAt( i ) - "0" ) );
	}
	sum = 11 - ( sum % 11 );
	sum = sum % 10;

	if( sum == str.charAt( 12 ) ){
		return true;
	}
	return false;
}

/**
 * 사업자 등록번호를 검사한다.
 * @param {Object} 사업자 등록번호
 * @return true-유효한 등록번호
 */
function checkBizSocialNumber(strNo) {

	var sum = 0;
	var getlist =new Array(10);
	var chkvalue =new Array("1","3","7","1","3","7","1","3","5");

	for (var i=0;i<10;i++){
	getlist[i] = strNo.substring(i,i+1);
	}

	for (var i=0;i<9;i++){
	sum += getlist[i]*chkvalue[i];
	}
	sum = sum +parseInt((getlist[8]*5)/10) ;
	sidliy = sum%10;
	sidchk = 0;

	if ( sidliy != 0 ) {
	sidchk = 10 - sidliy;
	} else {
	sidchk = 0;
	}
	if ( sidchk != getlist[9] ) {
	return false;
	}
	return true;

}


/**
 * 외국인 등록번호 체크
 * @param {Object} firstNumber 첫번째 입력값
 * @param {Object} secondNumver 두번째 입력값
 * @return true - 유효한 번호
 */
function checkForeignNumber (firstNumber, secondNumver){
        var foreignNumber = firstNumber + secondNumber;

        if (isEmpty(foreignNumber)){
                return false;
        }
        if (foreignNumber.length != 13) {
                return false;
        }
        if ((foreignNumber.charAt(6) == "5") || (foreignNumber.charAt(6) == "6")){
           birthYear = "19";
        }else if ((foreignNumber.charAt(6) == "7") || (foreignNumber.charAt(6) == "8")){
           birthYear = "20";
        }else if ((foreignNumber.charAt(6) == "9") || (foreignNumber.charAt(6) == "0")){
           birthYear = "18";
        }else{
          alert("등록번호에 오류가 있습니다. 다시 확인하십시오.");
          return false;
        }
        birthYear += foreignNumber.substr(0, 2);
        birthMonth = foreignNumber.substr(2, 2) - 1;
        birthDate = foreignNumber.substr(4, 2);
        birth = new Date(birthYear, birthMonth, birthDate);

        if ( birth.getYear() % 100 != foreignNumber.substr(0, 2) ||
             birth.getMonth() != birthMonth ||
             birth.getDate() != birthDate) {
          return false;
        }
        return true;
}

function isEmpty(obj){
	if( obj == null ) {
		return true;
	}
	if( obj.trim() == "" ){
		return true;
	}
	return false;
}

function isEmptyValue(val){
	if( val == null ) {
		return true;
	}
	if( val.trim() == "" ){
		return true;
	}
	return false;
}

function isEmptyObject(obj){
	if( obj.value == null ) {
		return true;
	}
	if( obj.value.trim() == "" ){
		return true;
	}
	return false;
}
/** jQuery isEmpty Object **/
function jQureyIsEmptyObject(obj){
	if( obj.val() == null ) {
		return true;
	}
	if( $.trim(obj.val()) == "" ){
		return true;
	}
	return false;
}

function openLoadingDiv() {

}

function closeLoadingDiv() {

}

function removeOptions(ele) {
	for(i = ele.options.length; i >= 0; i--) {
		ele.options[i] = null;
	}
}

function addOptions(optionArray, textName, valueName, ele) {
	for(i = 0; i < optionArray.length; i++) {
		var optionMap = optionArray[i];
		ele.options.add(new Option(optionMap[textName], optionMap[valueName]));
	}
}

function getLastElement(eleStr) {

	var eles = document.getElementsByName(eleStr);
	return eles[eles.length-1];
}

function getFirstElement(eleStr) {
	var eles = document.getElementsByName(eleStr);
	return eles[0];
}

function getExtension(fileName) {

	return fileName.substring(fileName.lastIndexOf(".")+1, fileName.length);
}


function createHiddenElement(form, id, name, value ) {

	var newElement = document.createElement("INPUT");
	newElement.type = "hidden";
	newElement.name = name;
	newElement.id = id;
	newElement.value = value;
	form.appendChild(newElement);
	return newElement;

}

String.prototype.trim = function() {
	return this.replace(/(^ *)|( *$)/g, "");
}
String.prototype.ltrim = function() {
	return this.replace(/(^ *)/g, "");
}
String.prototype.rtrim = function() {
	return this.replace(/( *$)/g, "");
}

/*
 * input type='text' 빈공간을 없애준다.
 */
function checkEscape(srcElement){
      var objEv = srcElement;
      var numPattern = /[\s~!@\#$%^&*\()\-=+_'"\\|]/gi;
      if(numPattern.test(objEv.value)){
      objEv.value=objEv.value.replace(numPattern,"");
    }
}

/*
 *  -_ 허용하는 함수입니다.
 */
function emailCheckEscape(srcElement){
      var objEv = srcElement;
      var numPattern = /[\s~!@\#$%^&*\()\=+'"\\|]/gi;
      if(numPattern.test(objEv.value)){
      objEv.value=objEv.value.replace(numPattern,"");
    }
}

/*
 *  -_ 허용하는 함수입니다. @이도 허용
 */
function emailCheckEscape_2(srcElement){
      var objEv = srcElement;
      var numPattern = /[\s~!\#$%^&*\()\=+'"\\|]/gi;
      if(numPattern.test(objEv.value)){
      objEv.value=objEv.value.replace(numPattern,"");
    }
}

// pwd 숫자, 영문자 체크해준다.
function codeMask( objects ) {
	var Svalue = objects.value;
	var	isNumber = 0;
	var	isChar = 0;
	if ( Svalue == "" ) {
		return -1;
	}

	for ( var Ncnt = 0 ; Ncnt < Svalue.length ; Ncnt ++ ) {
		if (( '0' <= Svalue.charAt( Ncnt )) && ( Svalue.charAt( Ncnt ) <= '9' )) {
			isNumber ++;
			continue;
		} else if (( 'A' <= Svalue.charAt( Ncnt )) && ( Svalue.charAt( Ncnt ) <= 'Z' )) {
			isChar ++;
			continue;
		} else if (( 'a' <= Svalue.charAt( Ncnt )) && ( Svalue.charAt( Ncnt ) <= 'z' )) {
			isChar ++;
			continue;
		} else {
			return 1;
		}
	}

	if ( isNumber == Svalue.length )
		return 2;

	if ( isChar == Svalue.length )
		return 3;

	return 0;
}

// pwd 연속된 숫자
function sequenceMask( objects ) {
	var Svalue = objects.value;
	var	isSame = 0;
	var	isAscending = 0;
	var	isDescending = 0;

	if ( Svalue == "" )
		return -1;

	for ( var Ncnt = 1 ; Ncnt < Svalue.length ; Ncnt ++ ) {
		var	prevChar = Svalue.charCodeAt( Ncnt - 1 );
		var	currChar = Svalue.charCodeAt( Ncnt );

		if ( prevChar == currChar ) {
			isSame ++;
			if ( isSame > 2 )
				return 1;
		} else
			isSame = 0;

		if ( prevChar + 1 == currChar ) {
			isAscending ++;
			if ( isAscending > 2 )
				return 2;
		} else
			isAscending = 0;

		if ( prevChar - 1 == currChar ) {
			isDescending ++;
			if ( isDescending > 2 )
				return 3;
		} else
			isDescending = 0;
	}

	return 0;
}

var PopUp = function(elementId){
	this.element = $(elementId);
	this.init();
}

/*
 * 팝업창을 띄워 준다.
 * 사용법 : var popUp = null;
 * Event.observe( window, 'load', function(){
 *	popUp = new PopUp('layerWrapper');
 * });
 * Event.observe를 이용하여 합니다.
 * popUp.show() 팝업창이 띄워진다.
 * popUp.hide() 팝업창을 닫아준다.
 */
	PopUp.prototype = {
		init : function(){
			this.createDivBackground();
		},
		showLayerWrapper : function(){

			var pos = this.position();
			this.element.setStyle({
				'position' : 'absolute',
				'zIndex' : '100',
				'left': pos[0] + "px",
				'top' : pos[1] + "px"
			});
			this.element.show();
		},
		getDimension : function(){
			var widthWithScroll = document.documentElement.scrollWidth;
			var heightWithScroll = document.documentElement.scrollHeight+ 30;
			blackBg.style.width = widthWithScroll;
			blackBg.style.height = heightWithScroll;
		},
		/*
		 * DIV 투명한 검은색 배경을 보여준다.
		 */
		show : function(){
			this.getDimension();
			this.showLayerWrapper();
			$('blackBg').show();
		},
		hide : function(){
			this.element.hide();
			$('blackBg').hide();
		},
		/*
		 * body에 DIV 투명한 검은색 배경을 만든다.
		 */
		createDivBackground : function () {
			var createDiv = document.createElement('div');
			createDiv.setAttribute('id', 'blackBg');
			createDiv.style.display = 'none';
			createDiv.style.position = 'absolute';
			createDiv.style.background = '#000000';
			createDiv.style.filter = 'alpha(opacity=50)';
			createDiv.style.zIndex = '99';
			createDiv.style.width = '100%';
			createDiv.style.top = 0;
			createDiv.style.left = 0;
			createDiv.style.opacity = '0.5';
			
			document.body.appendChild(createDiv);
		},
		position : function(){
			var topWithScroll = document.documentElement.scrollTop;
			var clientWithWidth = document.documentElement.clientWidth;
			var clientWithHeight = document.documentElement.clientHeight;
			var layerWrapperObjWidth = this.element.getWidth();
			var layerWrapperObjHeight = this.element.getHeight();

			var pos = [];
			pos[0] = (clientWithWidth - layerWrapperObjWidth)/ 2;
			pos[1] = (clientWithHeight - layerWrapperObjHeight)/ 2 + (topWithScroll - 30);
			if(pos[0]<0){
				pos[0] = 0;
			}
			if(pos[1]<0){
				pos[1] = 0;
			}
			return pos;
		}
	}

var PopupBgWhite = function(elementId){
	this.element = $(elementId);
}

/*
 * 팝업창을 띄워 준다.
 * 사용법 : var popUp = null;
 * Event.observe( window, 'load', function(){
 *	popUp = new PopUp('layerWrapper');
 * });
 * Event.observe를 이용하여 합니다.
 * popUp.show() 팝업창이 띄워진다.
 * popUp.hide() 팝업창을 닫아준다.
 */
PopupBgWhite.prototype = {
	showLayerWrapper : function(){
		var pos = this.position();
		this.element.setStyle({
			'position' : 'absolute',
			'zIndex' : '100',
			'left': pos[0] + "px",
			'top' : pos[1] + "px"
		});
		this.element.show();
	},
	show : function(){
		this.showLayerWrapper();
	},
	hide : function(){
		this.element.hide();
	},
	position : function(){
		var topWithScroll = document.documentElement.scrollTop;
		var clientWithWidth = document.documentElement.clientWidth;
		var clientWithHeight = document.documentElement.clientHeight;
		var layerWrapperObjWidth = this.element.getWidth();
		var layerWrapperObjHeight = this.element.getHeight();

		var pos = [];
		pos[0] = (clientWithWidth - layerWrapperObjWidth)/ 2;
		pos[1] = (clientWithHeight - layerWrapperObjHeight)/ 2 + (topWithScroll - 30);
		if(pos[0]<0){
			pos[0] = 0;
		}
		if(pos[1]<0){
			pos[1] = 0;
		}
		return pos;
	}
}

/**
* textarea 박스의 byte수를 체크한다.
* 사용법
* <form method='post' name='form'>
* <textarea name='sms_msg' value='' onkeyup="length_count(this, 80)" onchange="length_count(this, 80)" onfocus="length_count(this, 80)"  cols=16 rows=5></textarea><br>
* <span id='sms_msg_count'>0</span> Byte (80바이트까지 입력가능합니다.)
* </form>
* 표시될 글자수의  name (sapn의 name)은 textarea name + '_count' 임
**/
function length_count(filed, max_count){
	var str;
	var str_count = 0;
	var cut_count = 0;
	var str_length = filed.value.length;

	for(k=0; k < str_length; k++){
		str = filed.value.charAt(k);
		if(escape(str).length > 4){
			str_count += 2;
		}else{
			// (\r\n은 1byte 처리)
			if(escape(str)=='%0A') {

			}else{
				str_count++;
			}
		}
		if(max_count < str_count){
			alert("글자수가 "+ max_count +" byte 이상은 사용불가능합니다");
			if(escape(str).length > 4){
				str_count -= 2;
			}else{
				str_count--;
			}
			filed.value = filed.value.substring(0,k);
			break;
		}
	}
}

var domainList = [
	'naver.com', 'chol.com', 'dreamwiz.com', 'empal.com', 'freechal.com',
	'gmail.com', 'hanafos.com', 'hanmail.net', 'hanmir.com', 'hitel.net',
	'hotmail.com', 'korea.com',	'lycos.co.kr', 'nate.com', 'netian.com',
	'paran.com', 'yahoo.com', 'yahoo.co.kr'
];

var EmailDomain = {
	domainList : [
		'naver.com', 'chol.com', 'dreamwiz.com', 'empal.com', 'freechal.com',
		'gmail.com', 'hanafos.com', 'hanmail.net', 'hanmir.com', 'hitel.net',
		'hotmail.com', 'korea.com',	'lycos.co.kr', 'nate.com', 'netian.com',
		'paran.com', 'yahoo.com', 'yahoo.co.kr'
	],
	isSelected : false,
	inputEle : null,
	selectDomain : function(ele, layerId){
		this.inputEle = ele;
		var divClass = ele.parentElement;
		divClass.style.position = 'relative';
		var eleValue= ele.value.toLowerCase();
		if(eleValue!=''){
			var cnt = 0;
			var ele = $(layerId);
			var innerStr = "<ul>";

			for(var i=0; i < this.domainList.length; i++){
				if(eleValue.substr(0, eleValue.length) == this.domainList[i].substr(0, eleValue.length)){
					var first = this.domainList[i].substr(0,1);
					var rest = this.domainList[i].substr(1);
					innerStr +='<li>';
					innerStr +='	<a style="cursor:pointer" onclick="EmailDomain.selectedDomain(\''+ this.domainList[i] +'\', '+ layerId +')">';
					innerStr +='<strong>'+ first +'</strong>' + rest;
					innerStr +='	</a>';
					innerStr +='</li>';
					cnt++;
				}
			}
			innerStr +="</ul>";

			ele.innerHTML = innerStr;

			if(cnt>0){
				ele.style.left = this.inputEle.offsetLeft - 10;
				ele.show();
			} else {
				ele.hide();
			}
		}
	},
	selectedDomain : function(val, layerId){
		this.inputEle.value = val;
		var divClass = this.inputEle.parentElement;
		divClass.style.position = '';
		$(layerId).hide();
	},
	doMouseOver : function(){
		EmailDomain.isSelected = true;
	},
	doMouseHide : function(){
		EmailDomain.isSelected = false;
	},
	doListHide : function(layerId){
		if(!EmailDomain.isSelected){
			if(this.inputEle!=null){
				var divClass = this.inputEle.parentElement;
				divClass.style.position = '';
				$(layerId).hide();
			}
		}
	}
}

// 검색 기간
function getFormattedDate(objDate) {
	year = ""+objDate.getFullYear();
	month = objDate.getMonth();
	date = objDate.getDate();
	year = year.substring(2);
	if(month < 9) {
		month = "0"+(month + 1);
	}

	if(date < 10) {
		date = "0"+date;
	}
	return year+month+date;
}
function setPeriod(startDate, endDate) {
	frm = $("searchForm");
	frm.SEARCH_START_DATE.value = startDate;
	frm.SEARCH_END_DATE.value = endDate;
}
function setPeriodToday(e) {
	Event.stop(e);
	var today = new Date();
	var strToday = getFormattedDate(today);
	setPeriod(strToday, strToday);
}
function setPeriodWeek(e) {
	Event.stop(e);
	var today = new Date();
	var startDate = new Date(today.getFullYear(), today.getMonth(), today.getDate() - 7);
	var endDate = today;

	var strStartDate = getFormattedDate(startDate);
	var strEndDate = getFormattedDate(endDate);
	setPeriod(strStartDate, strEndDate);
}
function setPeriodMonth(e) {
	Event.stop(e);
	var today = new Date();
	var startDate = new Date(today.getFullYear(), today.getMonth() - 1, today.getDate());
	var endDate = today;

	var strStartDate = getFormattedDate(startDate);
	var strEndDate = getFormattedDate(endDate);
	setPeriod(strStartDate, strEndDate);
}
function setPeriodThreeMonth(e) {
	Event.stop(e);
	var today = new Date();
	var startDate = new Date(today.getFullYear(), today.getMonth() - 3, today.getDate());
	var endDate = today;

	var strStartDate = getFormattedDate(startDate);
	var strEndDate = getFormattedDate(endDate);
	setPeriod(strStartDate, strEndDate);
}
function setPeriodSixMonth(e) {
	Event.stop(e);
	var today = new Date();
	var startDate = new Date(today.getFullYear(), today.getMonth() - 6, today.getDate());
	var endDate = today;

	var strStartDate = getFormattedDate(startDate);
	var strEndDate = getFormattedDate(endDate);
	setPeriod(strStartDate, strEndDate);
}
function setPeriodYear(e) {
	Event.stop(e);
	var today = new Date();
	var startDate = new Date(today.getFullYear() - 1, today.getMonth(), today.getDate());
	var endDate = today;

	var strStartDate = getFormattedDate(startDate);
	var strEndDate = getFormattedDate(endDate);
	setPeriod(strStartDate, strEndDate);
}
function setPeriodFulll(e) {
	Event.stop(e);
	var today = new Date();
	var endDate = today;
	var strStartDate = "000000";
	var strEndDate = getFormattedDate(endDate);
	setPeriod(strStartDate, strEndDate);
}


/**
* Ajax
*/
function httpRequest(_url, _fn, _prm) {
	var qry = '';
	var httpReq = new Ajax.Request(_url, {
		parameters: _prm,
		onComplete: function(httpReq) {
		var rep = httpReq.responseText;
		_fn(rep);
	},
	onException: httpException
	});
}

function httpException(){
	alert('오류가 발생하였습니다. 잠시후 다시 시도하여 주십시오.');
}

var LogIn = {
	validation : function() {
		var saveMemberId = $('saveMemberId');
		if(saveMemberId!=null){
			/* id save */
			if(saveMemberId.checked){
				if(!$('saveMemberId').getValue().blank()){
					setCookie( 'saveMemberId',  $('MEMBER_ID').getValue(), '365');
				}
			} else {
				deleteCookie('saveMemberId');
			}
		}
		var loginForm = $('loginForm');
		if(loginForm.MEMBER_ID.value.trim()==''){
			alert('아이디를 입력 하여 주십시오.');
			loginForm.MEMBER_ID.focus();
			return;
		}
		if(loginForm.MEMBER_PASSWORD.value.trim()==''){
			alert('패스워드를 입력 하여 주십시오.');
			loginForm.MEMBER_PASSWORD.focus();
			return;
		}
		return true;
	},
	httpRequest : function(event, isKeyDown){
		var loginForm = $('loginForm');
		if(isKeyDown) {
			if(event.keyCode != 13) {
				return;
			}
		}
		if(LogIn.validation()){
			dwr.engine.setErrorHandler(this.httpRequestError);
			var param = { 'MEMBER_ID': loginForm.MEMBER_ID.value, 'MEMBER_PASSWORD': loginForm.MEMBER_PASSWORD.value, 'returnURI' : $F('returnURI') };
			JLoginProcess.execute( param, function(res){
				if(res!=''){
					document.location.href(res);
				} else {
					alert('로그인에 실패하였습니다. \r\n아이디/비밀번호를 확인하여 주십시오.');
				}
			});
		}
	},
	httpRequestError : function () {
		alert("DWR Server Error");
	},
	displayLoginBox : function(val){
		if(val=='0'){
			$('subLogin').hide();
			$('mainLogin').show();
		} else {
			$('subLogin').show();
			$('mainLogin').hide();
			LogIn.getMemberPointInfo();
		}
	},
	getMemberPointInfo: function(){
		JIndex.getMyPoint(function(res){
			var arry = res;
			(arry.length);
			if(arry[0] != -1){
				$('studyPoint').innerHTML = arry[0];
				$('bocachip').innerHTML = arry[1];
				$('coupon').innerHTML = arry[2];
			}else{
				$('studyPoint').innerHTML = 0;
				$('bocachip').innerHTML = 0;
				$('coupon').innerHTML = 0;
			}
		});
	}
}

var MyPage = {
	validation : function() {
		var myPagePwCheckForm = $('myPagePwCheckForm');
		if(myPagePwCheckForm.MEMBER_PASSWORD.value.trim()==''){
			alert('패스워드를 입력 하여 주십시오.');
			myPagePwCheckForm.MEMBER_PASSWORD.focus();
			return;
		}
		return true;
	},
	httpRequest : function(event, isKeyDown){
		var myPagePwCheckForm = $('myPagePwCheckForm');
		if( isKeyDown ) {
			if(event.keyCode != 13) {
				return;
			}
		}
		if(MyPage.validation()){
			dwr.engine.setErrorHandler(this.httpRequestError);
			var param = { 'MEMBER_ID': myPagePwCheckForm.MEMBER_ID.value, 'MEMBER_PASSWORD': myPagePwCheckForm.MEMBER_PASSWORD.value, 'returnURI' : $F('returnURI') };
			JMyPageProcess.execute( param, function(res){
				if(res!=''){
					document.location.href(res);
				} else {
					alert('아이디/비밀번호를 확인하여 주십시오.');
				}
			});
		}
	},
	httpRequestError : function () {
		alert("DWR Server Error");
	}
}

function passKorean(e) {
	var charCode = (window.event) ?  event.keyCode : e.which;
	//if (charCode > 31 && (charCode < 48 || charCode > 57)) {
	if (charCode < 128) {
		return false;
	}
	return true;
}

function isEnter(e, fnc) {
	var charCode = (window.event) ?  event.keyCode : e.which;
	if(13 == charCode) {
		fnc(e);
	}
}

/**
* textarea 박스의 byte수를 체크한다.
* 사용법
* <form method='post' name='form'>
* <textarea name='sms_msg' value='' onkeyup="length_count(this, 80)" onchange="length_count(this, 80)" onfocus="length_count(this, 80)"  cols=16 rows=5></textarea><br>
* <span id='sms_msg_count'>0</span> Byte (80바이트까지 입력가능합니다.)
* </form>
* 표시될 글자수의  name (sapn의 name)은 textarea name + '_count' 임
**/
function length_count(filed, max_count){
	var str;
	var str_count = 0;
	var cut_count = 0;
	var str_length = filed.value.length;

	for(k=0; k < str_length; k++){
		str = filed.value.charAt(k);
		if(escape(str).length > 4){
				str_count += 2;
			}else{
			// (\r\n은 1byte 처리)
			if(escape(str)=='%0A') {
			}else{
				str_count++;
			}
		}
		if(max_count < str_count){
			alert("글자수가 "+ max_count +" byte 이상은 사용불가능합니다");
			if(escape(str).length > 4){
				str_count -= 2;
			}else{
				str_count--;
			}
			filed.value = filed.value.substring(0,k);
			break;
		}
	}
	try{
		document.getElementById(filed.name+"_count").innerHTML = str_count;
		//eval("document.all."+ filed.name+"_count.innerHTML = str_count;");
	}catch(e){}
}

function lengthCount(filed, max_count){
	var str;
	var str_count = 0;
	var cut_count = 0;
	var str_length = filed.value.length;

	for(k=0; k < str_length; k++){
		str = filed.value.charAt(k);
		if(escape(str).length > 4){
			str_count += 2;
		}else{
			if(escape(str)=='%0A') {

			}else{
				str_count++;
			}
		}
		if(max_count < str_count){
			alert(max_count +"byte만 입력 가능 합니다.");
			if(escape(str).length > 4){
				str_count -= 2;
			}else{
				str_count--;
			}
			filed.value = filed.value.substring(0,k);
			break;
		}
	}
}

// className을 이용해서 선택된 checkbox의 값을 배열로 가지고 온다.
function getCheckedList(className) {
	var checkBoxes = $$("input."+className);
	var checkBoxLength = checkBoxes.length;
	var checkedWords = [];
	checkBoxes.each(function(el, i) {
		if(el.checked) {
			checkedWords.push(el.value);
		}
	});
	return checkedWords;
}

function getCheckedListByEl(els) {
	var checkBoxLength = els.length;
	var checkedWords = [];
	for(var i = 0; i < checkBoxLength; i++) {
		var el = els[i];
		if(el.checked) {
			checkedWords.push(el.value);
		}
	}
	return checkedWords;
}

//단어장 스크랩
function noteScrap(seq,login){
	if(login == 'true'){
		if(confirm("스크랩시 보카칩이 2chip차감됩니다.\n스크랩하시겠습니까?")){
			JThemeAll.carryThemeNote(seq,complete);
		}
	}else{
		var returnURI = document.URL;
		if(confirm("로그인이 필요한 서비스 입니다.\n로그인을 하시겠습니까?")){
			location.replace("/join/login.do?returnURI=" + encodeURIComponent(returnURI));
		}
	}
}

function complete(res){
	if(res == 2){
		alert("자신의 테마는 스크랩 할 수 없습니다.");
	}else if(res == 3){
		 location.replace("/join/login.do");
	}else if(res == -2){
		alert("보카칩이 부족합니다.\n단어장을 스크랩 하기 위해서는 \n보카칩이 필요햡니다.");
	}else{
		alert("스크랩 되었습니다.");
		location.reload();
	}
}

/**
 * 샘플 강의 팝업을 띄운다.(샘플 강의 레이어 보기에 사용)
 * hmjkor@nate.com
 * @param studySeq
 * @param phaseSeq
 * @return
 */
function startSampleStudy(studySeq, phaseSeq, studyName){
	var form = $('sampleStudyForm');
	form.studySeq.value = studySeq;
	form.phaseSeq.value = phaseSeq;
	form.studyName.value = studyName;
	form.action="/corestudy/lectureSample.jsp";
	window.open('', 'sampleStudy', 'width=1024,height=768');
	form.target = "sampleStudy";
	form.submit();
}


function startPremiumStudy(commonStudySeq, studySeq, phaseSeq,  studyStatus , curLevelPosition, curLevelDetailPosition, studyName){
	var date = new Date();
	var form = $('premiumStudyForm');
	form.commonStudySeq.value = commonStudySeq;
	form.studySeq.value = studySeq;
	form.phaseSeq.value = phaseSeq;
	form.studyStatus.value = studyStatus;
	form.studyName.value = studyName;
	form.action="/corestudy/lectureView.jsp";

	//var url = '/corestudy/lectureView.jsp?dummy='+date.getTime() + '&studySeq=' + studySeq + '&phaseSeq=' + phaseSeq + '&commonStudySeq=' + commonStudySeq + "&studyName="+studyName;
	if( curLevelPosition  ){
		form.curLevelPosition.value = curLevelPosition;
		form.curLevelDetailPosition.value = curLevelDetailPosition;
		//url += "&curLevelPosition="+curLevelPosition+"&curLevelDetailPosition="+curLevelDetailPosition ;
	}
	//startPremiumStudy(studySeq, phaseSeq, commonStudySeq, studyName);
	//window.open(url , 'win', 'width=1024,height=768');

	window.open('', 'premiumStudy', 'width=1024,height=768');
	form.target = "premiumStudy";
	form.submit();
}


function startReviewStudy(commonStudySeq, studySeq, phase, studyName){

	var date = new Date();
	var form = $('reviewStudyForm');
	form.commonStudySeq.value = commonStudySeq;
	form.studySeq.value = studySeq;
	form.phase.value = phase;
	form.studyName.value = studyName;
	form.action="/corestudy/reviewLectureView.jsp";

	window.open('', 'reviewStudy', 'width=1024,height=768');
	form.target = "reviewStudy";
	form.submit();
}

var sampleLayerPop = null;
var SampleLayer = {
	sampleLayerGet: function(){
	var sampleLayer = $('sampleLayer');
	if(sampleLayer==null){
		var createDiv = document.createElement('div');
		createDiv.setAttribute('id', 'sampleLayer');
		createDiv.className = 'popLy';
		createDiv.style.display = 'none';
		document.body.appendChild(createDiv);
	}
	sampleLayerPop = new PopUp('sampleLayer');
		var date = new Date();
		var url = '/study/sampleListLayer.do';
		var data = "code=all&dummy=" + date.getTime();
		var myAjax = new Ajax.Request(
		    url,
		    {method: 'post', parameters: data, onComplete: function(res){
			    $('sampleLayer').update(res.responseText);
			    sampleLayerPop.show();
			 }});
	},
	closeLayer: function(){
		sampleLayerPop.hide();
	}
}




/**
* 2009.04.21 추가 윤상진
* IE에서 셀렉트박스가 레이어위로 나오는 것을 해결하는 함수
* sample <div id=myid onpropertychange="hideSelectBox(this)">
**/
function hideSelectBox(layerObj) {

    // 레이어 좌표
    var layerObj_left  = layerObj.offsetLeft;
    var layerObj_top    = layerObj.offsetTop;
    var layerObj_right  = layerObj.offsetLeft + layerObj.offsetWidth;
    var layerObj_bottom = layerObj.offsetTop + layerObj.offsetHeight;

    // 셀렉트박스의 좌표
    var el;

    var sbList = document.getElementsByTagName("select");
    if( sbList ){
        for (k=0; k < sbList.length; k++) {
            el = sbList[k];
            if (el.type == "select-one") {
                var el_left = el_top = 0;
                var obj = el;
                if (obj.offsetParent) {
                    while (obj.offsetParent) {
                        el_left += obj.offsetLeft;
                        el_top  += obj.offsetTop;
                        obj = obj.offsetParent;
                    }
                }
                el_left  += el.clientLeft;
                el_top    += el.clientTop;
                el_right  = el_left + el.clientWidth;
                el_bottom = el_top + el.clientHeight;

                // 좌표를 따져 레이어가 셀렉트 박스를 침범했으면 셀렉트 박스를 hidden 시킴
                var isOverlay =  ( (el_left >= layerObj_left && el_top >= layerObj_top && el_left <= layerObj_right && el_top <= layerObj_bottom) ||
                    (el_right >= layerObj_left && el_right <= layerObj_right && el_top >= layerObj_top && el_top <= layerObj_bottom) ||
                    (el_left >= layerObj_left && el_bottom >= layerObj_top && el_right <= layerObj_right && el_bottom <= layerObj_bottom) ||
                    (el_left >= layerObj_left && el_left <= layerObj_right && el_bottom >= layerObj_top && el_bottom <= layerObj_bottom) ) ;

                //히든 속성값 조절
                var isHidden = ( layerObj.style.display == 'none' || layerObj.style.visibility == 'hidden' );
                //alert( isOverlay + ":" +  isHidden);
                if( isOverlay ){
                    if( ! isHidden ){
                        el.style.visibility = 'hidden';
                    }else{
                        el.style.visibility = '';
                    }
                }
            }
        }
    }
}

/**
  * 쿠키 설정
  * @param cookieName 쿠키명
  * @param cookieValue 쿠키값
  * @param expireDay 쿠키 유효날짜
  */
function setCookie( cookieName, cookieValue, expireDate ){
	var today = new Date();
	today.setDate( today.getDate() + parseInt( expireDate ) );
	document.cookie = cookieName + "=" + escape( cookieValue ) + "; path=/; expires=" + today.toGMTString() + ";";
}


 /**
  * 쿠키값 추출
  * @param cookieName 쿠키명
  */
 function getCookie( cookieName ){
	var search = cookieName + "=";
	var cookie = document.cookie;

 	// 현재 쿠키가 존재할 경우
	if( cookie.length > 0 ){
 		 // 해당 쿠키명이 존재하는지 검색한 후 존재하면 위치를 리턴.
		startIndex = cookie.indexOf( cookieName );

  		// 만약 존재한다면
		if( startIndex != -1 ){
			// 값을 얻어내기 위해 시작 인덱스 조절
			startIndex += cookieName.length;

			// 값을 얻어내기 위해 종료 인덱스 추출
			endIndex = cookie.indexOf( ";", startIndex );

			// 만약 종료 인덱스를 못찾게 되면 쿠키 전체길이로 설정
			if( endIndex == -1) endIndex = cookie.length;

			// 쿠키값을 추출하여 리턴
			return unescape( cookie.substring( startIndex + 1, endIndex ) );
		} else {
			// 쿠키 내에 해당 쿠키가 존재하지 않을 경우
			return '';
		}
	} else {
		// 쿠키 자체가 없을 경우
		return '';
	}
}


 /**
  * 쿠키 삭제
  * @param cookieName 삭제할 쿠키명
  */
function deleteCookie( cookieName ){
	var expireDate = new Date();

	//어제 날짜를 쿠키 소멸 날짜로 설정한다.
	expireDate.setDate( expireDate.getDate() - 1 );
	document.cookie = cookieName + "= " + "; expires=" + expireDate.toGMTString() + "; path=/";
}

/*
* 시작 시점에서 해당 엘레멘트의 값들을 숫자만 입력 가능하게 한다.
* 해당 엘레멘트는 input type 은  text 가 되어야 하고, isNumberic 값은 'true' 값을 가져야 한다.
*/
function numericOnlyInitTime() {

    var allInput = document.all.tags('INPUT');
   
    
    for( var i=0 ; i < allInput.length; i++ ) {
		
        var input = allInput[i];
        
        if( input.type=='text' && input.isNumeric == 'true') {

            input.style.imeMode = 'disabled';
            input.onkeyup = numericKeyOnly;
            input.onblur = numericKeyOnly;
        }
    }

}

numericKeyOnly = function() {
	var obj  = event.srcElement;
    obj.value = obj.value.replace(/[^\d]/g,'');

}

function popLastDelemeter(str, delemeter) {
	var returnStr = str;
	if(str.lastIndexOf(delemeter) == str.length - 1) {
		returnStr = str.substring(0, str.lastIndexOf(delemeter));
	}
	return returnStr;
}




/*
    http://www.JSON.org/json_parse.js
    2008-04-08

    Public Domain.

    NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK.

    This file creates a json_parse function.

        json_parse(text, reviver)
            This method parses a JSON text to produce an object or array.
            It can throw a SyntaxError exception.

            The optional reviver parameter is a function that can filter and
            transform the results. It receives each of the keys and values,
            and its return value is used instead of the original value.
            If it returns what it received, then the structure is not modified.
            If it returns undefined then the member is deleted.

            Example:

            // Parse the text. Values that look like ISO date strings will
            // be converted to Date objects.

            myData = json_parse(text, function (key, value) {
                var a;
                if (typeof value === 'string') {
                    a =
/^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2}(?:\.\d*)?)Z$/.exec(value);
                    if (a) {
                        return new Date(Date.UTC(+a[1], +a[2] - 1, +a[3], +a[4],
                            +a[5], +a[6]));
                    }
                }
                return value;
            });

    This is a reference implementation. You are free to copy, modify, or
    redistribute.

    This code should be minified before deployment.
    See http://javascript.crockford.com/jsmin.html

    USE YOUR OWN COPY. IT IS EXTREMELY UNWISE TO LOAD CODE FROM SERVERS YOU DO
    NOT CONTROL.
*/

/*members "", "\"", "\/", "\\", at, b, call, charAt, f, fromCharCode,
    hasOwnProperty, message, n, name, push, r, t, text
*/

/*global json_parse */

json_parse = function () {

// This is a function that can parse a JSON text, producing a JavaScript
// data structure. It is a simple, recursive descent parser. It does not use
// eval or regular expressions, so it can be used as a model for implementing
// a JSON parser in other languages.

// We are defining the function inside of another function to avoid creating
// global variables.

    var at,     // The index of the current character
        ch,     // The current character
        escapee = {
            '"':  '"',
            '\\': '\\',
            '/':  '/',
            b:    '\b',
            f:    '\f',
            n:    '\n',
            r:    '\r',
            t:    '\t'
        },
        text,

        error = function (m) {

// Call error when something is wrong.

            throw {
                name:    'SyntaxError',
                message: m,
                at:      at,
                text:    text
            };
        },

        next = function (c) {

// If a c parameter is provided, verify that it matches the current character.

            if (c && c !== ch) {
                error("Expected '" + c + "' instead of '" + ch + "'");
            }

// Get the next character. When there are no more characters,
// return the empty string.

            ch = text.charAt(at);
            at += 1;
            return ch;
        },

        number = function () {

// Parse a number value.

            var number,
                string = '';

            if (ch === '-') {
                string = '-';
                next('-');
            }
            while (ch >= '0' && ch <= '9') {
                string += ch;
                next();
            }
            if (ch === '.') {
                string += '.';
                while (next() && ch >= '0' && ch <= '9') {
                    string += ch;
                }
            }
            if (ch === 'e' || ch === 'E') {
                string += ch;
                next();
                if (ch === '-' || ch === '+') {
                    string += ch;
                    next();
                }
                while (ch >= '0' && ch <= '9') {
                    string += ch;
                    next();
                }
            }
            number = +string;
            if (isNaN(number)) {
                error("Bad number");
            } else {
                return number;
            }
        },

        string = function () {

// Parse a string value.

            var hex,
                i,
                string = '',
                uffff;

// When parsing for string values, we must look for " and \ characters.

            if (ch === '"') {
                while (next()) {
                    if (ch === '"') {
                        next();
                        return string;
                    } else if (ch === '\\') {
                        next();
                        if (ch === 'u') {
                            uffff = 0;
                            for (i = 0; i < 4; i += 1) {
                                hex = parseInt(next(), 16);
                                if (!isFinite(hex)) {
                                    break;
                                }
                                uffff = uffff * 16 + hex;
                            }
                            string += String.fromCharCode(uffff);
                        } else if (typeof escapee[ch] === 'string') {
                            string += escapee[ch];
                        } else {
                            break;
                        }
                    } else {
                        string += ch;
                    }
                }
            }
            error("Bad string");
        },

        white = function () {

// Skip whitespace.

            while (ch && ch <= ' ') {
                next();
            }
        },

        word = function () {

// true, false, or null.

            switch (ch) {
            case 't':
                next('t');
                next('r');
                next('u');
                next('e');
                return true;
            case 'f':
                next('f');
                next('a');
                next('l');
                next('s');
                next('e');
                return false;
            case 'n':
                next('n');
                next('u');
                next('l');
                next('l');
                return null;
            }
            error("Unexpected '" + ch + "'");
        },

        value,  // Place holder for the value function.

        array = function () {

// Parse an array value.

            var array = [];

            if (ch === '[') {
                next('[');
                white();
                if (ch === ']') {
                    next(']');
                    return array;   // empty array
                }
                while (ch) {
                    array.push(value());
                    white();
                    if (ch === ']') {
                        next(']');
                        return array;
                    }
                    next(',');
                    white();
                }
            }
            error("Bad array");
        },

        object = function () {

// Parse an object value.

            var key,
                object = {};

            if (ch === '{') {
                next('{');
                white();
                if (ch === '}') {
                    next('}');
                    return object;   // empty object
                }
                while (ch) {
                    key = string();
                    white();
                    next(':');
                    object[key] = value();
                    white();
                    if (ch === '}') {
                        next('}');
                        return object;
                    }
                    next(',');
                    white();
                }
            }
            error("Bad object");
        };

    value = function () {

// Parse a JSON value. It could be an object, an array, a string, a number,
// or a word.

        white();
        switch (ch) {
        case '{':
            return object();
        case '[':
            return array();
        case '"':
            return string();
        case '-':
            return number();
        default:
            return ch >= '0' && ch <= '9' ? number() : word();
        }
    };

// Return the json_parse function. It will have access to all of the above
// functions and variables.

    return function (source, reviver) {
        var result;

        text = source;
        at = 0;
        ch = ' ';
        result = value();
        white();
        if (ch) {
            error("Syntax error");
        }

// If there is a reviver function, we recursively walk the new structure,
// passing each name/value pair to the reviver function for possible
// transformation, starting with a temporary root object that holds the result
// in an empty key. If there is not a reviver function, we simply return the
// result.

        return typeof reviver === 'function' ? function walk(holder, key) {
            var k, v, value = holder[key];
            if (value && typeof value === 'object') {
                for (k in value) {
                    if (Object.hasOwnProperty.call(value, k)) {
                        v = walk(value, k);
                        if (v !== undefined) {
                            value[k] = v;
                        } else {
                            delete value[k];
                        }
                    }
                }
            }
            return reviver.call(holder, key, value);
        }({'': result}, '') : result;
    };
}();



